选取照片,和录音,出错

jayqean 2012-05-29 10:57:47
选取照片,拍照,录音 都是调用系统自带的
直接录音不会出错,但是 选取照片或者拍完照片后,再录音就报java.lang.IllegalStateException: Unknown URL: content://media/external/audio/albumart/-1

具体报错提示:

05-28 17:05:03.466: E/AndroidRuntime(32226): FATAL EXCEPTION: main
05-28 17:05:03.466: E/AndroidRuntime(32226): java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=4, result=-1, data=Intent { dat=content://media/external/audio/media/229 }} to activity {com.agilemobi.activity/com.agilemobi.activity.AudioActivity}: java.lang.IllegalStateException: Unknown URL: content://media/external/audio/albumart/-1
05-28 17:05:03.466: E/AndroidRuntime(32226): at android.app.ActivityThread.deliverResults(ActivityThread.java:3734)
05-28 17:05:03.466: E/AndroidRuntime(32226): at android.app.ActivityThread.handleSendResult(ActivityThread.java:3776)
05-28 17:05:03.466: E/AndroidRuntime(32226): at android.app.ActivityThread.access$2800(ActivityThread.java:135)
05-28 17:05:03.466: E/AndroidRuntime(32226): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2166)
05-28 17:05:03.466: E/AndroidRuntime(32226): at android.os.Handler.dispatchMessage(Handler.java:99)
05-28 17:05:03.466: E/AndroidRuntime(32226): at android.os.Looper.loop(Looper.java:144)
05-28 17:05:03.466: E/AndroidRuntime(32226): at android.app.ActivityThread.main(ActivityThread.java:4937)
05-28 17:05:03.466: E/AndroidRuntime(32226): at java.lang.reflect.Method.invokeNative(Native Method)
05-28 17:05:03.466: E/AndroidRuntime(32226): at java.lang.reflect.Method.invoke(Method.java:521)
05-28 17:05:03.466: E/AndroidRuntime(32226): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:858)
05-28 17:05:03.466: E/AndroidRuntime(32226): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
05-28 17:05:03.466: E/AndroidRuntime(32226): at dalvik.system.NativeStart.main(Native Method)
05-28 17:05:03.466: E/AndroidRuntime(32226): Caused by: java.lang.IllegalStateException: Unknown URL: content://media/external/audio/albumart/-1
05-28 17:05:03.466: E/AndroidRuntime(32226): at android.os.Parcel.readException(Parcel.java:1255)
05-28 17:05:03.466: E/AndroidRuntime(32226): at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:160)
05-28 17:05:03.466: E/AndroidRuntime(32226): at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:114)
05-28 17:05:03.466: E/AndroidRuntime(32226): at android.content.ContentProviderProxy.insert(ContentProviderNative.java:450)
05-28 17:05:03.466: E/AndroidRuntime(32226): at android.content.ContentResolver.insert(ContentResolver.java:587)
05-28 17:05:03.466: E/AndroidRuntime(32226): at com.agilemobi.widget.AudioWidget.setBinaryData(AudioWidget.java:225)
05-28 17:05:03.466: E/AndroidRuntime(32226): at com.agilemobi.view.ODKView.setBinaryData(ODKView.java:47)
05-28 17:05:03.466: E/AndroidRuntime(32226): at com.agilemobi.activity.AudioActivity.onActivityResult(AudioActivity.java:158)
05-28 17:05:03.466: E/AndroidRuntime(32226): at android.app.Activity.dispatchActivityResult(Activity.java:3931)
05-28 17:05:03.466: E/AndroidRuntime(32226): at android.app.ActivityThread.deliverResults(ActivityThread.java:3730)
05-28 17:05:03.466: E/AndroidRuntime(32226): ... 11 more


而且这个错,只在HTC G7上出现,别的手机没发现。
...全文
632 22 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
jayqean 2012-05-30
  • 打赏
  • 举报
回复
大神们,快出现吧,
我目前发现一点,录音和拍照 存放文件的目录(因为我需要将这些文件放到固定目录下进行上传),如果换成sdcard下其他目录,没有出现问题。
本身,应用程序开启,会在sdcard下建立一个项目目录,folder = xxx/instances/当前日期和时分秒/
存放在该目录下会有问题。
是不是该目录正在使用,或者说 扫描 就会有问题呢?
s252718778 2012-05-30
  • 打赏
  • 举报
