杂项错误:Jelly Bean上视频Intent的问题

3
我在使用视频 Intents 时遇到了一个奇怪的错误,这种错误直到Android 4.1之前我都没有遇到过。
以下是我用于启动 Intent 的代码。我也尝试过其他MIME类型,包括 video/mp4 ,但是通配符(*video/**)应该可以正常工作,根据Intents and Intent filters上官方的Android开发者网站。
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
1个回答

4
我得到了他人的一些帮助,找到了一个解决方案。看起来,setType()调用会清除任何先前附加的数据,包括 setData() 调用。根据文档:

该方法会自动清除先前设置的数据(例如通过 setData(Uri) 设置的数据)。

将其改为 setDataAndType() 后,它可以工作。看来这并不是 Jelly Bean 的问题,谢天谢地 :-)
下面是创建视频意图的最终代码:
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;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接