Fuerza la aplicación de parada – también cancela las alarmas que había establecido?

Mi aplicación está configurando una alarma:

AlarmManager mgr = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE); mgr.setRepeating( AlarmManager.RTC_WAKEUP, firstRun, interval, makePendingIntent(context)); 

Funciona bien. Si entro en la configuración del sistema -> aplicaciones, y la fuerza de detener mi aplicación, parece que esto también tiene el efecto de cancelar las alarmas que había programado. ¿Es esto cierto? Si es así, estoy en una situación extraña en la que mis últimos ajustes conocidos son que el usuario de hecho había puesto la alarma, pero el sistema puede haber cancelado a mis espaldas, por lo que ahora estoy mostrando al usuario el estado equivocado en cuanto a Si la alarma está ajustada o no.

Gracias

Sí, es verdad. Todo lo que puedes hacer, hasta donde yo sé, es hacer que tu estado sea correcto. Para comprobar si sus alarmas están todavía allí usted tiene que tomar dos pasos:

  1. Atempt para crear su PendingIntent con FLAG_NO_CREATE – la función checkPendingIntent será exactamente como makePendingIntent excepto para este flag en PendingIntent.getBroadcast y un cheque del resultado – si la alarma ha sido cancelada de una manera ordinaria (por sí mismo, por supuesto si usted llamó PendingIntent cancel() para su PendingIntent s) o si su aplicación se bloqueó sin Force Stop (es decir, con una excepción no PendingIntent.getBroadcast ), PendingIntent.getBroadcast devolverá null.
  2. Si el PendingIntent existe, su alarma puede estar configurada. Para comprobarlo tienes que descargar la información del sistema sobre todas las alarmas y buscar la tuya allí. Para volcar la información que tiene que llamar

     String collectAlarmsInfo() { StringBuilder result = new StringBuilder(); try { Process process = Runtime.getRuntime().exec("dumpsys alarm"); BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(process.getInputStream())); String line; while ((line = bufferedReader.readLine()) != null) { result.append(line); result.append("\n"); } } catch (IOException e) { Log.e(TAG, "Could not retrieve data", e); } return result.toString(); } 

    Para usar dumpsys necesitas tener permiso de usuario DUMP. Cuando tiene el volcado puede identificar alarmas en él por su nombre de paquete, por lo que el cheque será

     boolean alarmIsSet = collectAlarmsInfo().contains(<your package name>); 
FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.