Android广播中弹窗 BroadcastReceiver Dialog

问题

集成信鸽推送服务,产品要求在APP前台运行时弹窗消息提示框。小码哥写了个测试程序跑一下,服务端发送透传消息,omg APP居然没有弹窗消息。于是断点调试,接收推送的广播onReceive()代码执行了,弹窗的代码也执行了,但是就是没有弹窗。纠结~~问度娘吧。

原因

出于安全原因的考虑,Android是不允许Activity或Dialog凭空出现的,一个Activity的启动必须要建立在另一个Activity的基础之上,也就是以此形成的返回栈。而Dialog则必须在一个Activity上面弹出(除非是System Alert类型的Dialog)。

解决

按照网上各路大神给的思路,首先AndroidManifest.xml中添加权限

 <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />

给Dialog设置:

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

掉坑1:
再跑一下程序,结果,OMG 什么玩意啊!还是不弹窗。要哭的赶脚。
掉坑2:
于是,又开始折腾找问题了。竟然还是广播的问题,静态广播和动态广播,呵呵呵..呵…为啥?
掉坑3:
我把接收信鸽推送的静态广播改成动态广播吧,在跑一下程序,我喝一口水(嗯…这下总该可以了),OH NO!居然接收不到信鸽推送广播了,接收信鸽推送的广播是不能写成动态的。那怎么办嘞。
最终解决:
单独注册一个弹窗的动态广播。

总结

广播Dialog弹窗,满足3个条件:
1.权限

 <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />

2.Dialog设置

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

3.动态注册广播

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值