因为AlertDailog在显示时需要一个指定的Activity去依附
AlertDialog.Builder builder = new Builder(MainActivity.this);
当从BroadcastReceiver这类的元素中生成AlertDailog时,不一定有明确的Activity提供给我们
如下解决方案:
AlertDialog.Builder builder = new Builder(context);
alert.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
然后在manifest里面注册权限
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"></uses-permission>
原理其实就是依附于系统上,直接在任何地方情况下都能弹这个Dailog.