2010-05-21 51 views
4

当我按一下按钮我开始为YouTube视频这样的活动:如何在android中隐藏Intent Chooser窗口?

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

如果我使用此其重定向到意向选择器来打开浏览器或YouTube应用程序,视频网址。如何以编程方式选择默认应用程序作为youtube?

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

回答

7

要求特定的活动是有风险的,因为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; 
} 
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应用程序)执行某项操作,则可以使用隐含的意图模型,因此用户可以控制使用的应用程序。

+0

你可以给一些示例代码更容易理解吗?感谢 – Praveen 2010-05-21 17:35:04

+0

你可否告诉我什么是隐式YouTube玩家活动?在Logcat中,它显示了这个:“com.google.android.youtube/.PlayerActivity”。我能怎么做 ? – Praveen 2010-05-21 18:11:49

+2

您将使用com.google.android.youtube.PlayerActivity。但是,正如Mayra所提到的,这是一个坏主意,因为它会惹恼那些可能安装了替代应用程序的人,并且如果有人在未安装YouTube应用程序的情况下在设备上运行应用程序,您的应用程序就会崩溃。这是Android的等价硬编码“iexplore.exe”来打开一个网页。 – 2010-05-21 18:48:54