2015-09-30 34 views
1

我試圖採摘從內部或外部存儲上的文件與下面的代碼:選擇在Android的文件沒有任何文件管理器安裝

Intent intent = new Intent(Intent.ACTION_GET_CONTENT); 
intent.setType("file/*"); 
startActivityForResult(intent, 1); 

當然它有onActivityResult方法,這是沒問題的。它適用於安裝了文件管理器的現代手機或手機。但舊的,沒有文件管理器拋出

android.content.ActivityNotFoundException:無活動處理意向{行動= android.intent.action.GET_CONTENT典型值=文件/ *}

我嘗試切換到ACTION_PICK,但沒有運氣。我也嘗試intent.setType("*/*");,它沒有崩潰,但彈出窗口要求採取行動(視頻,聯繫人......),這是不正確的。我只想選擇任何文件而不只是指定的類型。

我不想使用任何其他文件管理器來挑選文件。無論如何,我可以通過這個?

回答

0

下面的代碼部分應該適合你!

Intent chooseFile = new Intent(Intent.ACTION_GET_CONTENT); 
chooseFile.setType("*/*"); 
Intent intent = Intent.createChooser(chooseFile, "Choose a file"); 
startActivityForResult(intent, ACTIVITY_CHOOSE_FILE); 

什麼是您的Android版本?有些android可能沒有發佈這樣的活動。

+0

對不起,忘了提及Android版本。它是4.0! –

+0

如果'*/*',它要求「音樂曲目」,「聯繫人」和「圖庫」。儘管如此,不能選擇一個文件。順便說一句,我使用模擬器。 –

1

我相信有錯誤解釋,使解決方案更容易。所以讓我給你解釋一下:

你開始一個隱含的意圖。這意味着你知道你想要發生什麼(使用選擇一個文件)並且你不關心哪個應用程序會這樣做。

您遇到的錯誤僅僅是系統告訴您(開發人員),沒有安裝的應用程序能夠執行此操作(無論是系統還是第三方)。根本沒有人能夠處理你想要的行動。

所以,你必須從我可以看到兩個選項:

  • try-catch錯誤

try { 
    startActivityForResult(intent, 1); 
} catch (ActivityNotFoundException e) { 
    // maybe you should show a toast to the user here? 
    Toast.makeText(context, "You need to install a file picker", Toast.LENGTH_SHORT).show(); 
    // or maybe redirect to a 3rd party app that you know works 
    startIntent(new Intent(Uri.parse("https://play.google.com/... some app 
} 
+0

感謝您的建議。看起來我不得不要求用戶安裝第三個應用程序 –

相關問題