首次杀死应用后,Android AlarmManager不会触发,否则

时间:2020-06-12 19:05:15

标签: android kotlin broadcastreceiver android-notifications alarmmanager

我遇到了与AlarmManager有关的问题,可以将其复制如下: 1.安装并打开该应用程序。 2.以10分钟内设置一个闹钟为例。 3.在预计会触发警报之前终止应用程序。

警报通知将不会在预期的时间显示。在以下情况下,不会出现此问题,并且警报将正常触发: 答:我不会杀死该应用程序并将其保持打开状态或在后台运行,或者 B:杀死该应用程序后,请在10分钟内重新打开同一应用程序。然后,无论我将应用保持打开状态还是再次杀死它,闹钟都会在10分钟标记处正常触发。

我的BootReceiver也发生了同样的事情,即,为了使警报出现,我要么必须在设备重新引导时将应用程序置于后台,要么必须在重新引导之前再次杀死该应用程序。 / p>

我的代码基于Google CodeLabs。

清单

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<application
        <receiver
            android:name=".receiver.AlarmReceiver"
            android:enabled="true">
        </receiver>
        <receiver
            android:name=".receiver.SnoozeReceiver"
            android:enabled="true">
        </receiver>

MyApplication.kt

override fun onCreate() {
        super.onCreate()

        createChannel(applicationContext,
            getString(R.string.notification_channel_id),
            getString(R.string.notification_channel_name)
        )
}

AlarmReceiver

class AlarmReceiver : BroadcastReceiver() {

    @Inject
    lateinit var notificationManager: NotificationManager

    @Inject
    lateinit var repository: MyRepository

    override fun onReceive(context: Context, intent: Intent) {
        AndroidInjection.inject(this, context)

        notificationManager.sendNotification(
            intent.extras!!,
            context,
            repository
        )

    }

}

NotificationUtils.kt

fun NotificationManager.sendNotification(
    bundle: Bundle,
    applicationContext: Context,
    repository: MyRepository
) {
/*setup notification content and layout*/
notify(id, builder.build())
}

fun createChannel(applicationContext: Context, channelId: String, channelName: String) {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
        val notificationChannel = NotificationChannel(
            channelId,
            channelName,
            NotificationManager.IMPORTANCE_HIGH
        )
            .apply {
                setShowBadge(false)
            }

        notificationChannel.enableLights(true)
        notificationChannel.lightColor = Color.RED
        notificationChannel.enableVibration(false)
        notificationChannel.description = applicationContext.getString(R.string.notification_channel_description)

        val notificationManager = applicationContext.getSystemService(
            NotificationManager::class.java
        )

        notificationManager?.createNotificationChannel(notificationChannel)
    }
}

我在AVD API 29和30上对此进行了测试,并看到了相同的问题。我还通过在应用打开后立即发出警报进行了测试,这可能表明通知通道运行正常。我非常感谢您的帮助。

0 个答案:

没有答案