Пользовательская дата не работает для установки AlarmManager и вызова BroadcastReceiver - PullRequest
0 голосов
/ 19 марта 2020

Я уже несколько дней пытаюсь решить эту проблему. Я разрабатываю приложение для школы, в которой я преподаю, чтобы помочь моим колледжам видеть время занятий с помощью уведомлений на своих телефонах. Я использую 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 () не работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...