2014-12-19 33 views
9

我想使用作爲Storage Access Framework的一部分提供的android系統對話框來打開文件。我這樣做與誰向ACTION_OPEN_DOCUMENT顯示更多提供者

Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT); 
intent.addCategory(Intent.CATEGORY_OPENABLE); 
intent.setType("application/pdf"); 
startActivityForResult(intent, EDIT_REQUEST); 

,然後處理返回的URI中onActivityResult()

問題在於,在結果菜單中,我獲得的內容提供商遠遠少於我的預期。只有Google雲端硬盤和下載(請參閱下面的屏幕截圖)。其他人,如Dropbox,Solid Explorer ......都不會顯示。

我懷疑是因爲這些應用程序根本沒有設置必要的意圖過濾器以顯示在此列表中。但是,其他應用程序(例如Kaiten Mail或Chrome)以某種方式設法在系統對話框中顯示完全實現的內容提供程序,然後位於列表頂部,然後其他應用程序(如下面的Dropbox和Solid Explorer)以細分欄(請參閱右側的屏幕截圖)。

我該如何得到這種行爲?

Comparison of the behavior I get (left) and the one I want (right)

+0

見logcat中,當你調用迴天Mail的文件選擇器中顯示的內容。或者,[安裝應用瀏覽器](https://play.google.com/store/apps/details?id=com.japanesecrackers.appbrowser)並查看其他應用在其元素中包含的內容可能會丟失在你的身上。你確定這是「系統對話框」,而不是混合了「ACTION_OPEN_DOCUMENT」和「ACTION_GET_CONTENT」結果的工作嗎? – CommonsWare

+3

通過查看[源代碼](https://code.google.com/p/chromium/codesearch#chromium/src/ui/android/java/src/org/chromium/ui/base/SelectFileDialog.java&q= Intent.CATEGORY_OPENABLE&sq = package:chromium&type = cs)Chrom(ium)曾經實際上可以看到右側的行爲是由一個相對簡單的'Intent.ACTION_GET_CONTENT'產生的。看到存儲訪問框架最初的好主意好像幾乎被所有的應用程序支持得如此糟糕以至於它本質上是無用的...... – cgogolin

+0

我認爲Dropbox必須實現SAF。據我所知,他們不支持它。 – powder366

回答

2

使用「ACTION_GET_CONTENT:

Intent intent = new Intent(Intent. ACTION_GET_CONTENT); 
intent.setType("application/pdf"); 
startActivityForResult(intent, EDIT_REQUEST);