2
我想打開任何使用Intents的任意文件。但是,對於已安裝可打開應用程序的應用程序的文件類型,我得到ActivityNotFoundException。在下面的源代碼中,當file
指向一個PNG文件時,我得到「完成操作使用」對話框。但是,當我試圖打開一個MP3時,我得到了異常。當我打開Astro並點擊相同的mp3文件時,我會看到顯示已安裝MP3播放器的「Complete action using」對話框。如何從我的代碼中獲得相同的對話框?當我從調試器檢查它們時,文件位置,擴展名和MIME類型都看起來正確。正確的意圖打開任意文件類型的操作
String url = file.toURL().toString();
String extension = MimeTypeMap.getFileExtensionFromUrl(url);
String type = typeMap.getMimeTypeFromExtension(extension);
mimeType.setText(type);
boolean fileExists = file.exists();
Intent viewIntent = new Intent(Intent.ACTION_VIEW);
viewIntent.setData(Uri.fromFile(file));
viewIntent.setType(type);
MainActivity.this.startActivity(viewIntent);
答案是Intent.setType
和Intent.setData
是互斥的。呼叫一個清除另一個。所以打電話setDataAndType
是修復。
也許我失去了一些東西,但是這看起來是完全一樣的東西我已經在做。 –
你可以發佈異常日誌嗎? –
你的答案確實有效。不同之處在於你在調用'setData'和'setType'時分別調用'setDataAndType'。事實證明,這兩者是相互排斥的,即主張一方將清除另一方。它就在文檔中,也是:) –