android 全局对话框6,[Android][Framework]从全局AlertDialog聊聊WindowManager

问题

在SystemUI里添加了一个broadcastReceiver,需求接收到消息后弹出一个用户提示

AlertDialog1.jpg

实现代码也很简单,

AlertDialog.Builder builder = new AlertDialog.Builder(mContext);

builder.setTitle(R.string.device_temp_high)

.setMessage(warn_format)

.setPositiveButton(R.string.okay, new DialogInterface.OnClickListener() {

@Override

public void onClick(DialogInterface dialogInterface, int i) {

}

}).setCancelable(false).create().show();

但实际上,这个mContext只能从onReceive(Context context, Intent intent)获取到一个。而这个Context根本无法更新UI。关于Context的具体讨论见:带你掌握Android Context

所以,运行时会报出如下错误:

Unable to add window — token null is not for an application”

拿不到Context,emmm,怎么弹出这个对话框呢?

还好,Android系统留了一些后手。

将其转换成全局AlertDialog也很简单。

首先,对AlertDialog添加SYSTEM_ALERT类型

AlertDialog dlg = builder.create();

dlg.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);

dlg.show();

其次,增加对应权限

这样弹窗就变成系统的弹窗了。

AlertDialog2.png

TYPE_SYSTEM_ALERT

草稿整理中.. TBC..

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值