アプリ内でスナップショット ウィジェットを固定する

Android 8.0(API レベル 26)以降では、アプリ内でウィジェットをユーザーのホーム画面に固定できます。アプリ内でウィジェットを直接宣伝することは、ユーザーが関連タスクを完了した後や、アプリの機能を繰り返し使用している場合に、ユーザー エンゲージメントを高める効果的な方法です。

固定リクエストを作成する

ウィジェットの固定を開始するには、requestPinGlanceAppWidget メソッド を GlanceAppWidgetManager クラスから使用します。Android 8.0 以前のバージョンで実行されているアプリの場合、このメソッドは false を返します。ただし、リクエストがシステムに正常に送信された場合は、true を返します。

固定リクエストを作成する方法の例を次に示します。

@Composable
fun AnInAppComposable() {
    val context = LocalContext.current
    val coroutineScope = rememberCoroutineScope()
    Button(
        onClick = {
            coroutineScope.launch {
                GlanceAppWidgetManager(context).requestPinGlanceAppWidget(
                    receiver = MyWidgetReceiver::class.java,
                    preview = MyWidget(),
                    previewState = DpSize(245.dp, 115.dp)
                )
            }
        }
    ) {}
}

この例では、MyWidgetReceiver はウィジェットの コールバックを受け取るクラスで、MyWidget は固定する Glance ウィジェットです。successCallback は、ウィジェットが正常に固定されたときにトリガーされる PendingIntent です。

固定リクエストのレスポンスを処理する

ユーザーが固定リクエスト ダイアログに応答すると、アプリはレスポンスを受け取ります。ユーザーがリクエストを承諾すると、ウィジェットがホーム画面に固定され、successCallback PendingIntent がトリガーされます。ユーザーがリクエストを拒否した場合、何も起こりません。

successCallback は、ウィジェットがホーム画面に正常に追加された場合にのみトリガーされます。ユーザーがリクエストを拒否した場合や、ランチャーが固定をサポートしていない場合はトリガーされません。