2011-03-14 28 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的上下文。

相關問題