3

我遇到了一个奇怪的视频错误,Intents直到 Android 4.1 才出现。

这是我启动Intent. 我也尝试过使用其他 MIME 类型,包括video/mp4,但是通配符 (*video/**) 应该可以正常工作,根据官方 Android 开发者网站Intents 和 Intent filters

Intent videoIntent = new Intent();
videoIntent.setAction(Intent.ACTION_VIEW);
videoIntent.setData(Uri.parse(fileUrl));
videoIntent.setType("video/*");

startActivity(videoIntent);

在我的设备上,都运行 Android 4.1,这会导致ActivityNotFoundException,因为它说没有安装的应用程序可以处理Intent. 这很奇怪,因为它一直适用于所有以前的 Android 版本,并且应该在默认视频播放器中启动。

许多第三方视频播放器都能够处理Intent,所以我想知道为什么它不再与默认视频播放器一起使用。

有任何想法吗?

这似乎是同一个问题:

视频播放器在果冻豆设备上不起作用:android.content.ActivityNotFoundException

4

1 回答 1

4

在其他人的帮助下,我设法找到了解决方案。该setType()调用似乎清除了任何先前附加的数据,包括该setData()调用。根据文档:

此方法会自动清除之前设置的所有数据(例如通过 setData(Uri))。

当我将其更改setDataAndType()为时,它起作用了。看来这毕竟不是果冻豆的问题,谢天谢地:-)

这是创建视频意图的最终代码:

public static Intent getVideoIntent(String fileUrl) {
    Intent videoIntent = new Intent(Intent.ACTION_VIEW);
    videoIntent.setDataAndType(Uri.fromFile(new File(fileUrl)), getMimeType(fileUrl));

    return videoIntent;
}

public static String getMimeType(String url) {
    String type = null;
    String extension = MimeTypeMap.getFileExtensionFromUrl(url);

    if (extension != null) {
        MimeTypeMap mime = MimeTypeMap.getSingleton();
        type = mime.getMimeTypeFromExtension(extension);

        if (TextUtils.isEmpty(type))
            type = "video/*"; // No MIME type found, so use the video wildcard
    }

    return type;
}
于 2012-11-12T18:01:36.760 回答