当我点击按钮时,我为youtube视频开始了这样的活动:
startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.youtube.com/watch?v=cxLG2wtE7TM")));
如果我使用它的重定向到意图选择器,在浏览器或youtube应用程序上打开该视频网址。如何以编程方式选择默认应用作为youtube?
我的输出应该直接在youtube播放器上打开该视频。怎么样?任何想法?
答案 0 :(得分:7)
要求特定活动是有风险的,因为YouTube可能会更改其包裹名称,随后您的申请将会中断。
此外 - 无法保证所有Android设备上都安装了YT播放器。
要规避,这是一个搜索youtube活动的代码。如果找到它,它会返回一个直接使用它的意图,否则,它会保留一个“通用”意图,这将导致系统意图选择器被显示。
/**
* @param context
* @param url To display, such as http://www.youtube.com/watch?v=t_c6K1AnxAU
* @return an Intent to start the YouTube Viewer. If it is not found, will
* return a generic video-play intent, and system will display a
* chooser to ther user.
*/
public static Intent getYouTubeIntent(Context context, String url) {
Intent videoIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
final PackageManager pm = context.getPackageManager();
List<ResolveInfo> activityList = pm.queryIntentActivities(videoIntent, 0);
for (int i = 0; i < activityList.size(); i++) {
ResolveInfo app = activityList.get(i);
if (app.activityInfo.name.contains("youtube")) {
videoIntent.setClassName(app.activityInfo.packageName, app.activityInfo.name);
return videoIntent;
}
}
return videoIntent;
}
答案 1 :(得分:1)
您正在使用隐式意图,它可以匹配多个接收器,从而匹配选择器。如果您可以直接了解如何定位youtube活动,则可以尝试切换到显式意图模型。有关显式与隐式意图的信息,请参阅developer documentation。
然而,似乎意图选择器的原因是让每个用户自己决定使用哪个玩家。你有理由想绕过这个吗?如果有人安装了他们喜欢的不同视频播放器怎么办?
编辑:要调用明确的意图,您需要知道您尝试启动的活动的名称,并将其他详细信息作为附加内容传递,即:。
Intent intent = new Intent(this, YouTubeViewerActivity.class);
intent.addExtra("URI", Uri.parse("http://www.youtube.com/watch?v=cxLG2wtE7TM"));
startActivity(intent);
但是,我完全认为有一个YouTubeViewerActivity类。正如我所说,通常如果您要求某些外部服务(如YouTube应用程序)执行操作,您可以使用隐含的意图模型,因此用户可以控制使用的应用程序。