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では無いので、ダイアログの親にはなれないということですね。
ということで、どうしてもダイアログの設定画面にしたい場合は、
- PendingIntentでActivityを起動
- 起動されるActivityには、マニフェストでandroid:theme="@android:style/Theme.Translucent.NoTitleBar" を指定しておく
- Activityの起動直後に、ダイアログを出力する
という手順が必要そうです。
透明にしてダイアログを出せば、終了処理を間違えない限り、まあバレないですよね。
startActivityForResultの代わりとしては、ブロードキャストインテントを使います。
Intent intent = new Intent("jp.bpsinc.android.example.ACTION_NOTIFY"); sendBroadcast(intent);