目前新版的Miui已经屏蔽掉了本文所讲的漏洞,所以已经有很多朋友向我反馈他用了我的demo怎么就不好使呢。我自己也测试了一下,确实是时灵时不灵的。所以本文下面讲的方法现在就仅做参考了(miui不好使了,其他一些系统的说不定还好用呢~)。那么目前主流的方法就是App启动后,判断是否是MIUI6以上的系统,如果是,就弹出引导弹窗,让用户跳转到神隐模式设置页面进行白名单设置。
具体方法我会抽个时间写一个demo补充进来,因为这里面还是有坑的,miui系统不一样,神隐模式的位置不一样,如果跳转错误的话就会crash。
android真的被玩坏了,android界有一场永远停不下来的攻防战,反和被反都流氓

背景

做为用户,你肯定抱怨过手机上有太多杀不死的应用浪费你的内存,浪费内存就算了,他们还跑你的流量。OK,为了提供更好的用户体验,以MIUI为首的神隐模式(因为我只知道MIUI的叫神隐……就先以他为首吧,有了解谁先出的快告诉我),各个系统厂商都推出自己的XX模式。

在手机息屏后,未加入白名单的应用将会被禁止访问网络。

嗯……这个做的好!用户这回开心了呀:-D。(虽然好像有人抱怨神隐有Bug)。

可是开发者哭了啊,老板一定要让我完成这个需求啊,隔段时间上传或获取个数据呀,你给我断网了我咋办?系统级屏蔽的啊这是,我没法搞了啊……联系运营产品公关还有各种大BOSS!

“我们联系下MIUI官方,把我们默认加白名单行不行?”

“先不说MIUI给不给,除了MIUI还有别家系统啊,而且谁都联系都能加白名单,这模式还有啥用”

“让设计做引导页”

“系统真的是太多了啊……同一个系统不同版本还有差别啊……”

(题外话,话说360电脑版,打开USB调试的引导页真心很屌啊,大部分手机不同型号好像都做了。)

* 完了,你说怎么办吧?*

注:息屏后不能访问网络的实质是,系统休眠后,应用唤醒无法访问网络,所以用轮询执行任务的,是不会出现这种现象的,因为轮询不会让系统休眠,似乎问题解决了是吗?哼哼,你就等着被用户卸载吧,电量哗哗往下掉啊!

所以我们这里讨论的是,使用alarmManager做定时任务的情况

解决思路

1.提到息屏后访问不了网络,你第一个想到肯定是系统休眠了,这个简单啊,唤醒不就好了么。PowerManager有个啥属性来着?用这个就可以了!!

额~既然这么简单,那还叫问题吗?

事实是,系统是唤醒了,但是网络就是被中断了,同时被中断的还有GPS,还有什么被禁止的就不清楚了,感兴趣的自己试一下。

