2011-01-29 15 views
6

道歉,如果這已經被回答 - 如果有人可以指出我已經回答的問題,這將是偉大的...在Android中,如何顯示基於文件類型的應用程序選擇器?

很簡單,我想能夠彈出一個應用程序列表可以處理給定類型的文件 - 例如,如果我有音樂文件(mp3,ogg,無論),我希望能夠顯示所有加載的媒體應用程序的列表,這些應用程序可以處理文件並允許用戶選擇一個。

我一直在玩弄創建一個意圖要做到這一點,如下所示:

Intent myIntent = new Intent(); 
myIntent.setAction(Intent.ACTION_VIEW); 
myIntent.addCategory("android.intent.category.LAUNCHER"); 
myIntent.setType("mp3"); 
startActivity(myIntent); 

,但我已經得到明顯是錯誤的,因爲它崩潰每次。我應該使用ACTION_PICK還是ACTION_CHOOSER而不是ACTION_VIEW?

更重要的是,是否可以通過Intent.type以外的其他方式輕鬆定義所有媒體播放器?我認爲,類型應該是一個正確的MIME類型,在較低的情況下,但我不知道在這種情況下使用什麼......

請溫柔:)

+0

Pinging這看看是否有人有答案(即使是部分答案)... – roryhewitt 2011-02-17 18:19:58

+0

我有一個類似的問題。我使用以下解決方案來獲取應用程序選擇器:http://stackoverflow.com/questions/7635764/application-selection-dialog-based-on-filetype此解決方案還消除了構建自己的對話框的需要。 – kaspermoerch 2011-10-26 11:36:01

回答

8

要獲得可以成功打開給定意圖的應用程序,您將使用PackageManager。簡單地構建如上所述的意圖,然後使用此代碼獲取可以處理意圖的應用程序。

Intent myIntent = new Intent(); 
myIntent.setAction(Intent.ACTION_VIEW); 
myIntent.addCategory("android.intent.category.LAUNCHER"); 
myIntent.setType("mp3");  

PackageManager manager = getPackageManager(); 
List<ResolveInfo> info = manager.queryIntentActivities(
    myIntent, PackageManager.MATCH_DEFAULT_ONLY); 

這會給你所有關於可以處理意圖的程序的信息,包括圖標和包名。然後可以使用這些選項創建一個對話框並保存用戶選擇的選項。

1

我假設你希望看到這個選擇器如果你打開一個文件(或URL)並且註冊了多個應用程序來處理它,那麼這個對話框是對話框嗎?例如。你打開一個YouTube網址並可以選擇使用YouTube播放器或瀏覽器?

就是那種意圖的系統時,我想打開圖像(通過文件瀏覽器)發送:

File f = new File("/sdcard/IMG_0114.JPG"); 
Uri uri = Uri.fromFile(f); 

Intent i = new Intent(Intent.ACTION_VIEW); 
// use setDataAndType() - setData() and setType() cancel each other 
i.setDataAndType(uri, "image/jpeg"); 
i.putExtra("preview", false); 
i.putExtra("key_filename", "/sdcard/IMG_0114.JPG"); 
i.putExtra(Intent.EXTRA_STREAM, uri); 
i.putExtra("sort_order", 0); 

// It's one of the flag combinations: 
i.setFlags(Intent.FLAG_DEBUG_LOG_RESOLUTION); 

i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | 
     Intent.FLAG_ACTIVITY_SINGLE_TOP | 
     Intent.FLAG_ACTIVITY_MULTIPLE_TASK | 
     Intent.FLAG_DEBUG_LOG_RESOLUTION); 

startActivity(i); 

編輯:糾正代碼來獲得一個工作(最小的)解決方案。

我不確定哪些字段的額外數據必須設置 - 沒有找到相關文件。

+0

你是對的,我想看到選擇器對話框。但是,我實際上並不想打開文件(實際上,我實際上並不具有特定的文件) - 我希望能夠返回將用於打開該文件的方法。 – roryhewitt 2011-02-17 21:03:01

相關問題