记录错误16.8.12 android receiver dialog

来源:互联网 发布:鞋子淘宝试用报告范文 编辑:程序博客网 时间:2024/05/01 03:19

现在遇到一个需求,在网络从wifi切换到别的网络的时候弹出一个对话框,然后静态的注册了一个广播,但是弹出遇到问题,原来做过账号的强制退出,使用的是这个

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

要在show之前  create之后添加,将其设置成一个系统的dialog,

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

这个权限也要加上,

原因:

在动态注册中BroadcastReceiver和Activity是运行在同一个进程中的,因此sendBraodcast()时,传入onReceive()方法里的Context对象context其实就是调用到sendBroadcast()的Activty对象,因此这里的context可以直接用来构造AlertDialog。

但是静态注册里,如果没声明android:process,那么这个BroadcastReceiver和Activity是在同一个进程的,显然BroadcastReceiver的生命周期和当前的Application不是绑定的,那么这个BroadcastReceiver运行的空间就应该在某个系统服务而不是当前进程中。结合“设置了TYPE_SYSTEM_ALERT属性”是典型的在service中构造Alertdialog的方法这一点,很显然此时onReceive()里传入的context实际上是这个BroadcastReceiver所在的系统服务。

来自:http://www.zhihu.com/question/37849134   各位想详细看的请移步


然而,我的手机还是没能弹出来,,比较无语,最后上网上看了下发现是google 在 6.0加入了运行时权限的概念,需要在java代码中进行动态申请。

一个比较好的资料:https://github.com/CankingApp/PermissionDemo

然后解决方法:

一丶google为了防止旧的应用程序崩溃只对targetSDK为23及以上的程序使用新的权限机制,所以targetSDK设为23以下就可以规避问题了 但是感觉不好

二丶在设置里面给了这个调试应用【允许悬浮窗】 但是得手动的打开,而且,我使用的是 米UI,就是打开了也没什么用


然后问题没有解决,我就想使用dialog样式的activity来做,但是还是弹不出来(弹的时候要加上 intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK))

这个标记,不然会报错。但是,还是没用,6.0以上弹不出来,我测试的4.2的系统就可以。


最后,我上去找了几个应用,看了下他们的网络监控,,爱奇艺我下载直接弹了个Toast偷笑 , 优酷 没有显示,我wifi切换到4g,什么都没提示鄙视,继续下载。。

so,和老大商量了下,也弹了个Toast提醒。。。敲打




0 0