2011-06-14 67 views
5

中的文件啓動活動我正在開發一個應用程序列出文件夾(在ListView中)的文件。當用戶點擊其中一個項目時,如果它是一個文件,那麼我想啓動一個可以處理它的活動(如果有的話),或者如果沒有則顯示某種錯誤消息。基於Android

我該怎麼做?當然不是全部,但是我怎樣才能確定哪個應用程序可以處理文件(如果有的話)。

+0

有這個但回答我的問題,所以請仔細檢舉此爲重複之前閱讀其他職位沒有這種特定的,沒有什麼其他很多類似的帖子。 – Gallal 2011-06-14 01:48:00

回答

0

基於...

我怎麼能確定哪個應用程序(一個或多個)可以處理一個文件,如果有的話?

我想你想要的是PackageManager.queryIntentActivities你創建一個基於目標文件的意圖,然後讀取返回的列表。

7

首先,您需要確定文件的MIME類型。您可以使用MimeTypeMap做到這一點:

MimeTypeMap map = MimeTypeMap.getSingleton(); 
String extension = map.getFileExtensionFromUrl(url); // url is the url/location of your file 
String type = map.getMimeTypeFromExtension(extension); 

然後,一旦你知道的MIME類型,您可以創建該類型的意圖:

Intent intent = new Intent(); 
intent.setType(type); 

最後,要檢查是否有任何活動可以解決意圖與這種類型。這可以通過PackageManager來完成:

PackageManager manager = getPackageManager(); // I'm assuming this is done from within an activity. This a Context method. 
List<ResolveInfo> resolvers = manager.queryIntentActivities(intent, 0); 
if (resolvers.isEmpty()) { 
    // display error 
} else { 
    // launch the intent. You will also want to set the data based on the uri of your file 
} 
+0

我嘗試過這樣,它可以很好地處理'pdf'和'doc'等擴展,但是當我使用'JPG'時,它給了我一個很長的無意義列表。它將諸如GPS之類的系統工具顯示爲可處理'JPG'的應用程序。還有其他建議嗎? – Gallal 2011-06-14 22:05:20

+1

PackageManager中還有一個getPreferredActivities()方法,您可以利用它來確定是否有首選應用程序處理特定的MIME類型,否則,這是預期的android行爲。 – Noel 2011-06-14 23:11:48