android.view.WindowManager $ BadTokenException:无法在显示广播接收器

时间:2018-03-31 20:42:29

标签: android alertdialog

我已设置闹钟管理器我想在BroadcastReceiver中的onReceive方法中显示一个对话框。

public class MyReceiver extends BroadcastReceiver {

@Override
public void onReceive(Context context, Intent intent) {
    if ("android.intent.action.BOOT_COMPLETED".equals(intent.getAction())) {
        Utils.getINSTANCE().statusCheck(context);
    }
}

这里是statuscheck方法

    public void statusCheck(Context context) {
    final LocationManager manager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);

    if (!manager.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
        buildAlertMessageNoGps(context);

    }
}
private void buildAlertMessageNoGps(final Context context) {
    final AlertDialog.Builder builder = new AlertDialog.Builder(context);
    builder.setMessage("Your GPS seems to be disabled, do you want to enable it?")
            .setCancelable(false)
            .setPositiveButton("Yes", new DialogInterface.OnClickListener() {
                public void onClick(final DialogInterface dialog, final int id) {
                    context. startActivity(new Intent(android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS));
                }
            })
            .setNegativeButton("No", new DialogInterface.OnClickListener() {
                public void onClick(final DialogInterface dialog, final int id) {
                    dialog.cancel();
                }
            });
    final AlertDialog alert = builder.create();
    alert.show();
}

我在alert.show()

上面临问题令牌null
  

java.lang.RuntimeException:无法启动接收器com.coin.etheriumclassic.AlarmReceiver:android.view.WindowManager $ BadTokenException:无法添加窗口 - 令牌null不适用于应用程序

我们怎么能这样做?如果我们必须在Broadcastreceiver中显示简单的对话框(我在广播接收器中这样做,因为我必须在设备开启时显示对话框)

1 个答案:

答案 0 :(得分:1)

您只能在Activity而不是BroadcastReceiver中显示BroadcastReceiver

可以Notification开始活动,因此您可以创建一个带有对话框主题的活动(例如Theme.Material.Dialog),因此它的样式就像一个对话框。

但是,请注意,在设备启动时显示对话框是相当用户敌对的,更不用说不切实际了(例如,设备有锁屏)。请考虑改为显示 import random lists = [] for x in range(10,501,10): l = [] for _ in range(x): l.append(random.randint(0,1)) lists.append(l) print(lists)