2011-03-14 41 views
3

我想显示AlertDialog内部定时器在服务类和我使用下面的代码:如何在服务类中的Timer中显示AlertDialog?

timer.scheduleAtFixedRate(new TimerTask() 
{ 
    private Handler updateUI = new Handler() 
    { 
     public void dispatchMessage(android.os.Message msg) 
     { 
      super.dispatchMessage(msg); 
      try {      
       fun(); 
      } catch (Exception e) {e.printStackTrace(); }  
     } 
    }; 
    public void run() 
    { 
     try { 
      updateUI.sendEmptyMessage(0);     
     }catch (Exception e) {e.printStackTrace(); } 
    } 
}, 0,60000); 

public void fun() 
{ 
    AlertDialog.Builder dlgAlert = new AlertDialog.Builder(this);      
    dlgAlert.setMessage(""); 
    dlgAlert.setTitle("");    
    dlgAlert.setPositiveButton("OK", null); 
    dlgAlert.setCancelable(true); 
    dlgAlert.create(); 
    dlgAlert.show(); 
} 

和我收到以下错误:提前

03-14 13:14:36.879: WARN/WindowManager(60): Attempted to add window with non-application token WindowToken{43f606b0 token=null}. Aborting. 
03-14 13:14:36.879: WARN/System.err(817): android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application 
03-14 13:14:36.889: WARN/System.err(817):  at android.view.ViewRoot.setView(ViewRoot.java:509) 
03-14 13:14:36.889: WARN/System.err(817):  at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:177) 
03-14 13:14:36.889: WARN/System.err(817):  at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:91) 
03-14 13:14:36.899: WARN/System.err(817):  at android.app.Dialog.show(Dialog.java:241) 
03-14 13:14:36.899: WARN/System.err(817):  at android.app.AlertDialog$Builder.show(AlertDialog.java:802) 
03-14 13:14:36.899: WARN/System.err(817):  at com.mobilelocalite.pkg.GPSServiceCellId.comparefromDb(GPSServiceCellId.java:373) 
03-14 13:14:36.909: WARN/System.err(817):  at com.mobilelocalite.pkg.GPSServiceCellId$1$1.dispatchMessage(GPSServiceCellId.java:133) 
03-14 13:14:36.909: WARN/System.err(817):  at android.os.Looper.loop(Looper.java:123) 
03-14 13:14:36.909: WARN/System.err(817):  at android.app.ActivityThread.main(ActivityThread.java:4627) 
03-14 13:14:36.909: WARN/System.err(817):  at java.lang.reflect.Method.invokeNative(Native Method) 
03-14 13:14:36.909: WARN/System.err(817):  at java.lang.reflect.Method.invoke(Method.java:521) 
03-14 13:14:36.909: WARN/System.err(817):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 
03-14 13:14:36.920: WARN/System.err(817):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 
03-14 13:14:36.920: WARN/System.err(817):  at dalvik.system.NativeStart.main(Native Method) 

感谢。

+0

良好的格式是你的朋友。 – 2011-03-14 07:55:38

+0

解决方案我发现有用的:http://stackoverflow.com/questions/3814126/display-alertdialog-as-system-overlay-window-from-service – Zelimir 2011-03-18 13:03:03

回答

1

看看这个问题:Alert dialog from Android service

编辑:

的问题是,您要弹出一个对话框,而无需到窗口的任何引用。您需要将消息发送到活动,并让活动处理弹出的对话框。

使用

new AlertDialog.Builder(this); 

服务里面会给你相似,你得到了一个错误。在一个Activity中使用相同的代码不会。

因此,一种替代方法是将广播发送到您正在联系的活动,让活动监听此广播。当活动接收到广播时,会显示一个对话框。

+0

你可以请给我一些其他的替代 – Monali 2011-03-14 12:26:49

+0

我的编辑帮助在任何办法? – 2011-03-14 23:08:34

0
Attempted to add window with non-application token WindowToken{43f606b0 token=null}. Aborting. 

你得到这个,因为你尝试添加在服务窗口,可是没有一个渲染线程绘制anything.Whenever您尝试添加它首先获取父窗口的令牌形成一个对话框系统,它是对话框的“上下文”。你在上下文中传递“this”,在你的情况下是服务。这是不正确的。

您应该尝试使用ApplicationContext或某些Activity的上下文。