[英]Foreground Service and WakeLocks are not working on Huawei Devices
我開發了一個名為 Multi Countdown Timer 的 Android 應用程序,我們可以在其中一次啟動多個計時器。 該應用程序使用前台服務在后台運行,以便連續運行並覆蓋 Android打盹模式。
我已經在三星 s6、A7、諾基亞 3.1、LG Nexus 5x 和一些模擬器上測試了我的應用程序。 應用程序運行完美,定時器完成后喚醒。 但另一方面,每當我在華為設備(EMUI 8 Android Oreo 8.0.0)上運行我的應用程序時,結果都不盡如人意。 我面臨的問題是,當定時器完成時,應用程序沒有喚醒屏幕,當我打開設備時定時器完成時它會響鈴,但沒有在屏幕工作時自動喚醒屏幕其他設備。
我已經復制了這個應用程序多定時器秒表,這個應用程序即使在華為設備上也能正常工作。
這是我在 Manifest.xml 中的活動。
android:name=".view.alarm.AlarmActivity"
android:process="alarm.process"
android:screenOrientation="portrait"
android:showOnLockScreen="true"
android:showWhenLocked="true"
android:turnScreenOn="true"
android:theme="@style/splashScreenTheme" />
我就是這樣稱呼我的警報活動的。
val alarmIntent = Intent(this@CountDownTimerForegroundService, AlarmActivity::class.java)
alarmIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
alarmIntent.addFlags(Intent.FLAG_ACTIVITY_MULTIPLE_TASK)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
alarmIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_DOCUMENT)
}
alarmIntent.putExtra(ALARM_PASSING_ID, timerObj.id)
startActivity(alarmIntent)
這是我的警報活動 onCreate
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
window.addFlags(
WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED
or WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD
or WindowManager.LayoutParams.FLAG_FULLSCREEN
or WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED
or WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON
or WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON
or WindowManager.LayoutParams.FLAG_ALLOW_LOCK_WHILE_SCREEN_ON
)
setContentView(R.layout.activity_alarm)
任何幫助將不勝感激。 提前致謝。
更新:
1) 在華為設備上,我在 PowerManager 中將我的應用程序列入白名單並啟用了電池優化后進行了測試,但它也沒有幫助。
2) 我在前台服務中使用了一些喚醒鎖進行了測試,但仍然得到相同的行為。
3) 使用帶有 setExactAndAllowWhileIdle 的 Android AlarmManager仍然沒有喚醒設備。
4) 使用Don'tKillMyApp解決方案在 Wake Lock 中使用LocationManagerService Tag 也沒有幫助。
華為的EMUI有相當嚴格的電池管理政策。 除了電池管理中的權限外,后台還有一個單獨的白名單由EMUI管理。
請參考我在那里的回答; https://stackoverflow.com/a/61364065/5245066
華為設備不支持前台服務和wakelocks(保持后台運行)讓手機一直在后台運行,方法很簡單。方法是:點擊進入需要運行的軟件→進入指定位置→直接點擊home退出→這樣軟件還在運行不影響你對其他軟件的操作。 手機配置越高,后台運行的軟件就越多。
因為他們有自己的電池管理算法。 由於華為的EMUI有非常嚴格的電池管理政策。 因此,每當您運行前台服務時,它都會破壞它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.