系统重新启动后,在广播接收器中显示警报对话框

美好的一天,在广播接收机中,系统重新启动后,我试图显示一个警报对话框。我已经在清单中添加了接收者并调用了所需的权限,但是在显示对话框时出现错误。请问我该如何正确实施呢?


我的代码:


public void onReceive(final Context context, Intent intent) {

    Log.d(TAG, "received boot completed broadcast receiver... starting settings");



    String settings = context.getResources().getString(R.string.restart_setting);

        String yes = context.getResources().getString(R.string.Settings);

        String no = context.getResources().getString(R.string.Cancel);


              final AlertDialog.Builder builder = new AlertDialog.Builder(context);

                builder.setMessage(settings)

                       .setCancelable(false)

                       .setPositiveButton(yes, new DialogInterface.OnClickListener() {

    public void onClick(@SuppressWarnings("unused") final DialogInterface dialog, @SuppressWarnings("unused") final int id) 

   Intent config = new Intent(context, WeatherConfigure.class)

     context.startActivity(config);


    }

 })

    .setNegativeButton(no, new DialogInterface.OnClickListener() {

        public void onClick(final DialogInterface dialog, @SuppressWarnings("unused") final int id) {

             dialog.cancel();

        }

    });

  final AlertDialog alert = builder.create();

  alert.show();


    }

正在收到此日志错误:


01-07 01:42:01.559: ERROR/AndroidRuntime(2004): Caused by: android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application


01-07 01:42:01.559: ERROR/AndroidRuntime(2004): at android.view.ViewRoot.setView(ViewRoot.java:548)


01-07 01:42:01.559: ERROR/AndroidRuntime(2004):at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:177)


01-07 01:42:01.559: ERROR/AndroidRuntime(2004): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:91)


01-07 01:42:01.559: ERROR/AndroidRuntime(2004):at android.app.Dialog.show(Dialog.java:288)


01-07 01:42:01.559: ERROR/AndroidRuntime(2004):at com.MuaaApps.MyWeatherUpdate.myWeatherBroadcastReceiver.onReceive(MyWeatherBroadcastReceiver.java:59)



守着星空守着你
浏览 431回答 3
3回答

三国纷争

您可以从此处获取源代码。您不能直接从广播接收器显示对话框。您必须使用Activity。另外,为了接收ACTION_BOOT_COMPLETED您的活动,必须首先由用户或其他应用程序显式启动(有关更多信息,Google应用程序处于停止状态)。基本上,要实现所需的功能,您需要执行以下操作:创建显示对话框的透明活动。创建BroadcastReceiver将接收ACTION_BOOT_COMPLETED并开始您的活动。在清单中注册您的广播接收器并获得适当的许可。此外,此问题提供有关如何创建透明活动的更多信息。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Android