【问题标题】:Keep Android awake for incoming network connections?保持 Android 唤醒以接收传入的网络连接?
【发布时间】:2015-12-03 07:17:23
【问题描述】:

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

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

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

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

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

谢谢!

编辑:就这个问题而言,可以忽略电池消耗。

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

【问题讨论】:

  • 监听传入连接是什么意思,是不是就像监听来电一样?我不太明白监听连接的目的
  • @AhmadAlsanie 我的意思是在大约 1 分钟不活动后,设备停止响应所有传入的网络连接,即使使用 wifilocks 和唤醒锁也是如此。网络如 wifi,而不是 LTE。监听连接的目的在于它是一个服务器,而这正是服务器所做的。
  • 你有没有想过这个问题?
  • 我现在知道了@Michael

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


【解决方案1】:

您需要以下内容:

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

不完整的sn-ps(例如缺少服务/放弃锁):

    // 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();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-06-16
    • 2019-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-09
    • 2010-12-21
    相关资源
    最近更新 更多