如何在android中隐藏Intent Chooser窗口?

时间:2010-05-21 14:19:53

标签: android video android-intent

当我点击按钮时,我为youtube视频开始了这样的活动:

startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.youtube.com/watch?v=cxLG2wtE7TM")));

如果我使用它的重定向到意图选择器,在浏览器或youtube应用程序上打开该视频网址。如何以编程方式选择默认应用作为youtube?

我的输出应该直接在youtube播放器上打开该视频。怎么样?任何想法?

2 个答案:

答案 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应用程序)执行操作,您可以使用隐含的意图模型,因此用户可以控制使用的应用程序。