AlarmManager setExact con WakefulBroadcastReceiver a veces no es exacto
Uso de Android 19+
SetExact en conjunto con WakefulBroadcastReceiver a veces no se dispara a tiempo (puede ser unos segundos o tan tarde). Me refiero a la mayoría de las veces que lo hace. Probablemente 49 veces de 50 su correcto.
- AlarmManager no funciona en varios dispositivos
- ¿Cómo comprobar si AlarmManager ya tiene un conjunto de alarmas?
- ¿Cuán inexacto es setInexactRepeating () para AlarmManager?
- Cómo reiniciar la alarma si la aplicación se cierra forzada en android
- Confiabilidad del Administrador de alarmas
No estoy seguro de si es sólo porque el sistema está ocupado en el momento y no puede manejar la carga de trabajo o lo que
Aquí es cómo puse la alarma:
AlarmManager alarmMgr = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE); Intent intent = new Intent(AlarmReceiver.INTENT_FILTER); PendingIntent alarmIntent = PendingIntent.getBroadcast(context, MyApplication.ALARM_REQUEST_CODE, intent, PendingIntent.FLAG_UPDATE_CURRENT); alarmMgr.setExact(AlarmManager.RTC_WAKEUP, timeToWakeUp, alarmIntent);
Aquí está mi código de receptor:
public class AlarmReceiver extends WakefulBroadcastReceiver { public static final String INTENT_FILTER = "myfilter"; @Override public void onReceive(Context context, Intent intent) { Intent service = new Intent(context, MyWakefulService.class); startWakefulService(context, service); } }
Y en el WakefulService
public class MyWakefulService extends IntentService { .... @Override protected void onHandleIntent(Intent intent) { ....
- Llamada de red en tiempos de espera de alarma
- Administrador de alarmas activado inmediatamente
- Android alarmmanager no es muy confiable
- Cómo configurar múltiples alarmas usando el administrador de alarmas de android
- ¿Cuál es la definición de dormido para un dispositivo Android?
- Android AlarmManager setRepeating no se repite con un intervalo largo
- Android: ¿Cómo comprobar el correo electrónico en un momento específico con AlarmManager?
- ¿Qué sucede cuando inicio una alarma dos veces?
Este comportamiento se agrega en API 19:
Comenzando con la entrega de alarmas API 19 (KITKAT) es inexacta: el sistema operativo cambiará las alarmas para minimizar los despertares y el uso de la batería. Existen nuevas API para admitir aplicaciones que requieren garantías de entrega estrictas; Vea setWindow (int, long, long, PendingIntent) y setExact (int, long, PendingIntent) . Las aplicaciones cuyo targetSdkVersion es anterior a la API 19 seguirán viendo el comportamiento anterior en el que todas las alarmas se entregan exactamente cuando se solicitan.
Desde AlarmManager .
Importante : setExact()
todavía no tiene que ser exacto, como el estado de documentos:
La alarma se entregará lo más posible al tiempo de activación solicitado.
Para la era de la melcocha (?), Necesitamos algunos códigos feos como abajo …: (Y "delayInMillis" parámetro debe ser más de 15 minutos en la API 23. Si no, el sistema ignora los minutos menos de 15 minutos.
private void registerExactAlarm(PendingIntent sender, long delayInMillis) { final int SDK_INT = Build.VERSION.SDK_INT; AlarmManager am = (AlarmManager) mContext.getSystemService(Context.ALARM_SERVICE); long timeInMillis = (System.currentTimeMillis() + delayInMillis) / 1000 * 1000; //> example if (SDK_INT < Build.VERSION_CODES.KITKAT) { am.set(AlarmManager.RTC_WAKEUP, timeInMillis, sender); } else if (Build.VERSION_CODES.KITKAT <= SDK_INT && SDK_INT < Build.VERSION_CODES.M) { am.setExact(AlarmManager.RTC_WAKEUP, timeInMillis, sender); } else if (SDK_INT >= Build.VERSION_CODES.M) { am.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, timeInMillis, sender); } }
- Android: ListView con botones -> OnItemClick no hacer nada
- Usar layout_gravity = "bottom" para colocar en la parte inferior de LinearLayout