0

当点击动态壁纸时,我想打开一个包含一些简单信息的对话框。在 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 来托管对话框?或者不可能从动态壁纸触发对话?

4

1 回答 1

1

这是否意味着我需要启动一个单独的 Activity 来托管对话框?

是的。或者,更好的是,使用以对话为主题的活动。

就个人而言,如果您希望为整个动态壁纸执行此操作,我希望您会在市场上获得一大堆一星评级,因为我怀疑当您的活动/对话框不断弹出时用户会因为他们误按了主屏幕。

于 2010-12-02T19:57:52.007 回答