回复
http://stackoverflow.com/questions/6817755/how-can-i-understand-android-crash-errors-and-rectify-them-edited-solved
jayqean 2012-05-30
  • 打赏
  • 举报
回复
大伙们,来拯救下吧
jayqean 2012-05-29
  • 打赏
  • 举报
回复
我很纳闷,直接录音没问题, 选完照片,或者拍完照后,去录音就会有问题。
而且 拍照和选取照片的程序也是没问题的。
jayqean 2012-05-29
  • 打赏
  • 举报
回复

private void deleteMedia() {
// get the file path and delete the file
File f = new File(Constants.INSTANCEFOLDER + "/" + mBinaryName);
if (!f.delete()) {
Log.i(TAG, "Failed to delete " + f);
}

// clean up variables
mBinaryName = null;
}

private String getPathFromUri(Uri uri) {

String[] audioProjection = { Audio.Media.DATA };
Cursor c = ((Activity) getContext()).managedQuery(uri, audioProjection,
null, null, null);
String audioPath = null;
if (c != null) {
((Activity) getContext()).startManagingCursor(c);
int column_index = c.getColumnIndexOrThrow(Audio.Media.DATA);

if (c.getCount() > 0) {
c.moveToFirst();
audioPath = c.getString(column_index);
}
} else {
Toast.makeText(this.getContext(),
"Can not open selected media file.", Toast.LENGTH_LONG)
.show();
}
return audioPath;
}

@Override
public void setBinaryData(Object binaryuri) {
// TODO Auto-generated method stub
if (mBinaryName != null) {
deleteMedia();
}
Log.i("AudioWidget binaryuri", binaryuri + "");
// get the file path and create a copy in the instance folder
String binaryPath = getPathFromUri((Uri) binaryuri);
Log.i("AudioWidget binaryPath", binaryPath);
String extension = binaryPath.substring(binaryPath.lastIndexOf("."));
String destAudioPath = Constants.INSTANCEFOLDER + "/"
+ System.currentTimeMillis() + extension;// 项目对应的存放路径
if (binaryPath != null) {
File source = new File(binaryPath);
File newAudio = new File(destAudioPath);
FileUtils.copyFile(source, newAudio);// 将source路径下的文件copy到newAudio

if (newAudio.exists()) {
// Add the copy to the content provier
ContentValues values = new ContentValues(6);
values.put(Audio.Media.TITLE, newAudio.getName());
values.put(Audio.Media.DISPLAY_NAME, newAudio.getName());
values.put(Audio.Media.DATE_ADDED, System.currentTimeMillis());
values.put(Audio.Media.DATA, newAudio.getAbsolutePath());

System.out.println("Audio.Media.EXTERNAL_CONTENT_URI:"
+ Audio.Media.EXTERNAL_CONTENT_URI);// content://media/external/audio/media
Uri AudioURI = getContext().getContentResolver().insert(
Audio.Media.EXTERNAL_CONTENT_URI, values);
Log.i(TAG,
"Inserting AUDIO returned uri = " + AudioURI.toString());

} else {
Log.e(TAG, "Inserting Audio file FAILED");
}

mBinaryName = newAudio.getName();
enabledAudioPlayBtn();
mWaitingForData = false;
}
}

调用系统录音功能完成后,会调用onActivityResult(),然后 判断调用setBinaryData();
setBinaryData()方法的参数 是录完音后,得到的URI 。Uri media = intent.getData();

另外。出错所在的行在 setBinaryData()的
Uri AudioURI = getContext().getContentResolver().insert(
Audio.Media.EXTERNAL_CONTENT_URI, values);


感谢大伙们来回复,出错行 Audio.Media.EXTERNAL_CONTENT_URI为content://media/external/audio/media/
insert 后,就出现我上面说的问题。
xttxqjfg 2012-05-29
  • 打赏
  • 举报
回复
数据库操作的错误…可能属性不对
jayqean 2012-05-29
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

存入数据库的的操作没有成功。Unknown URL: content://media/external/audio/albumart/-1

