2010-05-21 43 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