当点击动态壁纸时,我想打开一个包含一些简单信息的对话框。在 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: 错误/AndroidRuntime(295): android.view.WindowManager$BadTokenException: 无法添加窗口 -- 令牌 null 不适用于应用程序 12-02 07:14:40.880: 错误/AndroidRuntime(295): 在 android.view.ViewRoot.setView(ViewRoot.java:509) 12-02 07:14:40.880: 错误/AndroidRuntime(295): 在 android.view.WindowManagerImpl.addView(WindowManagerImpl.java:177) 12-02 07:14:40.880: 错误/AndroidRuntime(295): 在 android.view.WindowManagerImpl.addView(WindowManagerImpl.java:91) 12-02 07:14:40.880: 错误/AndroidRuntime(295): 在 android.app.Dialog.show(Dialog.java:241)
我假设这是因为我试图从 WallpaperService 而不是从 Activity 引发对话框。覆盖 WallpaperService.Engine 的 onTouchEvent 方法只会得到相同的结果。
这是否意味着我需要启动一个单独的 Activity 来托管对话框?或者不可能从动态壁纸触发对话?