2010-08-24 126 views
1

我將如何能夠從應用程序獲取mimeType。如何從應用程序獲取mimeType?

我正在處理基於mimeType的某些已安裝應用程序的應用程序。

有人可以幫我解決這個問題嗎?

非常感謝

回答

1

MIME類型與活動相關。您可以使用List和PackageManager.queryIntentActivities(i,0)來獲取給定數據MIME類型的所有活動和應用程序。

public static List<ResolveInfo> getIntents(String action, String category, 
      PackageManager pm) { 
     Intent i = new Intent(action, null); 
     i.addCategory(category); 
     i.setData(data_uri) 
     List<ResolveInfo> list = pm.queryIntentActivities(i, 0); 
     return list; 
    } 

否則,你可以得到所有應用程序(可發射):

getIntents(Intent.ACTION_DEFAULT,Intent.CATEGORY_LAUNCHER,PM);

現在通過String類型= getIntent()。getType()分類。

+0

嗨薩米爾MIME類型,U可以給我一個例子。 像我想要的所有應用程序有視頻mimeType。 – suppi 2010-08-24 13:17:55

0

我將如何能夠從一個應用程序獲得的媒體類型。

應用程序沒有MIME類型。

你可以用一些MIME類型創建ACTION_VIEWIntent和使用PackageManagerqueryIntentActivities(),以確定哪些活動將到Intent迴應。

0

你只能得到MIME類型數據的意圖:

String type = getIntent().getType(); 
+0

喜, 我想獲得從其他應用程序的意圖... – suppi 2010-08-30 13:27:35

0

雖然這不是一個完整的答案,這應該可以幫助你接近:

PackageManager pm = getPackageManager(); 
     Intent i = new Intent(Intent.ACTION_MAIN); 
     i.addCategory(Intent.CATEGORY_LAUNCHER); 
     //i.setData(Media.INTERNAL_CONTENT_URI); 

     List<ResolveInfo> list = pm.queryIntentActivities(i, 0); 
     for(ResolveInfo item : list){ 


      try { 

       PackageInfo info = pm.getPackageInfo(item.activityInfo.applicationInfo.packageName, pm.GET_SIGNATURES); 
       Signature[] s = info.signatures; 

       Log.d(LOG_TAG,item.activityInfo.name +":"+ s.toString()); 

      } catch (NameNotFoundException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
      if(item.filter!=null){ 
       Log.d(LOG_TAG,item.activityInfo.name + ": " + item.filter.toString()); 
       List<String> types = (List<String>) item.filter.typesIterator(); 
      } 

     } 
+0

我用這個代碼來獲取所有的mimetypes。但我得到空指針作爲變量item.filter在模擬器和設備中都始終爲空。 – Pavandroid 2012-04-25 04:24:58

相關問題