2011-10-19 43 views
1

我有一個廣播接收器,用於檢測呼出的結束。之後,我想在我的活動中展示一些對話。我想在我的活動這種方法:如何調用從廣播接收器正確更改UI的方法?

public static void buildShouldIFollowMessage(String callLength) { 

    final AlertDialog.Builder builder = new AlertDialog.Builder(c); 
    builder.setMessage(Constants.CONN_TIMEOUT_MESSAGE+" "+callLength) 
      .setCancelable(false) 
      .setPositiveButton("Da", new DialogInterface.OnClickListener() { 
       public void onClick(@SuppressWarnings("unused") final DialogInterface dialog, @SuppressWarnings("unused") final int id) { 


         //DownloadTask d=new DownloadTask(); 
         //d.execute(Constants.WS_ADDRESS); xmlPredlog.xml         
       } 
      }) 
      .setNegativeButton("Ne", new DialogInterface.OnClickListener() { 
       public void onClick(final DialogInterface dialog, @SuppressWarnings("unused") final int id) { 

        dialog.cancel(); 
        //showCustomToast("something"); 
        //emptyList.setText("something"); 
       } 
      }); 
    final AlertDialog alert = builder.create(); 
    alert.show(); 
    } 

一切編譯和運行,但alert.show()被調用時,我得到「AndroidRuntime(827):android.view.WindowManager $ BadTokenException:產生的原因:無法添加窗口 - 標記null不適用於應用程序「。

當您需要從廣播接收器中調用某些活動代碼時,這裏和其他情況下的解決方案是什麼?

回答

0

BroadcastReceiver doc

特別是,你可能無法在廣播接收器中顯示來自 對話框或綁定到服務。對於前者,您應改爲使用NotificationManager API 。對於後者,您可以使用 Context.startService()向服務發送命令。

因此,無論使用的通知系統也許開始一個活動,會看起來像一個對話框