V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
shendaowu
V2EX  ›  Android

怎样写代码才能让安卓在锁屏状态下一直能够接收网络数据?

  •  
  •   shendaowu · 2017-07-31 17:02:02 +08:00 · 9145 次点击
    这是一个创建于 2654 天前的主题,其中的信息可能已经有所发展或是发生改变。
    有相关的书或者资料最好。
    除了 wakelock 还有其他方法吗?越省电越好。之前搜“安卓 锁屏 timer ”的时候搜到个文章,里面提到个 AlarmManager,据说是使用手机上的实时操作系统实现的定时。有没有类似的方法?我搜了一下,好像那个实时操作系统不能处理
    WiFi 和蓝牙。另外我只是自己写程序自己用,有没有什么奇巧淫技可以用?比如用一些什么东西唤醒手机,然后接收广播,然后再开始接收网络数据。
    7 条回复    2017-07-31 22:07:24 +08:00
    flynaj
        1
    flynaj  
       2017-07-31 18:35:08 +08:00 via Android
    其实很简单取得 root 权限以系统程序运行就可以了
    pagxir
        2
    pagxir  
       2017-07-31 18:42:35 +08:00 via Android
    用 tcp 保活连接,设置 wifi 一直连接。对于国产系统,可以用 vpn 的方式 。
    Orzpls
        3
    Orzpls  
       2017-07-31 19:43:19 +08:00 via Android
    QQ 和微信是怎么实现的?
    chinawrj
        4
    chinawrj  
       2017-07-31 20:03:10 +08:00
    abbenyyy
        5
    abbenyyy  
       2017-07-31 20:36:52 +08:00
    @Orzpls QQ 和微信是因为体量大到手机厂商不加入白名单就会被用户骂,所以才能做到这样的。你可以把你应用的包名改成微信的包名,也可以达到一样的效果。
    gamexg
        6
    gamexg  
       2017-07-31 21:07:51 +08:00
    由于各个程序都试图后台保活造成电量掉的快,现在手机厂家基本把所有的后台运行砍干净了。
    AlarmManager 基本被厂家封得差不多了,唤醒次数一多就不工作了。

    前年做推送时发现可以建立一个长连接,然后由服务器每分钟发一个心跳来保活连接并唤醒你的程序,注意需要服务器发送心跳包,客户端根本没有可靠的方式能够定时发送心跳包。

    不过现在没在接触 android,不知道现在的系统还能不能这么玩。

    另外可以反编译系统看看 AlarmManager 的包名白名单,用个白名单内的包名。中兴的白名单记得有 gps.* 的。

    也可以试试第三方推送,不知道现在的效果如何。
    mscb
        7
    mscb  
       2017-07-31 22:07:24 +08:00
    保证进程锁屏不被杀死应该就可以了吧?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2969 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 14:38 · PVG 22:38 · LAX 06:38 · JFK 09:38
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.