我已设置闹钟管理器我想在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()
上面临问题令牌nulljava.lang.RuntimeException:无法启动接收器com.coin.etheriumclassic.AlarmReceiver:android.view.WindowManager $ BadTokenException:无法添加窗口 - 令牌null不适用于应用程序
我们怎么能这样做?如果我们必须在Broadcastreceiver中显示简单的对话框(我在广播接收器中这样做,因为我必须在设备开启时显示对话框)
答案 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)
。