ローカルファイルを指定して他のアプリを起動するためのTips

PDFのオープンを含めて、ローカルファイルを起動するためのTips.

androidでは、特定のファイルを起動するためにmime typeを指定してやる必要があります。

その為、拡張子からmime typeを判別してやらなくてはならない。
そのmime typeを取得するために、「MimeTypeMap」を使用します。

さっきのを少し改変して、

//インテントを生成
Intent intent = new Intent(Intent.ACTION_VIEW);

//開くファイル
String data = "file:///mnt/sdcard/document.pdf";

//拡張子
String extention = MimeTypeMap.getFileExtensionFromUrl(filename);
//mime type
String mimetype =MimeTypeMap.getSingleton().getMimeTypeFromExtension(extention);

//URLとmimetypeを取得
intent.setDataAndType(Uri.parse(data), mimetype);

//別タスクで実行するためのおまじない。
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);

// Start!
context.startActivity(intent);

ここで増えたのが

String extention = MimeTypeMap.getFileExtensionFromUrl(filename);
String mimetype =MimeTypeMap.getSingleton().getMimeTypeFromExtension(extention);

この2行。

MimeTypeMap.getFileExtensionFromUrl(String filename)

で、ファイル名から拡張子を取り出すします。

次に、

String mimetype =MimeTypeMap.getSingleton().getMimeTypeFromExtension(extention);

で、ファイル名から対応するmime-typeを取得します。

なお、リファレンスを見たところ、対応するアプリが入ってない場合にはnullが返るようです。