保持Android唤醒进入的网络连接?

时间:2015-01-02 11:33:01

标签: android android-networking android-wake-lock nanohttpd

我正在为Android设备编写HTTP服务器,通过NanoHTTPD实现。

我的目标是让设备即使屏幕关闭也允许传入连接。

我从小开始,持续通知,认为这会将我的应用程序保留在内存中并在后台运行。锁定设备后,我可以继续浏览它所提供的网页,只要我不要单独离开一分钟。一旦我做了,它完全停止响应。

我通过包含CPU部分唤醒锁来升级我的尝试,这没有任何区别。然后我添加了一个完整的WifiLock来保持收音机,最后,绝望地,一个MulticastLock(我想也许它会让收音机监听连接)。但是,在大约一分钟没有建立任何连接之后,即使有所有这些锁定,设备也会停止响应。

我能做些什么来保持设备监听传入连接吗?似乎用定期请求命中设备让它保持清醒...我能以某种方式以编程方式模拟这种行为吗?我想不出办法。

谢谢!

编辑:出于这个问题的目的,可以忽略电池消耗。

编辑:NanoHTTPD也作为一种服务运行。

1 个答案:

答案 0 :(得分:2)

您需要以下内容:

  • 前台服务
  • Wifi lock
  • 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();