我在使用视频 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/