==============
2.OK,默默的“偷”流量是不行了,我们回归本源想想,问题是息屏后~息屏后~息屏后~诶?同时,leader还提供了一个信息,息屏后收不到推送,但是点亮后,推送都过来了。那我们亮屏了试试?

  • 2.1 : 时刻关注Log日志,在网络请求失败后,我们手动点亮屏幕。结果是: 请求成功了~原来问题在这里。

  • 2.2 : 可是手动点亮屏幕不是我们的需求啊,怎么才能自动点亮呢?前段时间做新通知点亮屏幕了,用这个试试。try catch 里,当访问失败进入catch时,我们点亮屏幕并重新请求。
    点亮代码是这个:

    PowerManager pm = (PowerManager) AliveApplication.getContext().getSystemService(AliveApplication.getContext().POWER_SERVICE);
    PowerManager.WakeLock mWakelock = pm.newWakeLock(PowerManager.ACQUIRE_CAUSES_WAKEUP | PowerManager.SCREEN_DIM_WAKE_LOCK, "target");
    mWakelock.acquire();
    mWakelock.release();//记得权限
    <uses-permission android:name="android.permission.WAKE_LOCK"/>
    

    没错,还是PowerManager ,但换了一个参数:

    PowerManager.SCREEN_DIM_WAKE_LOCK
    

    奇迹发生了,点亮屏幕后,网络请求成功了。看来这条路没错,要是可以在用户不知情的情况下做就好了,PowerManager还有好几个参数,我们换别的试试?

  • 2.3 : PowerManager的几个参数及解释:

    //保持CPU 运转,屏幕和键盘灯有可能是关闭的。
    PARTIAL_WAKE_LOCK
    //保持CPU 运转,允许保持屏幕显示但有可能是灰的,允许关闭键盘灯
    SCREEN_DIM_WAKE_LOCK
    //保持CPU 运转,允许保持屏幕高亮显示,允许关闭键盘灯
    SCREEN_BRIGHT_WAKE_LOCK
    //保持CPU 运转,保持屏幕高亮显示,键盘灯也保持亮度
    FULL_WAKE_LOCK
    /*** 正常唤醒锁实际上并不打开照明。相反,一旦打开他们会一直仍然保持(例如来世user的activity)。* 当获得wakelock,这个标志会使屏幕或/和键盘立即打开。* 一个典型的使用就是可以立即看到那些对用户重要的通知。*/
    ACQUIRE_CAUSES_WAKEUP
    /*** 设置了这个标志,当wakelock释放时用户activity计时器会被重置,导致照明持续一段时间。* 如果你在wacklock条件中循环,这个可以用来减少闪烁*/
    ON_AFTER_RELEASE
    

    结果是令人失望的,似乎只有在屏幕点亮后网络才能恢复。再换个思路试试。

  • 2.4 : 监听屏幕点亮与关闭广播,在点亮前,先将屏幕亮度调到0,息屏后,再恢复正常。似乎很可行啊!!

    最后的结果失败的,所以这里也不放调节屏幕亮度的代码了。

    一个有趣的现象,不知道是系统差别还是Android版本差别。

    魅族5.0上,可以实现亮度为0点亮,但是息屏后亮度恢复,屏幕又一下亮了。

    酷派 4.1 上,点亮屏幕和调整屏幕亮度没有关系,点亮后依然以之前设置亮度为准。

    暂时只测试了这两款机器。

    到这里,基本上就已经放弃“暗”的方案了。只能“明”着来了。那这样就要考虑用户体验了

保证用户体验下的解决方案

  • 1.监听网络请求失败后做点亮准备。注意是“准备“”,并不是失败后立马点亮,这个太吓人了,手机放那了不停闪来闪去。

  • 2.准备后,先做请求积累,当到一个临界值时,临界值依具体业务需求而定,依然无法请求,再点亮屏幕一次性发送。

  • 3.利用一切可以利用的资源,点亮屏幕的操作并不是只有你的APP会做,监听屏幕点亮广播,在用户手动点亮、其他应用点亮时做网络请求

  • 4.如果你的请求真的很急切,且略有些频繁,可以加入适当掩饰。比如弹一个本地已经缓存好的通知出来。如果通知并不是很重要,息屏后建议自动清除。

  • 5.如果你的需求迫切到,必须定时定点,那么我的建议是向用户坦白,在什么工作情况下,您的屏幕将会自动被点亮。

  • 6.白名单导航页还是要做的,毕竟进了白名单就没有那么多事了。点亮屏幕只是一个缓冲之计。

  • 7.公关也是要的,如果可以直接被系统默认收进白名单皆大欢喜

  • 8.记得区分是当前无网络还是被屏蔽了,如果用户就是没开数据和wifi,你不停的在闪屏幕,不卸载才怪!

  • 9.并不会息屏后立刻断网,还可以活2-3分钟,有时候5-7分钟也是有可能的,所以事情情况并没有那么严峻。

  • 10.无论是Timer还是线程Sleep,都可以保证系统一直在唤醒状态,但强烈不建议这样做,手机时刻保持唤醒状态,是非常非常耗电的!

示例代码

最后,废话说了这么多,直接上Demo代码啦。代码很简单,里面都写好了注释,具体用户体验逻辑还要Developers 自己添加哦~

Github: https://github.com/lizhaoxuan/IamAlive

对了,还要感谢我的Android小组Leader本篇文章的最大贡献者 锦洋大哥 ^.^

