トップAndroid Java > 他のアプリを起動する

他のアプリを起動する

はじめに

具体的には、地図アプリにおいて、地図上のマーカーをタップしたとき、 マーカーに関連付けられた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は日本語に対応するため

リファレンス

[1] 他のアプリと連携する
[2] 【Androidアプリ開発】Intentとは、Intentの使い方とは。
[3] Android 11のPackage visibilityへの対応
[4] Chromeで外部SD上のファイルに直接アクセスできない問題 on Android