ACTION_SET_ALARM来自Android 10以上版本的服务

问题描述

我有一个具有闹钟功能的应用程序。 对于某些人来说,出于某种原因使用外部闹钟更为方便。因此,对于这类人,我可以选择“使用外部闹钟”。 我曾经在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服务用作常规服务。