#android #alarmmanager #android-alarms
#Android #alarmmanager #android-сигналы тревоги
Вопрос:
Я пытаюсь создать приложение для сигнализации, в котором я хочу показывать сигналы тревоги с помощью уведомления. Все работает нормально. Но когда я пытаюсь перезапустить / перезагрузить устройство на некоторых устройствах, таких как Samsung, я вижу, что после перезагрузки назначаются сигналы тревоги, но на таких устройствах, как Realme, Redmi, он не работает (сигналы тревоги не назначаются).
Мой вопрос: «Как я могу убедиться, что тревога запланирована на каждом устройстве?»
Вот код.
AndroidManifest.xml
<receiver
android:name=".BootCompletedReceiver"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
<action android:name="android.intent.action.LOCKED_BOOT_COMPLETED" />
<action android:name="android.intent.action.QUICKBOOT_POWERON" />
<action android:name="android.intent.action.REBOOT" />
</intent-filter>
</receiver>
<receiver android:name=".NotificationReceiver" />
Получатель уведомлений
class NotificationReceiver : BroadcastReceiver() {
override fun onReceive(context: Context?, p1: Intent?) {
val actionIntent = Intent(context, MainActivity::class.java)
val stackBuilder: TaskStackBuilder = TaskStackBuilder.create(context)
stackBuilder.addParentStack(MainActivity::class.java)
stackBuilder.addNextIntent(actionIntent)
val pendingIntent = stackBuilder.getPendingIntent(
System.currentTimeMillis().toInt(),
PendingIntent.FLAG_UPDATE_CURRENT
)
val notificationManager: NotificationManager =
context?.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
createNotificationChannel(notificationManager)
val builder = NotificationCompat.Builder(context, "notification_channel")
.setSmallIcon(R.drawable.ic_launcher_foreground)
.setContentTitle("Title")
.setAutoCancel(true)
.setContentIntent(pendingIntent)
.setContentText("Notification Message")
.setPriority(NotificationCompat.PRIORITY_HIGH)
.setAutoCancel(true)
val notification = builder.build()
notificationManager.notify(1421, notification)
}
/**
* Creates the notification channel.
*/
private fun createNotificationChannel(notificationManager: NotificationManager) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
val channel = NotificationChannel(
"notification_channel",
"Sample App",
NotificationManager.IMPORTANCE_HIGH
)
notificationManager.createNotificationChannel(channel)
}
}
}
BootCompletedReceiver
class BootCompletedReceiver : BroadcastReceiver() {
override fun onReceive(context: Context?, p1: Intent?) {
val intent = Intent(context, NotificationReceiver::class.java)
val pendingIntent = PendingIntent.getBroadcast(
context,
0,
intent,
PendingIntent.FLAG_UPDATE_CURRENT
)
val alarmService = context?.getSystemService(Context.ALARM_SERVICE) as AlarmManager
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
alarmService.setExactAndAllowWhileIdle(
AlarmManager.RTC_WAKEUP,
System.currentTimeMillis() (300 * 1000),
pendingIntent
)
} else {
alarmService.setExact(
AlarmManager.RTC_WAKEUP,
System.currentTimeMillis() (300 * 1000),
pendingIntent
)
}
}
}
Это всего лишь пример кода, который выдает уведомление через каждые 5 минут после открытия приложения или при загрузке устройства отправляет уведомление через 5 минут.
Пожалуйста, помогите с чем-то таким, чтобы тревога была запланирована для каждого устройства.
Комментарии:
1. Это не сработает, так как есть так много вещей, которые могут убить ваше приложение в фоновом режиме. Это поможет вам понять dontkillmyapp.com/problem