Androidのライブ壁紙に触れたときにダイアログを開く
-
30-09-2019 - |
質問
ライブの壁紙がタップされたときに、簡単な情報を含むダイアログボックスを開きたいと思います。 Androidライブの壁紙にOncommandをオーバーライドし、Androidドキュメントからほぼまっすぐにカスタムダイアログを追加します(レイアウトinfo_dialog.xmlが表示されていません):
@Override
public Bundle onCommand (String action, int x, int y, int z, Bundle extras, boolean resultRequested)
{
System.out.println(action);
Context mContext = getApplicationContext();
Dialog dialog = new Dialog(mContext);
dialog.setContentView(R.layout.info_dialog);
dialog.setTitle("Custom Dialog");
TextView text = (TextView) dialog.findViewById(R.id.text);
text.setText("Hello, this is a custom dialog!");
dialog.show();
return null
}
例外を生成するだけです:
12-02 07:14:40.880: ERROR/AndroidRuntime(295): android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application 12-02 07:14:40.880: ERROR/AndroidRuntime(295): at android.view.ViewRoot.setView(ViewRoot.java:509) 12-02 07:14:40.880: ERROR/AndroidRuntime(295): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:177) 12-02 07:14:40.880: ERROR/AndroidRuntime(295): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:91) 12-02 07:14:40.880: ERROR/AndroidRuntime(295): at android.app.Dialog.show(Dialog.java:241)
これは、アクティビティからではなく、WallPaperServiceからダイアログを上げようとしているからだと思います。 WallPaperService.EngineのOntouchEventメソッドをオーバーライドすると、同じ結果が得られます。
これは、ダイアログをホストするために別のアクティビティをスピンアップする必要があることを意味しますか?それとも、ライブの壁紙からのダイアログをトリガーすることは不可能ですか?
解決
これは、ダイアログをホストするために別のアクティビティをスピンアップする必要があることを意味しますか?
はい。または、さらに良いことに、ダイアログをテーマにしたアクティビティを使用します。
個人的には、ライブの壁紙全体でこれを行うことを期待している場合、アクティビティ/ダイアログがポップアップし続けるとユーザーがイライラすると思われるため、市場で1つの星の評価がたくさんあると思います。彼らはホーム画面を誤ってタップします。
所属していません StackOverflow