Я работаю над приложением для устройства Oreo 8.1, которое постоянно проверяет базу данных MS SQL, используя набор Alarm Manager, повторяющийся с RT C Wakeup. Приблизительно после 5 минут сна Wi-Fi отключается, предотвращая соединение. Я не вижу опции в ОС для установки Wi-Fi на «всегда» во время сна.
Я уже добавил wakelock:
class AlertMgr2 : BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent?) {
val powerManager = context.getSystemService(Context.POWER_SERVICE) as PowerManager
val wakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "app:wakelock")
wakeLock.acquire(1000)
displayAlert(context)
wakeLock.release()
}
Я попытался добавить блокировку Wi-Fi:
private fun wifiLock(context: Context) {
Timber.d("Setting up Wifi Lock")
val wifiManager = context.getSystemService(Context.WIFI_SERVICE) as WifiManager
wifiLock = wifiManager.createWifiLock(WifiManager.WIFI_MODE_FULL_HIGH_PERF, "MyWifiLock")
if (!wifiLock.isHeld){
wifiLock.acquire()
}
}
Политика никогда не спит устарела:
private fun setNeverSleepPolicy(context: Context) {
val cr: ContentResolver = context.getContentResolver()
val set = Settings.System.WIFI_SLEEP_POLICY_NEVER
Settings.System.putInt(cr, Settings.System.WIFI_SLEEP_POLICY, set)
}
У меня уже есть менеджер аварийных сигналов, установленный на RT C:
am.setRepeating(
AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), (ConfigData.checkMsg * 1000).toLong(), pi
)
Я даже настроил блокировку Wi-Fi на детектор сна:
object SleepDetector {
private var broadcastReceiver: BroadcastReceiver? = null
private lateinit var wifiLock: WifiManager.WifiLock
var sleeping: Boolean = false
var saver: Boolean = false
fun register(context: Context) {
val intentFilter = IntentFilter()
intentFilter.addAction(Intent.ACTION_SCREEN_ON)
intentFilter.addAction(Intent.ACTION_SCREEN_OFF)
broadcastReceiver = object : BroadcastReceiver() {
override fun onReceive(context: Context?, intent: Intent) {
if (intent.action == Intent.ACTION_SCREEN_ON) {
Timber.d("Screen On Detected")
sleeping = false
wifiUnlock()
}
if (intent.action == Intent.ACTION_SCREEN_OFF) {
Timber.d("Screen Off Detected")
sleeping = true
wifiLock(context!!)
}
}
}
context.applicationContext.registerReceiver(broadcastReceiver, intentFilter)
}
Есть ли что-то еще, что я можно попробовать ??