-1表示你存入数据库后,这个record在数据库中对应主键的ID, 如果没有存入成功,则返回 -1.
[/Quote]
我调用的系统自带的录音功能,
实际上 URI是 content://media/external/audio/media/ ,
我看了下 MediaProvider的源码 有发现 content://media/external/audio/albumart/-1
不过我没跟踪到这里。
fishmen26 2012-05-29
  • 打赏
  • 举报
回复
存入数据库的的操作没有成功。Unknown URL: content://media/external/audio/albumart/-1

-1表示你存入数据库后,这个record在数据库中对应主键的ID, 如果没有存入成功,则返回 -1.
jayqean 2012-05-29
  • 打赏
  • 举报
回复
我奇怪的还有一个就是 先录音 再选照片,没问题。
jayqean 2012-05-29
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 的回复:]

http://stackoverflow.com/questions/6205049/android-devices-with-environment-getexternalstoragedirectory-mnt-sdcard

最后一个人的回答, 希望对你有帮助,
[/Quote]
感谢你的帮助,我看了下,我项目里 路径是/mnt/sdcard/下,纠结ing.
fishmen26 2012-05-29
  • 打赏
  • 举报
回复
http://stackoverflow.com/questions/6205049/android-devices-with-environment-getexternalstoragedirectory-mnt-sdcard

最后一个人的回答, 希望对你有帮助,
jayqean 2012-05-29
  • 打赏
  • 举报
回复
我自己抽取出来的工程,我可以单独发你邮件。
我是多么希望 抽出出来的也报同一个错。所以我断定 那些URI 啥的 没问题, 不然我自己的工程也会有错。
jayqean 2012-05-29
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 的回复:]

亲,表示需要更多的代码才能 定位问题, Constants.INSTANCEFOLDER 这个变量之类的代码。
[/Quote]
确定只在HTC 上出问题。
亲,前面贴的代码,是我单独从项目抽取出来,自己写的一个,在任何机上没问题。
Constants.INSTANCEFOLDER 这个是我模拟项目里的一个文件保存路径
public static final String INSTANCEFOLDER = Environment.getExternalStorageDirectory().getPath() + "/audio";
代码都差不多,唯一不同的是 我在9楼提到的路径问题。本身项目开发我没参与过,目前只是在改里面的BUG。
我看到那路径,被以前那哥们以一个静态变量在activity里给保存,我就想死的心都有。
fishmen26 2012-05-29
  • 打赏
  • 举报
回复
亲,表示需要更多的代码才能 定位问题, Constants.INSTANCEFOLDER 这个变量之类的代码。
fishmen26 2012-05-29
  • 打赏
  • 举报
回复
你确定这个问题只在G7出现么?
jayqean 2012-05-29
  • 打赏
  • 举报
回复
真是弄不明白,在别的手机 啥问题都没得, 在HTC G7问题这么大。
jayqean 2012-05-29
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 的回复:]

选择照片的地方有问题。试试这种。
Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityFor……
[/Quote]
还是有问题的,不过 我发现 选取照片和 录音文件 保存的sdcard路径,如果用一个常量 单独写出来,就不会出现上述问题。
本身 选取的照片和录音文件 也是存在一个同一个目录下,该目录是 从sqlite数据库查询出来的,这条记录是项目刚开始就保存了。
jayqean 2012-05-29
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 的回复:]

选择照片的地方有问题。试试这种。
Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityFor……
[/Quote]
我这项目里选择照片:

mChooseButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// Intent i = new Intent(Intent.ACTION_GET_CONTENT);
Intent i = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
i.setType("image/*");

((Activity) getContext())
.startActivityForResult(i, FormEntryActivity.IMAGE_CHOOSER);

}
});
fishmen26 2012-05-29
  • 打赏
  • 举报
回复
选择照片的地方有问题。试试这种。
Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(Intent.createChooser(intent,
"Select Picture"), SELECT_PICTURE);

另外
1.请用 log 代替system.out.
2.AudioURI -> audioUri
3. 没有必要用 managerquery , cursor的调用格式一般为:

if (c != null {
try {
//do something.
finally {
c.close();
}
避免内存泄漏
jayqean 2012-05-29
  • 打赏
  • 举报
回复
有大侠麽?
2020.04.02 F 修复 32 位系统无法编译小程序、提示重启耗时过久的问题 反馈详情 F 修复 使用 cli 打开 project.config.json 中 projectname 为中文的项目时会一直卡在初始化应用通信能力的问题 反馈详情 F 修复 ts 项目编译前命令无限执行的问题 反馈详情 F 修复 PC 端模拟器的 touchend 事件回调参数 changedTouches 为空的问题 反馈详情 2020.03.25 更新说明 A 新增 云开发控制台支持开通按量付费 A 新增 云开发支持数据库备份与回档(还原)详情 A 新增 支持小程序自动化多帐号调试 A 新增 显示灰度中的基础库以及基础库支持的客户端版本 详情 A 新增 下发测试基础库 详情 A 新增 支持模拟 API 的返回内容 详情 A 新增 支持同时重命名多个同名的文件 A 新增 真机调试出现异常时,可手动操作重试 A 新增 增加工具加载 loading 展示 A 新增 模拟器支持终止 A 新增 支持小游戏代码补全 U 优化 模拟器工具栏及状态栏界面 U 优化 云开发控制台监控图表展示 U 优化 模拟器添加边框 反馈详情 U 优化 更新命令行和 HTTP v2 版本 详情 F 修复 修改 cloudFunctionRoot 会出现文件找不到的问题 反馈详情 F 修复 不能正确打开已被删除文件夹的项目的问题 F 修复 点击菜单工具栏管理无反应的问题 F 修复 工具外修改项目配置 cli 上传不生效的问题 F 修复 工具预览/上传提示文件已经存在的问题 反馈详情 F 修复 调试器放大会导致 inspect 按钮样式异常的问题 F 修复 模拟器工具栏样式异常 F 修复 wx.addPhoneContact时顶部按钮显示错误的问题 反馈详情 F 修复 标题栏文字过长覆盖胶囊按钮的问题 F 修复 文件系统读取代码包内文件规则与真机不一致的问题 F 修复 关闭多帐号调试窗口 tabbar 内的 icon 无法加载的问题 反馈详情 F 修复 预览上传错误提示无效的 json 文件 反馈详情 F 修复 使用非等宽字体时光标可能错位的问题 F 修复 某些项目可能出现 wxml not found 的问题 F 修复 真机调试 Appdata 和 WXML 面板可能显示空白的问题 F 修复 弹出模拟器时 getMenuButtonBoundingClient 调用结果为空的问题 A 新增 支持小程序自动化截图功能 A 新增 编辑器面包屑导航条支持自定义快捷导航 A 新增 模拟小程序进程销毁重启 A 新增 编辑器行内错误和警告提示 A 新增 Mac 和 Windows 微信的模拟器类型 U 优化 1.02.1912261 的安装包结构 U 优化 MacOS 版关闭项目窗口时,显示项目列表窗口 U 优化 插件开发模式下 miniprogramRoot 下 app.json 中插件 provider 与项目 appid 一致时,version 必须为 "dev" F 修复 1.02.1912261 引入的多帐号调试 tabBar 图标无法加载的问题 F 修复 1.02.1912261 引入的 jsserverRoot 目录右键菜单缺失部分选项的问题 F 修复 公众号网页调试中,Base64 图片无法通过调试器打开的问题 反馈详情 F 修复 cli 调用自动预览无法使用自定义编辑条件的问题 F 修复 Windows 版无法使用录音功能的问题 F 修复 插件开发模式下,插件页面配置不生效的问题 F 修复 小游戏开放数据域使用增强编译报错的问题 F 修复 Windows 版某些情况下无法显示项目窗口的问题 F 修复 切换 cloudfunctionsRoot 无法同步云函数的问题 反馈详情 F 修复 Wxml 面板丢失 text 标签子节点的问题 F 修复 上传时文件体积大小提示错误问题 反馈详情 F 修复 使用非等宽字体时光标可能错位的问题 F 修复 文件系统 api 读取代码包内文件规则与真机不一致的问题 A 新增 编辑器全局替换 A 新增 编辑器分栏 A 新增 编辑器文件多选操作和拖动到文件夹 A 新增 编辑器多选操作和拖动到文件夹 A 新增 编辑器代码大纲 A 新增 编辑器文件对比 A 新增 选取 android 设备上的 profile 文件进行分析 详情 A 新增 WXML 面板支持自定义组件数据查看与实时修改 A 新增 WXML 面板支持使用键盘 (上下左右) navigate the DOM tree A 新增 WXML 面板

80,472

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