进入睡眠模式后禁用Wifi(空闲)

时间:2018-04-13 15:48:19

标签: audio-streaming android-wifi wifimanager powermanager android-wireless

我正在构建一个音频流应用,用户应该能够在设备锁定时收听他们的歌曲(与任何其他音乐应用一样)。

有些用户报告了在WIFI上播放10到15分钟后停止播放的问题。在所有情况下,设备都已手动锁定或进入睡眠模式。我能够在运行Android 8.1的Pixel 2和运行8.0的模拟器上重现此问题。一些使用诺基亚运行8.1和LG运行7.0的用户也遇到了同样的问题。使用移动网络(4g)收听时不会发生此问题。

重现此问题的步骤如下。 - 开始播放歌曲; - 将应用程序置于后台; - 锁定设备并等待播放停止;

调试应用程序我可以看到我收到" java.net.SocketTimeoutException:无法从/ [本地IP]连接到[地址] / [IP](端口80) (港口38149)" 。我假设在设备进入睡眠模式后由于某种原因断开了wifi(但仍然启用),并且在播放每个曲目之前我无法执行我需要的HTTP请求。 HTTP请求由MediaPlayer完成侦听器触发,并在不同的线程上运行。我没有使用JobScheduler或AlarmManager。

所有内容都在前台服务上运行,该服务向用户显示持久通知(媒体控件)。

我还在创建服务时设置Wifi锁定和唤醒锁定。在播放每首曲目之前还要检查是否正在按住锁定以确保。

    WifiManager wifiManager = ((WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE));
    if (wifiManager != null) {
        wifiLock = wifiManager.createWifiLock(WifiManager.WIFI_MODE_FULL_HIGH_PERF, "myapp.com.wifilock");
        wifiLock.acquire();
    }

    PowerManager powerManager = ((PowerManager) getSystemService(Context.POWER_SERVICE));
    if (powerManager != null) {
        wakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "myapp.com.wake_lock");

        wakeLock.acquire();
    }

我也尝试设置MediaPlayer唤醒模式,但没有任何改变。

mediaPlayer.setWakeMode(getApplicationContext(), PowerManager.PARTIAL_WAKE_LOCK)

我能够通过使用ADB在模拟器上重现这一点。

$ adb shell dumpsys battery unplug
$ adb shell dumpsys deviceidle step

也用过" dumpsys"检查WIFI状态

$ adb shell dumpsys wifi

Wi-Fi is enabled
Stay-awake conditions: 1
mInIdleMode true
mScanPending false
WifiController:
 total records=11
 rec[0]: time=04-13 14:00:54.690 processed=ApStaDisabledState org=ApStaDisabledState dest=<null> what=155656(0x26008)
 rec[1]: time=04-13 14:00:55.198 processed=ApStaDisabledState org=ApStaDisabledState dest=<null> what=155659(0x2600b)
 rec[2]: time=04-13 14:00:55.198 processed=ApStaDisabledState org=ApStaDisabledState dest=DeviceActiveState what=155656(0x26008)
 rec[3]: time=04-13 14:00:57.520 processed=DefaultState org=DeviceActiveState dest=<null> what=155652(0x26004)
 rec[4]: time=04-13 14:00:57.558 processed=DefaultState org=DeviceActiveState dest=<null> what=155652(0x26004)
 rec[5]: time=04-13 14:00:51.045 processed=DeviceActiveState org=DeviceActiveState dest=<null> what=155660(0x2600c)
 rec[6]: time=04-13 14:01:02.743 processed=DeviceActiveState org=DeviceActiveState dest=<null> what=155660(0x2600c)
 rec[7]: time=04-13 14:01:44.845 processed=DefaultState org=DeviceActiveState dest=<null> what=155654(0x26006)
 rec[8]: time=04-13 14:03:03.801 processed=DefaultState org=DeviceActiveState dest=<null> what=155652(0x26004)
 rec[9]: time=04-13 14:03:16.009 processed=DefaultState org=DeviceActiveState dest=<null> what=155650(0x26002)
 rec[10]: time=04-13 14:03:16.029 processed=DefaultState org=DeviceActiveState dest=<null> what=155651(0x26003)
curState=DeviceActiveState
mScreenOff true
mDeviceIdle false
mPluggedType 0
mIdleMillis 900000
mSleepPolicy 2
mPersistWifiState 1
mAirplaneModeOn false
mNotificationEnabled true
mNotificationRepeatTime 0
mNotificationShown false
mNumScansSinceNetworkStateChange 0
mEnableTrafficStatsPoll false
mTrafficStatsPollToken 10
mTxPkts 5031
mRxPkts 10191
mDataActivity 0

Locks held:
Locks acquired: 0 full, 1 full high perf, 0 scan
Locks released: 0 full, 0 full high perf, 0 scan

Locks held:
    WifiLock{myapp.com.wifilock type=3 uid=10100}

mMulticastEnabled 1
mMulticastDisabled 1
Multicast Locks held:

正如我们所看到的,Wifi Lock仍处于活动状态。我还确认唤醒锁也是活跃的。 &#34; mSleepPolicy 2&#34;如果我没有错,即使设备进入睡眠模式,也应该保持Wifi活着。

我不想在电池优化面板上将应用列入白名单。我可以看到其他流媒体应用程序(如Spotify)已经过优化,在设备锁定时没有问题流。

我错过了什么吗?

0 个答案:

没有答案
相关问题