インテントを使用して任意のファイルを開こうとしています。ただし、それらを開くことができるアプリがインストールされているファイルタイプのActivityNotFoundExceptionが発生します。以下のソースではfile
、PNGファイルを指すと、[アクションの完了]ダイアログが表示されます。ただし、mp3を開こうとすると、例外が発生します。Astroを開いて同じmp3ファイルをクリックすると、インストールされているMP3プレーヤーを示す[使用してアクションを完了する]ダイアログが表示されます。コードから同じダイアログを表示するにはどうすればよいですか?ファイルの場所、拡張子、および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
が修正されます。