问题描述
我有一个具有闹钟功能的应用程序。 对于某些人来说,出于某种原因使用外部闹钟更为方便。因此,对于这类人,我可以选择“使用外部闹钟”。 我曾经在Android 10之前从ACTION_SET_ALARM的服务开始,就像这样:
...
val intent = Intent(AlarmClock.ACTION_SET_ALARM).apply {
putExtra(AlarmClock.EXTRA_MESSAGE,message)
putExtra(AlarmClock.EXTRA_HOUR,calendar.hourOfDay)
putExtra(AlarmClock.EXTRA_MINUTES,calendar.minute)
putExtra(AlarmClock.EXTRA_SKIP_UI,true)
putExtra(AlarmClock.EXTRA_VIBRATE,appPreferences.alarmVibration)
ringtone?.let {
putExtra(AlarmClock.EXTRA_ringtone,it)
}
flags = Intent.FLAG_ACTIVITY_NEW_TASK
}
if (intent.resolveActivity(appContext.packageManager) != null) {
appContext.startActivity(intent)
...
自Android 10起,存在一些限制:https://developer.android.com/guide/components/activities/background-starts
因此,我无法再开始启用外部警报的活动,这很烦人。
有人知道如何解决这个问题吗?
就目前而言,我正在考虑要求用户授予SYstem_ALERT_WINDOW权限,但这似乎是一种错误的方式。无论如何,由于Android Go的限制,它不能解决所有问题。
解决方法
对于android 9及更高版本,您可以使用android JobService以外的其他服务,因为它们针对设备和用户进行了更优化,或者您可以将Foreground服务用作常规服务。