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



我开发了一个名为Multi Countdown Timer 的Android应用程序,我们可以一次启动多个计时器。该应用程序使用前台服务在后台运行,以便连续运行并覆盖Android打瞌睡模式

我已经在三星s6,A7,诺基亚3.1,LG Nexus 5x和一些模拟器上测试了我的应用程序。应用程序运行完美,计时器完成后唤醒。 但另一方面,每当我在华为设备上运行我的应用程序(EMUI 8 Android Oreo 8.0.0(时,结果一点也不令人满意。我面临的问题是,当计时器完成时,该应用程序没有唤醒屏幕,当我打开设备时计时器完成时,它会响起,但没有自动唤醒屏幕,因为它正在其他设备上工作。

我已经复制了这个应用程序多计时器秒表,这个应用程序即使在华为设备上也能正常工作。

这是我在清单.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(在华为设备上,我已经在PowerManager中将我的应用程序列入白名单后进行了测试,并且还启用了电池优化,但它也没有帮助。

2( 我已经在前台服务中使用了一些唤醒锁进行了测试,但仍然得到相同的行为。

3(使用带有setExactAndAllowWhileIdle的AndroidAlarmManager仍然没有唤醒设备。

4(使用Don'tKillMyApp解决方案在唤醒锁中使用LocationManager服务标签也没有帮助。

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

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

华为设备不支持前台服务和唤醒锁(保持后台运行( 要使手机始终在后台运行,方法非常简单。方法是:点击进入需要运行的软件→输入指定位置→直接点击首页退出→这样仍在运行的软件不会影响您运行其他软件。手机的配置越高,后台运行的软件就越多。

因为他们有自己的电池管理算法。由于华为的EMUI有非常严格的电池管理政策。因此,每当您运行前台服务时,它都会破坏它。

最新更新