BroadCast 接收器遇到了专门针对 SDK 33 的问题。
你好,
我使用了 [AlarmManager] 中的指南来在特定时间建立每日通知。但是,我在 SDK 33 上遇到了问题。警报似乎没有触发我配置的广播接收器。我该如何解决这个问题?我们将非常感谢您的帮助。
我理解您对 AlarmManager 和 BroadcastReceiver 在 Android 13 (SDK 33) 上无法工作感到沮丧。由于此版本中引入了更严格的背景限制,这可能会很棘手。但是,您可以采取一些步骤来排除故障并解决问题:
确保您的 BroadcastReceiver 在 AndroidManifest.xml 文件中正确声明,并具有 ALARM_TRIGGER 操作的相关意图过滤器。
仔细检查是否已将 BroadcastReceiver 的 android:exported 属性设置为 true。对于在 SDK 33 及更高版本上接收来自应用程序外部的广播,这是必需的。
确保您的应用程序具有所需的权限,例如 RECEIVE_BOOT_COMPLETED 和 WAKE_LOCK 来在后台安排和运行警报。 考虑将动态权限请求与 ActivityResultLauncher API 一起使用,以实现更好的用户控制和透明度。
确保用于启动 BroadcastReceiver 的 PendingIntent 具有适当的标志,例如 Android 13 要求的 FLAG_IMMUTABLE 或 FLAG_MUTABLE。 尝试不同的标志组合,看看它是否会影响警报触发(例如 FLAG_UPDATE_CURRENT 或 FLAG_CANCEL_CURRENT)。
Android 建议在 Android 13 及更高版本上使用 WorkManager 或计划作业来执行重复任务,而不是 AlarmManager。 这些 API 提供更好的后台执行控制,并且对设备优化更具弹性。
使用 Logcat 监视和调试 AlarmManager 和 BroadcastReceiver 的执行情况。 在不同的设备和 Android 版本上彻底测试您的应用程序,以确认该问题特定于 SDK 33。 其他资源:
Android AlarmManager 文档:https://developer.android.com/reference/android/app/AlarmManager
WorkManager 文档:https://developer.android.com/topic/libraries/architecture/workmanager
计划作业文档:https://developer.android.com/reference/android/app/job/JobScheduler