ショートカットを管理する

作成したショートカットは、使用期間全体で管理することが必要になる可能性があります。 説明します。たとえば、アプリをどのように最適化するかを決定し、 ショートカットで特定の操作を行うことがよくあります別のケースでは 固定ショートカットを無効にして、アプリが 古いアクションや不足しているアクションを実行します参照されているショートカット 使用状況を追跡して、使用状況を ショートカットのランク付けです

このページでは、これらを含む一般的な管理方法と、 あります。

ショートカットの動作

以下のセクションでは、ショートカットの動作、 (表示回数、表示順序、ランクなど)です。

ショートカットの表示

静的ショートカットと動的ショートカットが、サポートされているランチャーまたは動的ショートカットに表示される ユーザーが特定のジェスチャーや音声コマンドを実行したときに、アシスタントが自動的に起動します。オン ランチャーがあります。ジェスチャーはタッチ操作で、アプリのランチャーアイコンを長押しします 他のランチャー アプリでは、ジェスチャーが異なる場合があります。Google アシスタント。ショートカットはアシスタント内に表示することも、ユーザーが起動することもできます。 音声コマンドを使用します。

LauncherApps クラスは、ランチャー アプリにアクセスするための API を提供します。 あります。

固定ショートカットはランチャー自体に表示されるため、常に表示されます。 固定ショートカットは、次の場合にのみランチャーから削除されます。

  • ユーザーが削除した。
  • ショートカットに関連付けられているアプリがアンインストールされた。
  • ユーザーが [設定] > [アプリと通知 アプリを選択し、[ストレージ] >ストレージを消去します

ターゲットを共有する は動的ショートカットのサブセットであり、 Android 共有シート。

Android Sharesheet のスクリーンショット
図 1. Android Sharesheet。直接共有ターゲットが 1 行目に表示され、その後にランキング アプリ、アプリ リストの順に表示されます。

ショートカットの表示順序

ランチャーにアプリのショートカットを表示する場合、次のように表示する必要があります。 order:

  1. 静的ショートカット: isDeclaredInManifest() メソッドを持つショートカット は true を返します。
  2. 動的ショートカット: ShortcutInfo.isDynamic() のショートカット メソッドは true を返します。

ショートカットの種類(静的および動的)ごとに、ショートカットは以下の順に並べ替えられます。 ShortcutInfo.getRank に従ってランクを上げる。Google アシスタント 表示するコンテキスト ショートカットを決定する際に、ショートカットのランクも考慮 できます。

ランクは、負ではない連続した整数です。静的ショートカットのランク付けは shortcuts.xml ファイル内での出現順に、先頭から最下位の順に並べます。動的画像 呼び出しを行うときに、既存のショートカットのランクを更新できます。 updateShortcuts(Context, List) addDynamicShortcuts(Context, List), pushDynamicShortcut(Context, ShortcutInfoCompat)、または setDynamicShortcuts(Context, List)

共有ターゲットの順序は、過去のユーザーを含むさまざまな要因に基づきます 履歴、新しさ、頻度 ランクのヒント タスクに関連付けられた会話に設定された優先度など、 共有ショートカットが開きます。次を使用して作成されたターゲットを共有する 共有ショートカット API 共有ターゲットよりも優先される ChooserTargetService Android 11 でサポートが終了しましたAndroid 12 以降の共有ターゲットの場合 生成されたファイルは、ChooserTargetService 共有シートを開きます

ほとんどのランチャーは、最大 4 つのショートカットを表示します。任意の組み合わせ 静的ショートカットと動的ショートカットが定義されている場合、 最大 2 つの静的ショートカットと 2 つの動的ショートカット。たとえば 4 つの静的ショートカットを定義し、プログラムで 3 つの動的ショートカットを ランチャーには最初の 2 つの静的ショートカットが表示され 動的ショートカットの上位にランキングされます。

複数のインテントとアクティビティを管理する

ユーザーが API を有効化したときにアプリで複数の処理を実行したい場合は、 連続したアクティビティをトリガーするよう設定できます。Google Chat では そのためには、複数のインテントを割り当て、1 つのアクティビティを ショートカットの種類に応じてインテント フラグを設定したりできます。

複数のインテントを割り当てる

ShortcutInfoCompat.Builder でショートカットを作成する場合は、 setIntent() の代わりに setIntents() を使用します。setIntents() を呼び出すと、 ユーザーがショートカットを選択したときに、アプリ内で複数のアクティビティを起動できます。 最後のアクティビティをバックスタックのリストに配置する。もし ユーザーがデバイスの [戻る] ボタンをタップすると、アプリの別のアクティビティが表示される デバイスのランチャーに戻る代わりに、

アクティビティから別のアクティビティを開始する

静的ショートカットにはカスタム インテント フラグを設定できません。静的オブジェクトの第 1 のインテントは、 ショートカットには常に Intent.FLAG_ACTIVITY_NEW_TASKIntent.FLAG_ACTIVITY_CLEAR_TASK 設定。つまり アプリが 静的アクティビティが発生すると、アプリ内の既存のアクティビティはすべて破棄されます。 ショートカットが起動しますこの動作が望ましくない場合は、トランポリン アクティビティ - 別のアクティビティを開始する目に見えないアクティビティです。 Activity.onCreate(Bundle)Activity.finish() を呼び出す場合:

  1. AndroidManifest.xml ファイルに属性の割り当てを含めます。 android:taskAffinity= インチトランポリンです
  2. ショートカットのリソース ファイルでは、 静的ショートカット内で指定できます。

トランポリン アクティビティの詳細については、1 つのアクティビティを開始する 取得します

インテント フラグを設定する

動的ショートカットを公開するには、任意の Intent フラグのセットを使用します。 可能であれば、他の環境変数とともに Intent.FLAG_ACTIVITY_CLEAR_TASK を指定します。 使用できます。そうしないと、アプリが実行中に別のタスクを開始しようとすると、 ターゲット アクティビティが表示されない場合があります。

タスクとインテント フラグの詳細については、タスクとバックスタックをご覧ください。

ショートカットを更新する

各アプリのランチャー アイコンには、静的または動的なアイコンを 関数によって返された値と等しい複合ショートカットを getMaxShortcutCountPerActivity。使用できる数に制限はありません。 アプリが作成できる固定ショートカットです

動的ショートカットが固定されている場合。パブリッシャーがショートカットを 動的ショートカットでは、固定されたショートカットは引き続き表示され、起動可能です。これにより、 アプリに getMaxShortcutCountPerActivity() 個を超えるショートカットがあります。

次の例について考えてみましょう。この例では、 getMaxShortcutCountPerActivity()4 です。

  1. あるチャットアプリが公開している 4 つの動的ショートカットは、 最近の会話: c1、c2、c3、c4。
  2. ユーザーが 4 つのショートカットをすべて固定します。
  3. その後、ユーザーはさらに 3 つの会話(c5、c6、c7)を開始します。「 パブリッシャー アプリが動的ショートカットを再公開します。新しい動的ショートカット c4、c5、c6、c7 です。

4 個を超えるものは表示できないため、c1、c2、c3 を削除する必要があります 動的ショートカットの作成に使用できますただし、c1、c2、c3 は固定ショートカットであり、 起動できます。

これにより、ユーザーは合計 7 つのショートカットにアクセス可能で、 パブリッシャーアプリ。これは、合計数に最大数の値が含まれるためです。 3 つの固定ショートカットを確認できます

  1. アプリは updateShortcuts(Context, List) を使用して、 追加することもできますたとえば、この一連のショートカットを更新して、 チャットが他の参加者のアイコンが変化します。
  2. addDynamicShortcuts(Context, List) と 既存のショートカットを更新する setDynamicShortcuts(Context, List) メソッド 作成します。ただし、動的でない画像、音声、動画などの この 2 つの方法は、固定されたショートカットのリストを 動的ショートカットへのショートカットを 追加しました

プッシュして表示できるショートカットの数に制限はありません。 Google アシスタントなどのアシスタント アプリもサポートしています。pushDynamicShortcut() を使用する ShortcutManagerCompat Jetpack ライブラリのメソッドを使用して、 アシスタント アプリで使用するショートカット。また、Google ショートカットの統合を追加し、 ライブラリをアプリに追加して、ダイナミック リンクを Google に表示できるようにします アシスタント。

ショートカットの更新など、アプリのショートカットに関するガイドラインについて詳しくは、 ショートカットに関するおすすめの方法をご確認ください。

システム ロケールの変更を処理する

動的ショートカットと固定ショートカットは、 システムの変更を示す Intent.ACTION_LOCALE_CHANGED ブロードキャスト あります。

ショートカットの使用状況をトラッキングする

静的ショートカットと動的ショートカットが表示される状況を特定するには、 ランチャーはショートカットの有効化履歴を調べます。静的ショートカットの場合 アプリ内でユーザーが特定の操作を完了したタイミングを reportShortcutUsed() メソッドを呼び出し、 ショートカットは、次のいずれかのイベントが発生したときに行われます。

  • ユーザーが特定の ID のショートカットを選択した。
  • ユーザーがアプリ内で、 同じショートカットを使用できます。

アプリは、 pushDynamicShortcut() メソッドを使用し、ショートカットの ID が渡されると、 イベントが発生します。この方法で動的ショートカットの使用をプッシュすると、 Google アシスタントなどのアシスタント アプリが、関連するショートカットをユーザーに提案します。 pushDynamicShortcut() メソッドは、呼び出されたときに使用状況を報告するため、 同じショートカットで reportShortcutUsed() メソッドを使用できます。

会話関連のショートカットについては、送信の使用状況を追跡することが重要です。 受信メッセージを確認できます。詳しくは、ユーザーとリソースに関するベスト プラクティスを 使用できます。

ショートカットを無効にする

アプリとそのユーザーはショートカットをデバイスのランチャーに固定できるため、 アプリ内のアクションに ユーザーを直接誘導できる可能性 古いバージョンや 存在しなくなったバージョンを確認できますこの状況に対処するには 通話によって選択されないようにするショートカットを無効にする disableShortcuts - 指定したショートカットを静的インスタンスから削除します。 動的ショートカットのリストを作成し、これらのショートカットの固定コピーを無効にします。マイページ また、このメソッドのオーバーロード バージョンを使用でき、 カスタム エラー メッセージとして CharSequence。すると、そのエラー メッセージが表示されます。 ユーザーが無効なショートカットを起動しようとしたとき。

レート制限

setDynamicShortcuts(), addDynamicShortcuts() を使用する場合 updateShortcuts() のメソッドのみ呼び出し可能なメソッドは、 バックグラウンド アプリ(アクティビティのないアプリ、または フォアグラウンド サービスにします。動画アセットを使用できる回数の上限は レート制限と呼ばれます。この機能によって ShortcutManagerCompat: デバイス リソースの過剰消費。

レート制限が有効な場合、isRateLimitingActive() は true を返します。 ただし、特定のイベントではレート制限がリセットされるため、バックグラウンド アプリでも 再びレート制限に達するまで、ShortcutManager メソッドを呼び出すことができます。これらの イベントには次のようなものがあります。

  • アプリがフォアグラウンドに復帰した。
  • システム ロケールが変更された。
  • ユーザーが通知に対してインライン返信アクションを実行した。

開発中またはテスト中にレート制限が発生した場合は、 開発者向けオプション >デバイスから ShortcutManager のレート制限をリセットする settings を参照するか、adb で次のコマンドを入力します。

$ adb shell cmd shortcut reset-throttling [ --user your-user-id ]

バックアップと復元

ユーザーが次の場合にアプリのバックアップと復元を行えるよう設定できます。 android:allowBackup="true を追加してデバイスを変更する属性 必要があります。バックアップと復元をサポートする場合は、 アプリのショートカットについては、次の点に注意してください。

  • 静的ショートカットは自動的に再公開されるが、ユーザーが操作した後にのみ再公開される 新しいデバイスにアプリを再インストールしたとき。
  • 動的ショートカットはバックアップされていないため、再公開するロジックをアプリに組み込んでください 新しいデバイスでアプリを開いたときに アプリアイコンを表示したりできます
  • 固定ショートカットはデバイスのランチャーに自動的に復元されますが、 固定されたショートカットに関連付けられたアイコンはバックアップされません。したがって、 [固定されたショートカット]を簡単に復元できるように 新しいデバイスを作成します。

次のコード スニペットは、アプリの動的状態を復元する最適な方法を示しています。 ショートカットと、アプリの固定ショートカットが保持されたかどうかを確認する方法:

Kotlin

class MyMainActivity : Activity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        if (ShortcutManagerCompat.dynamicShortcuts.size == 0) {
            // Application restored. Re-publish dynamic shortcuts.
            if (ShortcutManagerCompat.pinnedShortcuts.size > 0) {
                // Pinned shortcuts are restored. Use updateShortcuts() to make
                // sure they contain up-to-date information.
            }

        }
    }
    // ...
}

Java

public class MainActivity extends Activity {
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        if (ShortcutManagerCompat.getDynamicShortcuts().size() == 0) {
            // Application restored. Re-publish dynamic shortcuts.
            if (ShortcutManagerCompat.getPinnedShortcuts().size() > 0) {
                // Pinned shortcuts are restored. Use pdateShortcuts() to make
                // sure they contain up-to-date information.
            }
        }
    }
    // ...
}