android - 前台服务和唤醒锁在华为设备上不起作用
问题描述
我开发了一个名为 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 有非常严格的电池管理政策。因此,每当您运行前台服务时,它都会破坏它。
推荐阅读
- java - 如何在被要求时仅读取一次 Android Sensor 数据
- java - 使用 LMAX Disruptor 的单个和多个消费者之间几乎没有性能提升/如何正确解码许多 UDP 数据包
- linux - 使用 find 查找具有特定模式而不是其他模式的文件
- r - 美人鱼流程图不呈现“更长的箭头”
- swift - 如何访问 struct Codable, Identifiable 中的数组?
- python - 为什么 valueError 预期 min_ndim=3,发现 ndim=2。收到的完整形状:(无,29907),Conv1D 关于 fasta 序列分类的困惑?
- excel - Visual Basic For Applications: Odd Error '-2147417848 (80010108)' en tiempo de ejecución: Error en el método 'Range' de objeto '_Worksheet'
- react-native - React Native - UseState 返回初始值
- android - kotlin 返回类型为 null?.let{}
- gradle - 如何设置 gradle 以首选从 init.gradle 到 build.gradle 的存储库?