Foreground Service и WakeLocks не работают на устройствах Huawei - PullRequest
2 голосов
/ 13 января 2020

Я разработал приложение Android под названием Multi Countdown Timer, в котором мы можем запускать несколько таймеров одновременно. Приложение работает в фоновом режиме, используя Foreground Service для непрерывной работы и отмены режима Android Doze .

. Я протестировал свое приложение на Samsung s6, A7, Nokia 3.1, LG Nexus 5x и некоторые эмуляторы. Приложения работают отлично и просыпаются, когда таймер закончил. Но, с другой стороны, всякий раз, когда я запускаю свое приложение на Huawei Devices (EMUI 8 Android Oreo 8.0.0), результат вообще не является удовлетворительным. Проблема, с которой я сталкиваюсь, заключается в том, что приложение не запускает экран, когда таймер завершен, и когда таймер заканчивается, когда я открываю свое устройство, он звонит, но не запускает функцию автоматического включения экрана, когда он работает. другие устройства.

Я реплицировал это приложение Мульти-таймер StopWatch , и это приложение работает нормально даже на устройствах Huawei.

Это моя активность в манифесте. 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)

И это моя активность по тревоге при создании

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) На устройстве Huawei я провел тестирование после внесения в белый список моего приложения в PowerManager, а также включил функцию оптимизации аккумулятора, но также не помогите.

2) Я проверил некоторые блокировки пробуждения в службе Foreground, но все еще получаю то же поведение.

3) Использовал Android AlarmManager с setExactAndAllowWhileIdle устройство еще не проснулось.

4) Использовано Don'tKillMyApp Решение использовать LocationManagerService Тег в Wake Lock также не помог.

1 Ответ

0 голосов
/ 26 апреля 2020

EMUI Huawei имеет довольно строгие политики управления батареями. Помимо разрешений в управлении батареями, на заднем плане есть отдельный белый список, управляемый EMUI.

Пожалуйста, обратитесь к моему ответу там; { ссылка }

...