繁体   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