2012-08-10 103 views
1

我試圖獲取與擴展關聯的默認程序的圖標。ResolveInfo.isDefault始終爲false

這裏是我的代碼:

Intent intent = new Intent(Intent.ACTION_VIEW); 
MimeTypeMap mime = MimeTypeMap.getSingleton(); 
String tt = mime.getMimeTypeFromExtension(getExtension()); 

intent.setDataAndType(Uri.fromFile(getFile()), tt); 

List<ResolveInfo> matches = c.getPackageManager().queryIntentActivities(intent, 0); 

for (ResolveInfo match : matches) { 
    if(match.isDefault){ 
      //GET ICON 
    } 
} 

的問題是,match.isDefault總是返回false,即使我嘗試從0設置PackageManager的標誌PackageManager.MATCH_DEFAULT_ONLY

顯然,我測試的文件(視頻)默認與程序(MX Player)關聯。

有人可以幫我嗎?

在此先感謝。

回答

1

作爲替代解決方案,您可能希望使用此方法,而不是獲取默認的意圖:

 ResolveInfo info = getPackageManager().resolveActivity(intent, PackageManager.MATCH_DEFAULT_ONLY); 

返回的結果將是:

  1. 如果對於沒有默認值意圖: info.activityInfo.name將等於「com.android.internal.app.ResolverActivity」

  2. 如果有任何默認應用程序設置爲意圖,那麼你可以在ResolveInfo對象上檢查默認的應用信息。

編輯:

對於URL,你可以做這樣的事情:

//Example: youtube url 
    Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.youtube.com/watch?v=something")); 
    ResolveInfo defaultResolution = getPackageManager().resolveActivity(intent, PackageManager.MATCH_DEFAULT_ONLY); 

    //Print the activity name 
    Log.i(TAG, "defaultResolution:" + defaultResolution.activityInfo.name); 
+0

如何獲得用戶的喜好? – 2013-09-01 19:38:53

+0

@EugenMarynov嗯,對不起,我不知道你在問什麼。你能提供更多關於你的問題的細節嗎? – EwyynTomato 2013-09-02 02:13:28

+0

我選擇了instagram作爲與主持人「instagram」的鏈接的默認應用程序。是否有可能從PackageManager獲取這些信息? – 2013-09-02 04:57:34