作業中のカスタムランチャーでホーム画面にウィジェットを追加する際に問題が発生します。
AppWidgetManagerを使用して追加するウィジェットのリストを生成することができ、ウィジェットをホーム画面に追加するためのワークフローを開発しました。コードは以下のとおりではありませんが、次のようになります。
AppWidgetHost widget_host = new AppWidgetHost(this, 1);
AppWidgetManager widget_manager = AppWidgetManager.getInstance(this);
int widget_id = widget_host.allocateAppWidgetId();
AppWidgetProviderInfo widget_provider = ... //from an array;
Intent bindIntent = new Intent(AppWidgetManager.ACTION_APPWIDGET_BIND);
bindIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, widget_id);
bindIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_PROVIDER, widget_provider.provider);
startActivityForResult(bindIntent, REQUEST_BIND_APPWIDGET);
if (widget_provider.configure != null) {
Intent intent = new Intent(AppWidgetManager.ACTION_APPWIDGET_CONFIGURE);
intent.setComponent(widget_provider.configure);
intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, widget_id);
startActivityForResult(intent, REQUEST_CREATE_APPWIDGET);
} else {
createWidget(widget_id);
}
次に、必要に応じてウィジェットの構成につながるonActivityResultメソッドがあり、createWidgetメソッドはAppWidgetHostのcreateViewメソッドを使用します。
このワークフローは機能しますが、ACTION_APPWIDGET_BINDインテントはユーザーにアプリをバインドする許可を求めます。これはちょっと面倒です。私の理解では、システムアプリのみがこのアクセス許可を要求でき、アプリの実行中にこのアクセス許可を要求せずにウィジェットをバインドすることはできません。一方、他にも多くのランチャーがあり、それらはすべてウィジェットをシームレスに追加できることを私は知っています。したがって、これには別のアプローチが必要です。
アドバイスをいただければ幸いです。
乾杯