启动文件和MIME类型的意图是什么?启动文件和MIME类型的意图是什么?(Launching an

2019-06-17 10:15发布

我已经在这里回顾所有类似的问题,但我不能为我的生命找出我做错了什么。

我已经写了尝试推出各种文件,排序的文件浏览器的应用程序。 当点击一个文件,它会尝试推出基于其相关联的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没有成功。

我希望发生的动作是,用户点击一个文件,如果它与应用程序启动,如果没有,用户“使用的应用”对话框,应用程序的列表,获取应用程序相关联。

感谢您的任何意见。

Answer 1:

好感谢公开赛意图家伙,我错过了答案通过他们在自己的文件管理器代码的第一次,这是我结束了:

    File file = new File(filePath);
    MimeTypeMap map = MimeTypeMap.getSingleton();
    String ext = MimeTypeMap.getFileExtensionFromUrl(file.getName());
    String type = map.getMimeTypeFromExtension(ext);

    if (type == null)
        type = "*/*";

    Intent intent = new Intent(Intent.ACTION_VIEW);
    Uri data = Uri.fromFile(file);

    intent.setDataAndType(data, type);

    startActivity(intent);

如果您使用的MIME类型"* / *"当你无法从系统中确定它(它是null ),它激发适当的选择应用程序的对话框。



Answer 2:

您可以使用通用的意图来打开文件,这样的建议这个代码片段在这里 :

private void openFile(File aFile){
    try {
        Intent myIntent = new Intent(android.content.Intent.VIEW_ACTION,
        new ContentURI("file://" + aFile.getAbsolutePath()));
        startActivity(myIntent);
    } catch (URISyntaxException e) {
        e.printStackTrace();
    }
}     

但我通常看到的应用程序检查嵌套如果最后尝试打开文件,将“text / plain的 ”类型文件的扩展名:

Intent generic = new Intent();
generic.setAction(android.content.Intent.ACTION_VIEW);
generic.setDataAndType(Uri.fromFile(file), "text/plain");     
try {
    startActivity(generic);
    } catch(ActivityNotFoundException e) {
    ...
}     

你可以在看到完整的代码这个问题,或者这个开源项目 。 我希望这可以帮助您。



文章来源: Launching an intent for file and MIME type?