В моей базе данных Firebase Realtime я хочу каждый день сбрасывать определенное значение в 23:59.
Это код, который у меня есть в моем MainActivity:
val dailyCal: Calendar = Calendar.getInstance()
dailyCal[Calendar.HOUR_OF_DAY] = 23
dailyCal[Calendar.MINUTE] = 59
dailyCal[Calendar.SECOND] = 59
dailyCal[Calendar.MILLISECOND] = 0
val dailyIntent: PendingIntent = PendingIntent.getBroadcast(
this@MainActivity,
0,
Intent(this, DailyBroadcastReceiver::class.java),
PendingIntent.FLAG_UPDATE_CURRENT
)
val dailyAm: AlarmManager = this.getSystemService(ALARM_SERVICE) as AlarmManager
dailyAm.setInexactRepeating(
AlarmManager.RTC,
dailyCal.timeInMillis,
AlarmManager.INTERVAL_DAY,
dailyIntent
)
Это то, что у меня есть в моей функции onReceive в моем DailyBroadcastReceiver для сброса значения:
if (intent.action != Intent.ACTION_BOOT_COMPLETED) {
val userInfo = database.getReference("users").child(auth.currentUser!!.uid).child("daily")
userInfo.setValue(0)
}
Пока это работает, если пользователь находится в приложении или если телефон пользователя включен, и он все еще подключен к Интернету, несмотря на то, что не находится в самом приложении.
Как мне заставить мое приложение сбросить определенное значение в моей базе данных Firebase Realtime, если пользователь не подключен к Интернету или даже если его устройство не включено?
Невозможно надежно использовать мобильное устройство пользователя для планирования работы по указанной вами причине. На самом деле устройство может быть выключено, или у него может отсутствовать подключение к Интернету, или пользователь может даже использовать несколько устройств, каждое из которых конфликтует друг с другом для этой ночной работы.
Вместо этого вы должны выполнять работу на бэкэнде, который вы контролируете. Относительно легко запланировать и выполнять некоторый код на периодической основе, используя запланированные функции, поэтому вам следует рассмотреть возможность их использования.
Смотрите также: