Tech Racho エンジニアの「?」を「!」に。
  • 開発

AppWidgetからダイアログを起動

Androidのウィジェットでも、設定画面が欲しいことは多々あります。

マニフェストに直接書くと、設置時に毎回出てきて鬱陶しいので、タッチしたら設定画面、などとやるのが普通だと思います。

簡単な設定はダイアログで済ませたり、startActivityForResult をやりたくなりますが、AppWidgetからこれらはできません。

例:AppWidgetProviderからAlertDialogを起動した場合

ERROR/AndroidRuntime(1840): Caused by: android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application

AppWidgetは通常の表示状態のActivityでは無いので、ダイアログの親にはなれないということですね。

ということで、どうしてもダイアログの設定画面にしたい場合は、

  1. PendingIntentでActivityを起動
  2. 起動されるActivityには、マニフェストでandroid:theme="@android:style/Theme.Translucent.NoTitleBar" を指定しておく
  3. Activityの起動直後に、ダイアログを出力する

という手順が必要そうです。

透明にしてダイアログを出せば、終了処理を間違えない限り、まあバレないですよね。

startActivityForResultの代わりとしては、ブロードキャストインテントを使います。

Intent intent = new Intent("jp.bpsinc.android.example.ACTION_NOTIFY");
sendBroadcast(intent);

CONTACT

TechRachoでは、パートナーシップをご検討いただける方からの
ご連絡をお待ちしております。ぜひお気軽にご意見・ご相談ください。