您的位置:首页 > 移动开发 > Android开发

Android广播中弹窗 BroadcastReceiver Dialog

2017-09-18 10:05 225 查看

问题

集成信鸽推送服务,产品要求在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.动态注册广播
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息