Cómo comprobar si la alarma se ha configurado y se está ejecutando

Tengo un receptor que comienza después del cargador del teléfono como esto:

<receiver android:name=".OnBootReceiver" > <intent-filter> <action android:name="android.intent.action.BOOT_COMPLETED" /> </intent-filter> </receiver> 

en el receptor que ejecuto establecer una alarma como esta:

 AlarmManager mgr=(AlarmManager)context.getSystemService(Context.ALARM_SERVICE); Intent i=new Intent(context, LocationPoller.class); i.putExtra(LocationPoller.EXTRA_INTENT, new Intent(context, LocationReceiver.class)); i.putExtra(LocationPoller.EXTRA_PROVIDER, LocationManager.GPS_PROVIDER); PendingIntent pi=PendingIntent.getBroadcast(context, 0, i, 0); mgr.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime(), PERIOD, pi); 

Funciona bien, excepto, por supuesto, cuando la aplicación de instalación de usuario, la alarma no se establecerá hasta que el usuario reinicie el teléfono ,.

para ir alrededor de esto, necesito comprobar de mi actividad si AlarmManager se fija, si no necesito fijar de la actividad.

Por lo tanto, ¿cómo puedo comprobar si el administrador de alarmas ya está configurado.

Lamentablemente, no puedes consultar AlarmManager para alarmas actuales.

La mejor opción para resolver su problema sería cancelar su Alarma actual y establecer una nueva.

Sólo tienes que crear una intención que coincida con la del receptor. Más información aquí

añada esto a su actividad

  AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); Intent i=new Intent(context, LocationPoller.class); i.putExtra(LocationPoller.EXTRA_INTENT, new Intent(context, LocationReceiver.class)); i.putExtra(LocationPoller.EXTRA_PROVIDER, LocationManager.GPS_PROVIDER); PendingIntent pi=PendingIntent.getBroadcast(context, 0, i, 0); // Cancel alarms try { AlarmManager.cancel(pi); } catch (Exception e) { Log.e(TAG, "AlarmManager update was not canceled. " + e.toString()); } mgr.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime(), PERIOD, pi); 

Es probable que necesite cambiar el contexto de la intención por lo que es la misma que la del receptor.

Otra solución sería detectar si es el primer inicio de la aplicación, y sólo iniciarlo entonces. Pero entonces, ¿qué sucede si el usuario reinicia su teléfono antes del primer inicio?

Lo único que puedes hacer es cuando el usuario instale la aplicación y SharedPreference la primera vez que puedas establecer una bandera en SharedPreference que te diga si la Alarma está configurada o no si no está configurada la Alaram.

en su control de Activity principal en el método onCreate

 SharedPreferences spref = getSharedPreferences("TAG", MODE_PRIVATE); Boolean alaram_set = spref.getBoolean("alarm_set_flag", false); //default is false if(!alaram_set){ //create your alarm here then set the flag to true SharedPreferences.Editor editor = spref.edit(); editor.putBoolean("alarm_set_flag", true); // value to store editor.commit(); } 
FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.