Я уже несколько дней пытаюсь решить эту проблему. Я разрабатываю приложение для школы, в которой я преподаю, чтобы помочь моим колледжам видеть время занятий с помощью уведомлений на своих телефонах. Я использую AlarmManager для установки определенного c будильника для каждого класса. Но сигнал тревоги не вызывает BroadcastReceiver вообще. Если использовать Calendar.getinstance (). Time, он вызывает трансляцию, но пользовательское календарное время не работает. Что может быть? заранее спасибо. PS: если есть какая-то проблема в моем посте, пожалуйста, сообщите мне, чтобы я поступил правильно.
Вот класс, который реализует сигнал тревоги.
object AlarmUtil{
private const val SEMANA: Long = 7 * 24 * 60 * 60 * 1000
@SuppressLint("NewApi")
fun setAlarmAula(context: Context, aula: Aula, intent: Intent)
{
val intent = Intent(context, HorarioBroadcast::class.java)
val pendingIntent = PendingIntent.getBroadcast(context, 0, intent ,0)
val alarme = context.getSystemService(Context.ALARM_SERVICE) as AlarmManager
val calendar = Calendar.getInstance(Locale.getDefault())
calendar.timeInMillis = System.currentTimeMillis()
when(aula.dia)
{
"monday" -> {
calendar.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY)
}
"tuesday" -> {
calendar.set(Calendar.DAY_OF_WEEK, Calendar.TUESDAY)
}
"wednesday" -> {
calendar.set(Calendar.DAY_OF_WEEK, Calendar.WEDNESDAY)
}
"thursday" -> {
calendar.set(Calendar.DAY_OF_WEEK, Calendar.THURSDAY)
}
"friday" -> {
calendar.set(Calendar.DAY_OF_WEEK, Calendar.FRIDAY)
}
}
val formater = SimpleDateFormat("hh:mm:ss")
val horaAula = formater.parse(aula.horario)
//custom this hour to exemplify
calendar.set(Calendar.HOUR_OF_DAY, 5)
calendar.set(Calendar.MINUTE, 56)
calendar.set(Calendar.SECOND, 0)
val setAlarm = calendar.timeInMillis
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O)
{
alarme.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, setAlarm, pendingIntent)}
else
{
alarme.setExact(AlarmManager.RTC_WAKEUP, setAlarm, pendingIntent)}
}}
Вот класс, который реализует трансляция
class HorarioBroadcast : BroadcastReceiver() {
companion object
{
val ACTION = "com.rzdev.horariocpv.util.HorarioBroadcast"
}
@SuppressLint("NewApi")
override fun onReceive(context: Context?, intent: Intent?) {
val intent = Intent(context, HorarioBroadcast::class.java)
val pendingIntent = PendingIntent.getBroadcast(context, 0, intent, 0)
val alarme = context!!.getSystemService(Context.ALARM_SERVICE) as AlarmManager
val calendar = Calendar.getInstance()
//adding to minutes just to exemplify
calendar.add(Calendar.MINUTE, 2)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O)
{
Log.i("teste", "Buil version O")
alarme.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, calendar.timeInMillis, pendingIntent)
}
else
{
Log.i("teste", "Buil version less than O")
alarme.setExact(AlarmManager.RTC_WAKEUP, calendar.timeInMillis, pendingIntent)
}
}}
Я уже попробовал все методы из AlarmManager. И мне нужно, чтобы будильник был точным, поэтому setRepeat () не работает.