触摸Android动态壁纸时打开对话框

时间:2010-12-02 18:57:38

标签: android dialog live-wallpaper touch-event

当点击动态壁纸时,我想打开一个包含一些简单信息的对话框。在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而不是从Activity中提升对话框。覆盖WallpaperService.Engine的onTouchEvent方法只会得到相同的结果。

这是否意味着我需要启动一个单独的Activity来托管对话框?或者是从动态壁纸触发对话不可能?

1 个答案:

答案 0 :(得分:1)

  

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

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

就个人而言,如果你期望为你的整个动态壁纸做这个,我希望你会在市场上得到一大堆一星评级,因为我怀疑当你的活动/对话不断弹出时用户会感到烦躁只是因为他们错误地点击他们的主屏幕。