如何在android中隐藏意向选择器窗口?

如何在android中隐藏意向选择器窗口?,android,video,android-intent,Android,Video,Android Intent,当我单击按钮时,我会启动youtube视频的活动,如下所示: startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.youtube.com/watch?v=cxLG2wtE7TM"))); 如果我使用它,它将重定向到意图选择器,以在浏览器或youtube应用程序上打开该视频url。如何以编程方式选择默认应用程序作为youtube 我的输出应该直接在youtube播放器上打开该视频。怎样?有什么想法吗?您使用的是一个

当我单击按钮时,我会启动youtube视频的活动,如下所示:

startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.youtube.com/watch?v=cxLG2wtE7TM")));
如果我使用它,它将重定向到意图选择器,以在浏览器或youtube应用程序上打开该视频url。如何以编程方式选择默认应用程序作为youtube


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

您使用的是一个隐式意图,它可以匹配多个接收者,从而匹配选择器。如果你能找出如何直接针对youtube活动,你可以尝试切换到一个明确的意图模型。请参阅关于显式意图与隐式意图的说明

然而,使用意向选择器的原因似乎是让每个用户自己决定使用哪个播放器。你有什么好的理由想绕过这个吗?如果有人安装了他们喜欢的不同的视频播放器怎么办

编辑:要调用明确的意图,您需要知道您尝试启动的活动的名称,并将其他详细信息作为附加信息传递,例如:

Intent intent = new Intent(this, YouTubeViewerActivity.class);
intent.addExtra("URI", Uri.parse("http://www.youtube.com/watch?v=cxLG2wtE7TM"));
startActivity(intent);

然而,我完全虚构了一个事实,那就是有一个YouTube实习班。正如我所说,如果你要求一些外部服务(如YouTube应用程序)执行某项操作,通常你会像以前一样使用隐式意图模型,因此用户可以控制所使用的应用程序。

要求特定活动是有风险的,因为YouTube可能会更改他们的程序包名称,这将伴随着你的应用程序崩溃

此外,不能保证YT播放器安装在所有Android设备上

为了避免这种情况,这里有一个搜索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;
}
/**
*@param上下文
*@param要显示的url,例如http://www.youtube.com/watch?v=t_c6K1AnxAU
*@返回启动YouTube查看器的意图。如果找不到,威尔
*返回一般视频播放意图,系统将显示
*选择其他用户。
*/
公共静态意图GetYouTube内容(上下文、字符串url){
Intent videoIntent=newintent(Intent.ACTION_视图,Uri.parse(url));
final-PackageManager pm=context.getPackageManager();
列表活动列表=pm.querytentActivities(videoIntent,0);
对于(int i=0;i
您能给出一些更容易理解的示例代码吗?谢谢你能告诉我什么是隐含的youtube播放器活动吗?在Logcat中显示:“com.google.android.youtube/.PlayerActivity”。我该怎么办?你可以使用com.google.android.youtube.PlayerActivity。但正如Mayra提到的,这是一个坏主意,因为它会惹恼那些可能安装了其他应用程序的人,如果有人在没有安装YouTube应用程序的设备上运行你的应用程序,你的应用程序就会崩溃。它相当于Android的硬编码“iexplore.exe”来打开网页。