处理怎样在接收广播后启动对话框用来提示用户,开始看到OnReceive存在context,因此new AlertDialog,但是在show时出错,怀疑是OnReceive中不能进行过长时间的操作,因此新开一个Thread去处理AlertDialog,但是还是会抛异常:
android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application
总结三种方式如下:
1,启动一个Activity,背景设为透明,Activity中启动对话框。
2,将Activity本身通过主题设置样式为对话框的,将Activity显示为对话框模式:
android:theme="@android:style/Theme.Dialog"
这2种方法要维护Activity,结束后finish掉Activity,并在启动Intent时需要加上Intent.FLAG_ACTIVITY_NEW_TASK标志。3,参照系统关机提示对话框,实现“对话框”,代码如下:
wm = (WindowManager) getApplicationContext().getSystemService("window");
WindowManager.LayoutParams para = new WindowManager.LayoutParams();
para.height = -1;
para.width = -1;
para.format = 1;
/* wmParams.type=LayoutParams.TYPE_PHONE; //设置window type
wmParams.format=PixelFormat.RGBA_8888; //设置图片格式,效果为背景透明
wmParams.gravity=Gravity.LEFT|Gravity.TOP; //调整悬浮窗口至左上角,便于调整坐标*/
para.flags = LayoutParams.FLAG_FULLSCREEN | LayoutParams.FLAG_LAYOUT_IN_SCREEN;
para.type = LayoutParams.TYPE_SYSTEM_ALERT;
mView = LayoutInflater.from(context).inflate(R.layout.layout_dialog, null);
wm.addView(mView, para);