「共有した URL を別のアプリで開く」2.0 をリリースしました

play.google.com

どういうアプリかというと EXTRA_TEXTURI に入ったインテントACTION_SEND でやってくると ACTION_VIEWインテントを投げ直すアプリです。

地味に50万超インストールされて、なぜかブラジルでよく使われているようです。

バージョン 2.0 は実に6年ぶりのアップデートでした。

今回の変更点は下記の通りです。

  • minSdkVersion: 9 → 17
    • Android 2.3 ~ 4.1 がサポート対象外に
  • targetSdkVersion: 21 → 29
  • Intent.createChooser() を使わず自前表示
    • 詳細は後述
  • ローンチャー(ホーム)にアプリアイコンを追加
    • 起動のしかたが分からない人がいて、低評価されるので
    • オプションで非表示にできる

「デフォルトのアプリ」や「アプリリンク」

Android のいつのバージョンからか「デフォルトのアプリ」という機能が増えています。設定アプリで〔アプリと通知〕→〔デフォルトのアプリ〕にあります。

f:id:kakkun61:20200923154958p:plain

これでブラウザアプリとして Chrome などを指定していると Intent.createChooser() でも PackageManager.queryIntentActivities() でもそれしか出てきません。

アプリリンクの場合も同じでアプリリンク用のアプリだけが選択肢に出てきます。

これを回避してインテントを受け取れるアプリ全てを取得する方法をご存じなら教えてほしいです。

Intent.createChooser() から PackageManager.queryIntentActivities() に変えれば取得できるかと思って変えたのですが同じでした。ただ選択肢が1つのときに Intent.createChooser() ならそのままアクティビティーが起動してしまうので、自前表示して選択肢を表示したかったので PackageManager.queryIntentActivities() に変えました。

今の実装の該当コードはこの辺りです。

        PackageManager pm = getPackageManager();
        Intent urlIntent = new Intent(Intent.ACTION_VIEW, uri);
        List<ResolveInfo> resolveInfos = pm.queryIntentActivities(urlIntent, 0);

英語に問題なければこちらに回答いただければ嬉しいです。

stackoverflow.com