AlarmManager запускается каждые 20 секунд вместо использования заданного интервала

#android #kotlin #alarmmanager #alarm

#Android #kotlin #alarmmanager #тревога

Вопрос:

Может кто-нибудь просветить меня и что я делаю не так? Я хочу запускать будильник каждые 15 минут. Вот пример.

 alarmManager?.let{
         if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M){
            alarmManager.setInexactRepeating(
                AlarmManager.RTC_WAKEUP,
                System.currentTimeMillis()   (15*1000*60), //This line works.
                AlarmManager.INTERVAL_FIFTEEN_MINUTES, //This interval does not work.
                pendingIntent
            )          
         }
     }
 

И это моя база данных, в которой вы увидите, что интервал составляет 20 секунд

введите описание изображения здесь

Комментарии:

1. Вы можете попробовать exact repeating вместо inexact . Кстати, вы вызывали его несколько раз?

2. Спасибо за ответ, но я уже выяснил, что проблема возникла из-за моей иерархии в коде.

Ответ №1:

Мой плохой, я узнал, в чем проблема, это мой широковещательный приемник

 override fun onReceive(context: Context, intent: Intent){
    try{
        locationManager = context.getSystemService(Context.LOCATION_SERVICE) as LocationManager?  
        var resend = true;    
        val locationListener: LocationListener = object : LocationListener {
        override fun onLocationChanged(location: Location) {
            val cal = Calendar.getInstance()
            val day = cal.get(Calendar.DAY_OF_WEEK)
            val editor = context.getSharedPreferences("MyPref", Context.MODE_PRIVATE).edit()
            editor.putString("Name", "${intent.getStringExtra("Name")}")
            editor.apply()
            //RUN ONLY ON WEEKDAYS
            if(day != 1 || day != 7){
                Log.d("ALARM MANAGER","RINGGGGGGGGGGGGGGGER")
                Log.d("EXTRA","${intent.getStringExtra("Name")}")
                Log.d("LATITUDE","${location.latitude}")
                Log.d("LONGITUDE","${location.longitude}")
                if(resend){
                    sendRequest(location.latitude, location.longitude, "${intent.getStringExtra("Name")}", context);  
                }
                resend = false
            }       
        }
        override fun onStatusChanged(provider: String, status: Int, extras: Bundle) {}
        override fun onProviderEnabled(provider: String) {}
        override fun onProviderDisabled(provider: String) {}
     }
        locationManager?.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 5000L, 0f, locationListener)
    }
    catch(e: Exception){
        Log.d("Exception","$e")
    }
}
 

Я добавил логическое значение, чтобы оно не вызывало мой api каждый «onLocationChanged»