让Android保持唤醒状态以接收网络连接?

5
我正在为Android设备编写一个HTTP服务器,使用NanoHTTPD实现。
我的目标是即使屏幕关闭,设备也能允许传入连接。
我从小处着手,使用持久通知,认为这将使我的应用程序保持在内存中并在后台运行。锁定设备后,只要我不离开它约一分钟,就可以继续浏览它提供的网页。一旦我这样做了,它就完全停止响应。
我通过包含CPU部分唤醒锁来升级我的尝试,但没有任何改变。然后我添加了一个完整的WifiLock来保持无线电开启,并最终在绝望中添加了一个MulticastLock(我想也许它可以让无线电保持连接)。尽管有所有这些锁定,但如果约一分钟没有进行任何连接,设备仍会停止响应。
有什么特定的方法可以让设备保持监听传入连接吗?似乎定期向设备发送请求可以使其保持唤醒状态……我能否以某种方式在程序中模拟这种行为?我想不出办法。
谢谢!
编辑:对于这个问题,可以忽略电池耗尽的情况。
编辑:NanoHTTPD也作为服务运行。

你是指监听传入连接,就像监听传入电话一样吗?我真的不太明白监听连接的目的。 - Ahmad Sanie
您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - bob
你最终解决了这个问题吗? - Michael
我现在已经搞清楚了 @Michael - Chris
1个回答

4

您需要以下内容:

  • 前台服务
  • Wifi锁定
  • CPU锁定

不完整的代码片段(例如缺少服务/释放锁):

    // Keep the CPU awake.
    powerManager = (PowerManager)getSystemService(Context.POWER_SERVICE);
    wakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "Httpd");
    wakeLock.acquire();

    // Keep the wifi awake.
    WifiManager wm = (WifiManager)context.getSystemService(Context.WIFI_SERVICE);
    wifiLock = wm.createWifiLock(WifiManager.WIFI_MODE_FULL_HIGH_PERF, "Httpd");
    wifiLock.acquire();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接