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.动态注册广播
相关文章推荐
- android在Service,BroadCast onReceiver()中弹出Dialog对话框
- android在Service,BroadCast onReceiver()中弹出Dialog对话框(即全局性对话框 )
- android在Service,BroadCast onReceiver()中弹出Dialog对话框,即全局性对话框
- 在Service或者BroadCastReceiver中弹出dialog
- broadcastreceiver中显示dialog以及重启当前activity
- 记一次在广播(BroadcastReceiver)或服务(Service)里弹窗的“完美”实践
- 在BroadcastReceiver中利用推送设置全局弹窗,并将消息保存至本地
- Android 如何在service和BroadCastReceiver中 启动activity和alertdialog?
- Android 四大组件(Activity、Service、BroadCastReceiver、ContentProvider)
- BroadcastReceiver之系统的有序短信广播--手机验证码短信的自动填充
- WebViewDialog默认背景透明的加载网页的对话框, 红包、活动弹窗
- BroadcastReceiver(广播接收器 )
- BroadcastReceiver
- 接收广播BroadcastReceiver
- Broadcast receiver Activity
- 改造的音乐播放器的例子(学习Service和BroadCastReceiver必用)
- Android 四大组件系列之---BroadcastReceiver 详解
- 自定义的BroadCastReceiver
- 44.使用Service、BroadcastReceiver、CountDownTimer完成页面销毁不重新计时的验证码计时器
- android开发 - BroadcastReceiver 广播接收者