前景服务和唤醒锁在华为设备上不起作用

问题描述 投票:2回答:1

我开发了一个名为Multi Countdown Timer的Android应用,在其中我们可以一次启动多个计时器。该应用程序使用Foreground Service在后台运行,以便连续运行并覆盖Android的Doze Mode

我已经在Samsung s6,A7,Nokia 3.1,LG Nexus 5x和某些仿真器上测试了我的App。该应用程序运行完美,计时器结束后会唤醒。但是另一方面,每当我在Huawei Devices(EMUI 8 Android Oreo 8.0.0)上运行我的App时,结果根本不令人满意。我面临的问题是,当计时器完成时,应用程序没有唤醒屏幕;当打开设备时,计时器完成后,它响了,但是在工作时并没有自动唤醒屏幕其他设备。

我已经复制了此应用程序Multi Timer StopWatch,即使在华为设备上,该应用程序也能正常工作。

这是我在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)使用过的Android AlarmManager与setExactAndAllowWhileIdle仍然没有唤醒设备。

4)使用Don'tKillMyApp解决方案来使用Wake Lock中的LocationManagerService标签也没有帮助。

android foreground-service huawei wakeup android-doze
1个回答
0
投票

华为的EMUI具有相当严格的电池管理政​​策。除了“电池管理”中的权限外,后台还有一个由EMUI管理的单独白名单。

请参考我在那里的回答; https://stackoverflow.com/a/61364065/5245066

© www.soinside.com 2019 - 2024. All rights reserved.