BroadcastReceiver的OnReceive函数中启动对话框

原创 2013年12月03日 13:46:25

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



android之保持设备唤醒

为了避免消耗电池,一个空闲的设备很快就会进入休眠,但是有的时候需要应用保持屏幕或CPU唤醒来完成一些工作。 实现的方法取决于你的APP的要求,一般是采取最轻量级的方法,以减少你的APP对系统资源...
  • xianlan872522876
  • xianlan872522876
  • 2014年04月20日 21:50
  • 1564

Broadcast的onReceive方法中弹出AlertDialog

问题阐述根据《第一行代码》中使用广播做一个强制下线的功能。在任何一个界面上点击button,就发送强制下线的广播。同时程序使用静态注册广播接收器,接收器中会弹出一个对话框,让用户无法进行任何其他操作,...
  • chenHCYJ
  • chenHCYJ
  • 2016年11月16日 20:36
  • 2043

【Android常用】Broadcast的onReceive方法中弹出AlertDialog

问题描述在广播接收器(BroadcastReceiver)的onReceive(Context context, Intent intent)方法中弹出一个AlterDialog方案一感谢懿亮羽嘉提供...
  • R3lish
  • R3lish
  • 2017年02月15日 09:25
  • 733

BroadcastReceiver的onReceive不执行

package net.zx; import android.app.Activity; import android.content.Intent; import android.content....
  • yingduanru9647
  • yingduanru9647
  • 2016年12月31日 13:35
  • 413

Broadcast Receiver开启服务而不是子线程处理耗时操作

Broadcast Receiver用于接收并处理广播通知(broadcast announcements)。多数的广播是系统发起的,如地域变换、电量不足、来电来信等。程序也可以播放一个广播。程序可以...
  • cquwentao
  • cquwentao
  • 2014年05月29日 01:06
  • 4441

BroadcastReceiver onReceive()没有被调用

代码个功能是在activity中启动service,在service中获取相关数据后广播给activity,activity刷新界面,但是activity中的onReceive怎么也不执行。 说明:...
  • meimo5159
  • meimo5159
  • 2017年01月02日 14:18
  • 583

如何在 BroadcastReceiver 中执行耗时操作?

一、BroadcastReceiver 注册方式     BroadcastReceiver 有两种注册方式,一是使用 { Context.registerReceiver()} 动态注册,另一种是...
  • coralline_xss
  • coralline_xss
  • 2017年04月14日 13:08
  • 1690

android—BroadcastReceiver 中的Context理解

Receiver的官方文档: 关键在于如何理解,广播运行时的上下文环境。对于Receiver的注册,分为两种情况,第一种,在Manifest中注册,如下 receive...
  • zhuangyalei
  • zhuangyalei
  • 2016年07月26日 18:48
  • 3236

Android复习之BroadCastReceiver

是什么BroadCastReceiver是四大组件之一,相当于一个全局的监听器,用于监听系统全局的广播。怎么样由于BroadCastReceiver是全局监听器,因此它可以方便的实现系统中不同组件之间...
  • cdhahaha
  • cdhahaha
  • 2016年10月20日 23:29
  • 541

Broadcast与service----------通过广播启动服务

BroadcastReceiverd的流程:注册、发送广播。       Service的流程:注册、启动、停止。       上一篇已经讲了,注册广播有两种方式,静态的和动态的。今天我用动态的方...
  • Mary881225
  • Mary881225
  • 2012年03月20日 13:23
  • 20276
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:BroadcastReceiver的OnReceive函数中启动对话框
举报原因:
原因补充:

(最多只允许输入30个字)