首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Android打算播放视频吗?

Android打算播放视频吗?
EN

Stack Overflow用户
提问于 2009-10-15 12:39:29
回答 6查看 122.6K关注 0票数 64

我正试着在Android上播放视频,通过发起一个意图。我使用的代码是:

代码语言:javascript
复制
tostart = new Intent(Intent.ACTION_VIEW);
tostart.setDataAndType(Uri.parse(movieurl), "video/*");
startActivity(tostart); 

这在大多数手机上都能用,但在宏达电英雄上就不行了。它似乎加载了一点不同的视频播放器。这确实会播放抛给它的第一个视频。然而,之后的每个视频都没有响应。(它保持在某个循环中)。

如果我添加一个显式

代码语言:javascript
复制
tostart.setClassName("com.htc.album","com.htc.album.ViewVideo");

(在开始活动之前)它确实可以在的HTC英雄上工作。但是,由于这是一个特定于HTC的呼叫,我不能在其他手机(如G1)上运行此代码。在G1上,这是可行的:

代码语言:javascript
复制
tostart.setClassName("com.android.camera","com.android.camera.MovieView"); //g1 version

但这一意图在主人公身上却缺失了。有没有人知道所有Android设备都应该支持的意图/类名列表?或者是发布视频的特定视频?谢谢!

EN

回答 6

Stack Overflow用户

发布于 2013-01-07 18:41:18

在Intent上使用setDataAndType

代码语言:javascript
复制
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(newVideoPath));
intent.setDataAndType(Uri.parse(newVideoPath), "video/mp4");
startActivity(intent);

使用"video/mp4“作为MIME或使用"video/*”,如果您不知道类型。

编辑:这对一般用途无效。它修复了旧HTC设备中的一个错误,该设备需要在意图构造函数中使用URI,并在之后进行设置。

票数 92
EN

Stack Overflow用户

发布于 2018-01-18 21:34:51

从现在开始,在API24之后,Uri.parse(filePath)将不起作用。你需要使用这个

代码语言:javascript
复制
final File videoFile = new File("path to your video file");
Uri fileUri = FileProvider.getUriForFile(mContext, "{yourpackagename}.fileprovider", videoFile);
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(fileUri, "video/*");
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);//DO NOT FORGET THIS EVER
startActivity(intent);

但在使用它之前,您需要了解文件提供程序是如何工作的。要更好地了解文件提供程序,请访问official document link

票数 20
EN

Stack Overflow用户

发布于 2009-10-24 00:22:56

我在Hero中遇到过这一点,使用的是我认为是已发布的API。最后,我使用了一个测试来查看是否可以接收意图:

代码语言:javascript
复制
private boolean isCallable(Intent intent) {
    List<ResolveInfo> list = getPackageManager().queryIntentActivities(intent, 
        PackageManager.MATCH_DEFAULT_ONLY);
    return list.size() > 0;
}

在我通常刚开始活动时使用:

代码语言:javascript
复制
final Intent intent = new Intent("com.android.camera.action.CROP");
intent.setClassName("com.android.camera", "com.android.camera.CropImage");
if (isCallable(intent)) {
    // call the intent as you intended.
} else {
    // make alternative arrangements.
}

显而易见:如果你沿着这条路走--使用非公共APIs -你绝对必须提供一个后备,你知道它肯定是有效的。它不一定是完美的,它可以是一个Toast,说明这个手机/设备不支持它,但你应该避免一个未捕获的异常。结束很明显。

我发现Open Intents Registry of Intents Protocols非常有用,但我还没有找到一个TCK类型的意图列表,这是绝对必须支持的,以及哪些应用程序可以做不同手机的例子。

票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1572107

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档