android - Jelly Bean 上的视频 Intent 出现奇怪错误

标签 android video android-4.0-ice-cream-sandwich android-4.2-jelly-bean

我在使用视频 Intents 时遇到了一个奇怪的错误,这是我在 Android 4.1 之前从未遇到过的错误。

这是我启动 Intent 的代码。我也尝试过其他 MIME 类型,包括 video/mp4,但根据 Intents and Intent filters 上的官方 Android 开发人员网站,通配符 (*video/**) 应该可以正常工作。

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,所以我想知道为什么它不再适用于默认视频播放器。

有什么想法吗?

这似乎是同一个问题:

Video player not working on Jelly Bean device :android.content.ActivityNotFoundException

最佳答案

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

This method automatically clears any data that was previously set (for example by setData(Uri)).

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

下面是创建视频 Intent 的最终代码:

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;
}

关于android - Jelly Bean 上的视频 Intent 出现奇怪错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13336925/

相关文章:

android - 原始 SQLite 游标上的 registerContentObserver()

javascript - 使用 Javascript 在 Youtube 网站内检测 Youtube 视频的结尾

Android 外部应用程序无法访问应用程序的文件

android - 带有拆分 ActionBar 的 ShareActionProvider

android - 解决 PhoneGap 1.4.1 上 Android 4+ 动态 JS 联动问题

android - 如何使用内置的谷歌地图应用程序根据数据显示许多地点标记

Android 在 Interactors MVP 之间传递数据

Android sqlite - 如何管理 where 子句中的整数值

javascript - 带有基于 HTML 的播放列表的 HTML5 视频播放器

video - openCV cvCreateVideoWriter 总是返回 null