Служба переднего плана и WakeLocks не работают на устройствах Huawei

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

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

Я скопировал это приложение секундомер с несколькими таймерами и это приложение отлично работает даже на устройствах Huawei.

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

2) Я протестировал несколько Wake Locks в своей службе переднего плана, но все еще получаю такое же поведение.

3) При использовании Android AlarmManager с setExactAndAllowWhileIdle устройство все еще не выводилось из спящего режима.

4) Использовалось решение Don'tKillMyApp для использования тега LocationManagerService в Wake Lock. т помочь.


person Muhammad Farhan    schedule 13.01.2020    source источник


Ответы (3)


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

Пожалуйста, обратитесь к моему ответу там; https://stackoverflow.com/a/61364065/5245066

person captaink    schedule 26.04.2020

Оборудование Huawei не поддерживает службу переднего плана и wakelocks (продолжайте работу в фоновом режиме) Чтобы мобильный телефон постоянно работал в фоновом режиме, метод очень прост. Метод: нажмите, чтобы ввести программное обеспечение, которое необходимо запустить → введите в указанном месте → нажмите кнопку «Домой», чтобы выйти →, чтобы работающее программное обеспечение не влияло на работу другого программного обеспечения. Чем выше конфигурация мобильного телефона, тем больше программ может работать в фоновом режиме.

person Mary    schedule 26.05.2020

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

person Basavaraj    schedule 10.07.2020