在非Activity中显示Dialog是需要设置window type的, 否则就会运行报错。
dialog = builder.create()
dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
dialog.show()
需要注意的是TYPE_SYSTEM_ALERT还要申请权限, <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
另外, context改成final 是因为在匿名内部类中需要保证使用的变量是final的, 可以这么理解,广播接收器的生命周期是onReceive执行完就结束了, 此时Dialog还要显示, 需要用到context, 必须确保context不改变,这是java设计者用来保证数据一致性的, 以及变量在onReceive执行完后,context还可以访问到。
本文如未解决您的问题请添加抖音号:51dongshi(抖音搜索懂视),直接咨询即可。