2013-07-24 53 views
3

我想以編程方式啓動默認文件資源管理器來顯示文件夾的內容。在Android中使用默認瀏覽器查看文件夾內容

我使用這個代碼,但它崩潰:

Uri startDir = Uri.fromFile(new File("/sdcard/DCIM/Camera")); 
    Intent intent = new Intent(); 
    intent.setAction(Intent.ACTION_VIEW); 
    intent.setData(startDir); 
    startActivity(intent); 

logcat中顯示「沒有找到活動來處理這個意圖」 ......

怎樣做是對我最好的選擇嗎?我希望用戶看到文件夾的內容並能夠點擊文件(例如,點擊視頻並使用默認播放器啓動它,點擊PDF並打開它等)。

回答

7

不幸的是,似乎沒有標準的方法來做到這一點,我之前正在尋找完全相同的東西,並找不到任何解決方案。它有2種可能爲你工作的替代方法:

1)使用一般的意圖,並讓用戶選擇他/她的文件管理器 這是安全和容易的,但有點遠,從我們真正想要的

請勿使用intent.setType("file/*");,它不是標準的MIME類型。

2)使用着名文件管理器提供的特定意圖衆所周知的文件管理器有它們自己的定製意圖過濾器,它們接受允許簡單瀏覽的目錄路徑。其中一些在這裏:OI file manager, ES Explorer

也許你可以檢查用戶是否安裝了這些特定的文件管理器,然後使用此解決方案,否則回退到一般意圖。

現在,這些是您擁有的唯一兩個選項。如果我找到更好的解決方案,我會更新這篇文章。

+0

感謝您的想法。你能解釋一下這個指令究竟做什麼:'intent.setType(「*/*」);' - 就我所見,它是你的代碼和我的代碼之間的唯一區別(除了更安全的目錄路徑)和我以前從未使用過這個意圖領域。 –

+0

@BogdanAlexandru這是爲了確保安裝在設備上的每個可能的文件管理器都會顯示在「Complete action with ..」中,'「*/*」是最常用的MIME類型,所以任何文件管理器都可以那。有些人使用'intent.setType(「file/*」);'但這是一個非標準的MIME,可能導致程序崩潰。 唯一令人討厭的是'setType(「*/*」)'也會顯示其他程序,例如相機,畫廊和其他程序。 – Nima

+0

我可以確認使用'setType(「file/*」)'崩潰我的平板電腦'android.content.ActivityNotFoundException:沒有發現活動處理意圖{動作= android.intent.action.VIEW typ =文件/ *} –

1

雖然我不能得到OI文件管理器去一個特定的目錄,下面直接打開了OI文件管理器並進入到最後一個目錄是英寸

Intent importFileIntent = new Intent(); 
importFileIntent.setType("file/*"); 

// Does nothing. 
// Uri startingDir = Uri.fromFile(new File( 
//  Environment.getExternalStorageDirectory().getAbsolutePath() + "/DCIM/Camera")); 
// importFileIntent.setData(startingDirectory); 

importFileIntent.setAction(Intent.ACTION_GET_CONTENT); 

// Ensure that there's an activity to handle the intent. 
if (importFileIntent.resolveActivity(getPackageManager()) == null) return; 

startActivityForResult(importFileIntent, REQUEST_FILE_IMPORT); 

如果有人有進一步成功,我很樂意聽到它。

+1

你的代碼工作正常。但它也顯示谷歌驅動器選擇一個文件。當我從谷歌驅動器中選擇一個文件時,它將返回null。有沒有解決方案來隱藏谷歌驅動器選項或獲取谷歌驅動器的文件路徑。 –

相關問題