关闭

BroadcastReceiver的OnReceive函数中启动对话框

1051人阅读 评论(0) 收藏 举报

处理怎样在接收广播后启动对话框用来提示用户,开始看到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);



0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:4699次
    • 积分:126
    • 等级:
    • 排名:千里之外
    • 原创:8篇
    • 转载:0篇
    • 译文:0篇
    • 评论:0条