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

bob*_*bob 5 android android-networking android-wake-lock nanohttpd

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

我的一个目标是让设备即使在屏幕关闭的情况下也允许传入连接。

我开始时很小,有一个持久的通知,认为这将使我的应用程序保持在内存中并在后台运行。锁定设备后,我可以继续浏览它所提供的网页,只要我不让它待一分钟。一旦我这样做,它就完全停止响应。

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

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

谢谢!

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

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

Chr*_*ris 4

您需要以下内容:

  • 前台服务
  • 无线锁
  • 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();
Run Code Online (Sandbox Code Playgroud)