ユーザーがアプリ ウィジェットを設定できるようにする

アプリ ウィジェットを構成できる。たとえば時計ウィジェットでは 表示するタイムゾーンを設定します。

ユーザーにウィジェットの設定を許可したい場合は、ウィジェットを作成します 設定 Activity。このアクティビティは、 ウィジェットの作成時にアプリ ウィジェット ホストによって自動的に起動される またはそれ以降の環境を使用することもできます。使用する構成オプションによっては、 指定します。

構成アクティビティを宣言する

Android マニフェストで構成アクティビティを通常のアクティビティとして宣言する 表示されます。アプリ ウィジェット ホストは、 ACTION_APPWIDGET_CONFIGURE アクティビティは、このインテントを受け入れる必要があります。例:

<activity android:name=".ExampleAppWidgetConfigurationActivity">
    <intent-filter>
        <action android:name="android.appwidget.action.APPWIDGET_CONFIGURE"/>
    </intent-filter>
</activity>

AppWidgetProviderInfo.xml ファイルで、 android:configure 属性。詳細情報: このファイルを宣言します。これが 次のように設定アクティビティを宣言する方法を示します。

<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
    ...
    android:configure="com.example.android.ExampleAppWidgetConfigurationActivity"
    ... >
</appwidget-provider>

アクティビティは完全修飾名前空間を使用して宣言されています。これは、ランチャーに パッケージ スコープの外部から参照します。

これだけで構成アクティビティを開始できます。次に、次の操作をします。 実際のアクティビティを実装します

構成アクティビティを実装する

アクティビティを実装する際は、次の 2 つの重要な点に注意してください。

  • アプリ ウィジェットのホストが設定アクティビティを呼び出し、 アクティビティは常に結果を返す必要があります。結果にアプリ ウィジェットが含まれている必要があります アクティビティを起動したインテントによって渡される ID(インテントに保存される) 特典として EXTRA_APPWIDGET_ID
  • システムは ACTION_APPWIDGET_UPDATE ブロードキャストされます。つまり、構成アクティビティが ウィジェットの作成時に onUpdate() メソッドを呼び出します。 更新のリクエストは構成アクティビティの責任 ウィジェットの初回作成時は AppWidgetManagerただし、 その後の更新では onUpdate() が呼び出されます。スキップされるのは、 おすすめします。

レスポンスを返す方法の例については、次のセクションのコード スニペットをご覧ください。 更新し、ウィジェットを更新します。

構成アクティビティからウィジェットを更新する

ウィジェットが構成アクティビティを使用する場合、そのウィジェットは 構成完了後にウィジェットを更新するアクティビティです。そうすれば、 Google Cloud コンソールから AppWidgetManager

以下に、ウィジェットを適切に更新して 設定アクティビティを記録します。

  1. アクティビティを起動したインテントからアプリ ウィジェット ID を取得します。

    Kotlin

    val appWidgetId = intent?.extras?.getInt(
            AppWidgetManager.EXTRA_APPWIDGET_ID,
            AppWidgetManager.INVALID_APPWIDGET_ID
    ) ?: AppWidgetManager.INVALID_APPWIDGET_ID
    

    Java

    Intent intent = getIntent();
    Bundle extras = intent.getExtras();
    int appWidgetId = AppWidgetManager.INVALID_APPWIDGET_ID;
    if (extras != null) {
        appWidgetId = extras.getInt(
                AppWidgetManager.EXTRA_APPWIDGET_ID,
                AppWidgetManager.INVALID_APPWIDGET_ID);
    }
    
  2. アクティビティの結果を RESULT_CANCELED に設定します。

    これにより、ユーザーがアクティビティの最後に到達する前に戻ってきた場合でも、 システムがアプリ ウィジェット ホストに構成がキャンセルされたことを通知し、 ホストはウィジェットを追加しません。

    Kotlin

    val resultValue = Intent().putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId)
    setResult(Activity.RESULT_CANCELED, resultValue)
    

    Java

    int resultValue = new Intent().putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId);
    setResult(Activity.RESULT_CANCELED, resultValue);
    
  3. ユーザーの好みに応じてウィジェットを設定します。

  4. 設定が完了したら、Cloud Storage バケットの getInstance(Context) を呼び出して AppWidgetManager します。

    Kotlin

    val appWidgetManager = AppWidgetManager.getInstance(context)
    

    Java

    AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);
    
  5. ウィジェットを RemoteViews レイアウトを呼び出すには、 updateAppWidget(int,RemoteViews):

    Kotlin

    val views = RemoteViews(context.packageName, R.layout.example_appwidget)
    appWidgetManager.updateAppWidget(appWidgetId, views)
    

    Java

    RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.example_appwidget);
    appWidgetManager.updateAppWidget(appWidgetId, views);
    
  6. リターン インテントを作成し、アクティビティの結果で設定する。 アクティビティを終了します。

    Kotlin

    val resultValue = Intent().putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId)
    setResult(Activity.RESULT_OK, resultValue)
    finish()
    

    Java

    Intent resultValue = new Intent().putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId);
    setResult(RESULT_OK, resultValue);
    finish();
    

詳しくは、 ListWidgetConfigureActivity.kt サンプルクラスをご覧ください。

ウィジェットの設定オプション

デフォルトでは、アプリ ウィジェット ホストは構成アクティビティを 1 回だけ起動します。 ユーザーがウィジェットをホーム画面に追加した直後。ただし、 ユーザーが既存のウィジェットを再構成したり、 デフォルトのウィジェット構成を指定することで、ウィジェットの初期構成をスキップできます。

配置したウィジェットをユーザーが再設定できるようにする

ユーザーが既存のウィジェットを再構成できるようにするには、 reconfigurable [ widgetFeatures appwidget-provider の属性です。詳しくは、 AppWidgetProviderInfo.xml ファイルをご覧ください。 情報です。例:

<appwidget-provider
    android:configure="com.myapp.ExampleAppWidgetConfigurationActivity"
    android:widgetFeatures="reconfigurable">
</appwidget-provider>

ウィジェットは [ウィジェットを押したまま [再構成] ボタン。 図 1 の 1

右下にボタンを表示
図 1. ウィジェットの [再構成] ボタン
で確認できます。

ウィジェットのデフォルト設定を使用する

ユーザーが 行います。そのためには、 configuration_optional widgetFeatures フィールドの reconfigurable フラグ。これにより、ユーザーがウィジェットを追加した後の設定アクティビティの起動が省略されます前述のとおり ユーザーは、引き続きウィジェットを再構成できます。 できます。たとえば、時計ウィジェットは初期設定をバイパスして、 デバイスのタイムゾーンをデフォルトで表示します。

次に、構成アクティビティを両方としてマークする方法の例を示します。 再構成可能(オプション):

<appwidget-provider
    android:configure="com.myapp.ExampleAppWidgetConfigurationActivity"
    android:widgetFeatures="reconfigurable|configuration_optional">
</appwidget-provider>