#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»