我开发了一个名为MultiCountdown Timer的Android应用程序,在这个应用程序中,我们可以同时启动多个计时器。该应用程序在后台运行,使用前台服务,以便连续运行,并覆盖Android的打瞌睡模式。
这是我在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)
这是我在创建中的警报活动
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)
4)使用Don't KillmyApp解决方案在Wake Lock中使用LocationManagerService标签也无济于事。
华为的EMUI有着相当严格的电池管理政策。除了电池管理方面的权限外,后台还有一个单独的白名单,由EMUI管理。
请参阅我在那里的回答;https://stackoverflow.com/A/61364065/5245066
它是用一个简单的前台服务实现的。 最近几个月,我在华为设备上随机收到用户报告的服务停止错误。首先,我认为这是某种罕见的/新的碰撞在较新的机器人上,但没有任何错误日志在织物上。 我在一台新的华为设备上尝试了它,让我最惊讶的是,这种现象确实存在。华为设备(带有EMUI)确实在几分钟后杀死了前台服务。 我知道https://dontkillmyapp.com/,这是一个很好的网站来获取关于这个问题的信息
当前的解决方案可以工作多年,这要归功于使设备保持清醒。 Android6.0+中的打瞌睡模式情况复杂,但事实并非如此。 在华为设备上可能是不同类型的优化。 正如我在start上写的,除了新的华为,在所有其他设备上,这样的系统可以正确工作多年。 编辑:注意:在一位用户评论后(已删除?),华为电池管理器中的“白名单”应用程序(标记为“受保护应用程序”)对此问题没有影响。
我正在尝试将GCM用于IOS和Android客户端。当应用程序位于前台时,它似乎可以与IOS配合使用,但是,当应用程序位于后台时,通知中心不会收到消息,并且不会调用带有completionHandler的DidReceiveEmotentification。 我发现一个问题是从GCM到APN的消息格式错误。也就是说,它看起来就是这样: {“aps”:{“内容可用”:1},“数据id”:345} 顺
现在启动此服务的代码如下所示 不幸的是,日志语句没有包含在我的两个用户使用的版本中,但间接证据非常令人信服,即满足了进行startForegroundService()调用的适当条件。对于大多数用户来说,这很好,但对于这两个用户,请求的服务从未启动。没有引发异常,系统日志报告 W ActivityManager:不允许后台启动:service Intent{act=net.anei.cadpage
这个问题可能看起来很宽泛,但我会尽量简短地总结一下。 如何在ANDROID o中处理后台服务? 如何在华为设备上关闭电池优化 如何在华为设备上关闭电池优化 华为EMUI 4.0+上的电池优化(wakelocks) 当应用程序在华为设备上消失时,服务被扼杀 Oreo(8.1)无法在锁定屏幕上启动活动