Как правильно вызывать методы, изменяющие пользовательский интерфейс широковещательных приемников? - PullRequest
1 голос
/ 19 октября 2011

У меня есть широковещательный приемник, который определяет окончание исходящего вызова. После этого я хочу показать диалог в моей деятельности. Я попытался с помощью этого метода в моей деятельности:

 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: Невозможно добавить окно - нулевой токен не для приложения ».

Какое решение здесь и для других случаев, когда вам приходится вызывать код активности с широковещательных приемников?

1 Ответ

0 голосов
/ 19 октября 2011

Из документа BroadcastReceiver

В частности, вы не можете показывать диалог или привязываться к сервису из в BroadcastReceiver. Для первого вы должны вместо этого использовать API NotificationManager. Для последнего вы можете использовать Context.startService () для отправки команды службе.

Так что либо используйте систему уведомлений, либо, возможно, запустите действие, которое будет похоже на диалог

...