Kotlin BroadcastReceiver Room DaoAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Kotlin BroadcastReceiver Room Dao

Сообщение Anonymous »

Я использую AlarmManager для отправки сигнала тревоги и BroadcastReceiver для получения этого сигнала тревоги.
Мое приложение также использует базу данных комнат с NotificationDao.
Мне нужно кое-что добавить с «upsertNotification» в базу данных при получении сигнала тревоги.
Как я могу это заархивировать?
BroadcastReceiver:
class AlarmReceiver : BroadcastReceiver() {
override fun onReceive(context: Context?, intent: Intent?) {
val message = intent?.getStringExtra("EXTRA_MESSAGE") ?: return
val notificationType =
NotificationType.fromValue(intent.getIntExtra("NOTIFICATION_TYPE", 0))

val notification = Notification(
id = null,
date = LocalDate.now(),
time = LocalTime.now(),
title = "Test Title Premium",
description = message,
unread = true,
notificationType = NotificationType.PremiumAdvertising.value
)

context?.let { DayReminderNotificationService(it) }?.showNotification(message)
}
}

NotificationDao:
@Dao
interface NotificationDao {
@Upsert
suspend fun upsertNotification(notification: Notification)

@Delete
suspend fun deleteNotification(notification: Notification)

@Query("SELECT * FROM notifications")
fun getAllNotifications(): Flow

@Query("SELECT * FROM notifications WHERE unread = 1")
fun getAllUnreadNotifications(): Flow
}

@Module
@InstallIn(SingletonComponent::class)
object CoreModule {
@Provides
@Singleton
fun provideNotificationDao(database: AppDatabase) = database.notificationDao()
}

AlarmScheduler:
class AndroidAlarmSchedulerImpl(
private val context: Context
) : AlarmScheduler {

private val alarmManager = context.getSystemService(AlarmManager::class.java)

override fun schedule(item: AlarmItem) {
val intent = Intent(context, AlarmReceiver::class.java).apply {
putExtra("EXTRA_MESSAGE", item.message)
putExtra("NOTIFICATION_TYPE", item.notificationType)
}
alarmManager.setRepeating(
AlarmManager.RTC_WAKEUP,
item.time.atZone(ZoneId.systemDefault()).toEpochSecond() * 1000,
60000,
PendingIntent.getBroadcast(
context,
item.hashCode(),
intent,
PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE
)

)
}

override fun cancel(item: AlarmItem) {
alarmManager.cancel(
PendingIntent.getBroadcast(
context,
item.hashCode(),
Intent(context, AlarmReceiver::class.java),
PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE
)
)
}
}


Подробнее здесь: https://stackoverflow.com/questions/792 ... r-room-dao
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»