为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

守着星空守着你 2019-12-13 17:10:00
美好的一天,在广播接收机中,系统重新启动后,我试图显示一个警报对话框。我已经在清单中添加了接收者并调用了所需的权限,但是在显示对话框时出现错误。请问我该如何正确实施呢?我的代码: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 application01-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)
查看完整描述

3 回答

?
三国纷争

TA贡献1804条经验 获得超7个赞

您可以从此处获取源代码。

您不能直接从广播接收器显示对话框。您必须使用Activity。另外,为了接收ACTION_BOOT_COMPLETED您的活动,必须首先由用户或其他应用程序显式启动(有关更多信息,Google应用程序处于停止状态)。

基本上,要实现所需的功能,您需要执行以下操作:

  1. 创建显示对话框的透明活动。

  2. 创建BroadcastReceiver将接收ACTION_BOOT_COMPLETED并开始您的活动。

  3. 在清单中注册您的广播接收器并获得适当的许可。

此外,此问题提供有关如何创建透明活动的更多信息。



查看完整回答
反对 回复 2019-12-14
  • 3 回答
  • 0 关注
  • 396 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信