簡體   English   中英

前台服務和 WakeLocks 不適用於華為設備

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM