【发布时间】:2012-06-19 14:01:53
【问题描述】:
我已经在这里查看了所有类似的问题,但我一生都无法弄清楚我做错了什么。
我编写了一个尝试启动各种文件的应用程序,类似于文件浏览器。 单击文件时,它会尝试根据其关联的 MIME 类型启动程序,或者显示“选择要启动的应用程序”对话框。
这是我用来启动的代码:
File file = new File(app.mediaPath() + "/" +_mediaFiles.get(position));
Intent myIntent = new Intent(android.content.Intent.ACTION_VIEW);
String extension = android.webkit.MimeTypeMap.getFileExtensionFromUrl(Uri.fromFile(file).toString());
String mimetype = android.webkit.MimeTypeMap.getSingleton().getMimeTypeFromExtension(extension);
myIntent.setDataAndType(Uri.fromFile(file),mimetype);
startActivity(myIntent);
这会失败并产生错误:
android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.VIEW dat=file:///file:/mnt/sdcard/roms/nes/Baseball_simulator.nes }
现在,如果我安装 OI 文件管理器,它会打开而不是引发此错误,然后如果我从其中单击同一文件,它会启动相应的对话框。
我注意到该特定文件的 MIME 类型失败,但其他 MIME 类型(如 .zip)确实返回值。
当 MIME 类型为 null 以调用允许用户选择的对话框时,我是否遗漏了什么?
我尝试了其他启动应用的变体,包括不设置 MIME 类型,只使用.setData,但没有成功。
我想要发生的操作是,用户单击文件,如果它与应用程序启动的应用程序相关联,否则,用户将获得带有应用程序列表的“使用完成操作”对话框。
感谢您的建议。
【问题讨论】:
-
mimetype 字符串中有什么?粘贴到这里
-
看起来,如果它是具有关联文件的东西,那么它就是正确的 MIME 类型,但如果它是未绑定到应用程序的东西,它会通过 null..
标签: android android-intent file-browser