Java 如何从广播接收器正确调用更改UI的方法?

Java 如何从广播接收器正确调用更改UI的方法?,java,android,broadcastreceiver,android-alertdialog,Java,Android,Broadcastreceiver,Android Alertdialog,我有一个广播接收器,可以检测出一个传出呼叫的结束。之后,我想在活动中显示一些对话框。我在活动中尝试了以下方法: public static void buildShouldIFollowMessage(String callLength) { final AlertDialog.Builder builder = new AlertDialog.Builder(c); builder.setMessage(Constants.CONN_TIMEOUT_MESSAGE+" "+

我有一个广播接收器,可以检测出一个传出呼叫的结束。之后,我想在活动中显示一些对话框。我在活动中尝试了以下方法:

 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不适用于应用程序”

当您必须从广播接收器调用某些活动代码时,这里和其他情况下的解决方案是什么

特别是,您可能不会显示对话框或绑定到来自的服务 在广播接收机中。对于前者,您应该使用 NotificationManager API。对于后者,您可以使用 Context.startService()向服务发送命令

因此,要么使用通知系统,要么启动一个看起来像对话框的活动