fix: 息屏后MQTT断连导致无法收到通知
添加前台服务+WakeLock保活MQTT连接,请求电池优化白名单绕过Doze限制, AlarmManager每5分钟健康检查断连自动重连。 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -1,7 +1,12 @@
|
||||
package com.xiaoqu.watch.app
|
||||
|
||||
import android.content.Intent
|
||||
import android.content.pm.ActivityInfo
|
||||
import android.net.Uri
|
||||
import android.os.Build
|
||||
import android.os.Bundle
|
||||
import android.os.PowerManager
|
||||
import android.provider.Settings
|
||||
import android.view.MotionEvent
|
||||
import android.view.View
|
||||
import androidx.activity.OnBackPressedCallback
|
||||
@@ -92,6 +97,9 @@ class MainActivity : AppCompatActivity() {
|
||||
// 监听 MQTT type=1 → 处理通知 + 显示横幅
|
||||
observeMqttMessages()
|
||||
|
||||
// 请求电池优化白名单(绕过 Doze 模式限制)
|
||||
requestBatteryWhitelist()
|
||||
|
||||
Timber.d("MainActivity created")
|
||||
}
|
||||
|
||||
@@ -211,6 +219,31 @@ class MainActivity : AppCompatActivity() {
|
||||
}
|
||||
}
|
||||
|
||||
// ===== 电池优化白名单 =====
|
||||
|
||||
/**
|
||||
* 请求加入电池优化白名单(Doze 模式下允许后台网络访问)
|
||||
* 已在白名单中则跳过,避免重复弹窗
|
||||
*/
|
||||
private fun requestBatteryWhitelist() {
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
|
||||
val pm = getSystemService(PowerManager::class.java)
|
||||
if (!pm.isIgnoringBatteryOptimizations(packageName)) {
|
||||
try {
|
||||
val intent = Intent(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS).apply {
|
||||
data = Uri.parse("package:$packageName")
|
||||
}
|
||||
startActivity(intent)
|
||||
Timber.d("电池白名单: 已请求")
|
||||
} catch (e: Exception) {
|
||||
Timber.w(e, "电池白名单: 请求失败")
|
||||
}
|
||||
} else {
|
||||
Timber.d("电池白名单: 已在白名单中")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// ===== OTA 更新 =====
|
||||
|
||||
/** 设置更新弹窗按钮回调 */
|
||||
|
||||
Reference in New Issue
Block a user