具体的には、地図アプリにおいて、地図上のマーカーをタップしたとき、 マーカーに関連付けられたHTMLファイル、PDFファイル、画像ファイルなどを該当アプリで表示したい。
例えば、ファイルマネジャーではこのことが適切に行われる。これに類することを地図アプリで実現したい。
以下のプログラムで対応できるファイルもあるが、全般的には不十分である。
Information info = Information.getTappedInformation(lon, lat); if (info != null) { String url = "content://" + Map.DIR + "infos/" + Uri.encode(info.path); // encodeは日本語に対応するため System.out.printf("%s\n", url); Intent intent = new Intent(Intent.ACTION_VIEW); String extention = MimeTypeMap.getFileExtensionFromUrl(url); String mimetype = MimeTypeMap.getSingleton().getMimeTypeFromExtension(extention); // 拡張子からMIMEタイプを得る intent.setDataAndType(Uri.parse(url), mimetype); try { context.startActivity(intent); // MIMEタイプに該当するアプリを起動する } catch (Exception ex) { ex.printStackTrace(); } }
content を file に変える(戻す)と、画像ファイルは正常に表示されたが、pdf、mht が実機で表示されない。 エミュレータ(LDPlayer)では画像, pdf, mht が表示される。バージョンの違いか(エミュレータは Android 9、スマホは Android 12) 、設定などの違いか不明。
String url = "file://" + Map.DIR + "infos/" + Uri.encode(info.path); // encodeは日本語に対応するため