小米神隐模式破解(反系统息屏后网络中断)相关推荐

  1. miui系统神隐模式导致app后台服务无法连接网络

    最近在一个推送项目中遇到了一些问题,发现小米手机无法收到推送,很奇怪,看了日志发现,日志中出现很多网络问题,想到有可能和神隐模式有关 于是写了个demo验证我的猜测,service中的代码如下: 打印 ...

  2. 设置WIN10+系统息屏后密码登录解决方法

    win+i

  3. android 关闭神隐模式,爱玩机 | 小米miui系统神隐模式你知道,那么极致神隐模式呢?...

    原标题:爱玩机 | 小米miui系统神隐模式你知道,那么极致神隐模式呢? 用过小米miui系统的都知道在miui设置里面的电量和性能,有一个神隐模式,用处就是帮你关掉你后台的软件,你可以为每一个应用进 ...

  4. miui7 android系统设置,MIUI7怎么设置神隐模式?小米MIUI7神隐模式设置方法图解

    MIUI7神隐模式相信很多用小米的朋友都已经听说过了,这是在最新版的MIUI7出来的一个模式.在神隐模式下可以制定后台运行的时候不使用网络或者GPS邓功能,从而达到省电的效果,那么,MIUI7神隐模式 ...

  5. [源码]跳转MIUI神隐模式列表以及具体设置界面

    MIUI特有一个省电策略模式-神隐模式,如果你的APP需要在息屏情况下一定时间内使用网络.定位或者蓝牙等功能,则需要引导用户去关闭神隐模式或者将你的APP加入神隐模式白名单中,如何正确跳转正是本篇要进 ...

  6. 神隐模式云控信息 服务器,《游戏蜂窝免root版》关闭高耗电或神隐模式教程

    <游戏蜂窝免root版>关闭高耗电或神隐模式教程 1.关于省电模式,免Root版为什么要关闭手机省电模式? 省电模式是各类型手机自带的一种节能模式,如小米手机的"神隐模式&quo ...

  7. App如何跳转到MIUI神隐模式详细设置界面,而非所有app的神隐模式界面

    App如何跳转到MIUI神隐模式详细设置界面 发这篇文章的原因是因为,最近在研究MIUI后台如何保活. 但是网上找到的代码,只能进到所有app的神隐模式配置界面,就像这样 传统做法: public v ...

  8. 神隐模式云控信息 服务器,MIUI7神隐模式怎么设置?miui7设置神隐模式图文教程[多图]...

    类型: 大小: 评分: 平台: 标签: MIUI7神隐模式在什么地方?如何设置?很多米粉对小麦新上线的这个功能还不太熟悉吧?没关系,下面是友情下载小麦整理出来的miui7设置神隐模式图文教程,希望可以 ...

  9. Windows系统禁止软件、驱动阻止系统息屏、睡眠。

    最近遇到了一件糟心的事,电脑屏幕不会自动熄灭,电脑显示器一直亮感觉很不好.最后经过我研究发现是一款软件阻止系统息屏导致的.但是由于工作原因这个软件必开,所以没办法只能寻找办法让电脑正常息屏. 所谓功夫 ...

  10. 手机息屏后停止_手机息屏还能这样玩?华为这几个隐藏小功能快学起来

    阅读本文前,请您先点击上面的"蓝色字体",再点击"关注",这样您就可以继续免费收到文章了.每天都有分享,完全是免费订阅,请放心关注. 注:本文转载自网络,如有侵 ...

最新文章

  1. Spring编程式和声明式事务实例讲解
  2. 以前的windows安装文件可以删除吗_安卓手机原来还可以这样安装windows系统,你还不知道吗?...
  3. 【编程通识】正则表达式
  4. 13.7.深入理解jstack日志
  5. TensorFlow 入门 | iBooker·ApacheCN
  6. 如何让Mac电脑在Finder窗口顶部显示文件路径?
  7. Padavan 老毛子路由器登录SSH教程
  8. C# 判断字符串中文汉字
  9. 遥感图像预处理-几何校正
  10. 计算机教程无线路由器桥接上网,两个无线路由器怎么桥接?如何桥接两个无线路由器...
  11. C++ 打开文件夹对话框-OPENFILENAME
  12. dsolve 的 用法
  13. win7 win8 系统ntoskrnl.exe丢失引起蓝屏的问题解决以及ntoskrnl.exe下载位置
  14. eclipse pmd的使用
  15. USACO-Charm Bracelet
  16. zemax 非序列模式 双折射晶体
  17. python解决换零钱问题_多种解法解决“零钱兑换”问题
  18. x64dbg破解一个简单的Demo教程
  19. BlackHoleSwap智能合约已通过PeckShield安全审计服务
  20. 利用HTML编写生日祝福

热门文章

  1. unity3D游戏开发之iTween介绍和用法
  2. 有线电视维护服务器,东方有线电视 网络服务器 设置
  3. 基于java的大学生奖学金管理系统
  4. O2O模式的赢利点有哪些?
  5. .gitignore释疑
  6. ioncube php encode,ionCube PHP解密
  7. 大脑网络结构、功能和控制的物理学
  8. 解析TCP/UDP协议的通讯软件
  9. amazeui验证遇到的坑
  10. 读《线上幽灵:世界头号黑客米特尼克自传》 有感