2012-08-20 25 views
36

Soy realmente nuevo en Android, he estado investigando sobre alarmas. Quiero alarmar si hay un cumpleaños en ese día. He usado el administrador de alarmas Estaba confundido porque he leído que se borra después de reiniciar. No tengo un teléfono Android, así que solo estoy usando el emulador.¿persiste Alarm Manager incluso después de reiniciar?

Aquí está mi código:

public void schedAlarm() { 
    AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE); 
    Intent intent = new Intent(this, AlarmService.class); 
    pendingIntent = PendingIntent.getBroadcast(this, contact.id, intent, PendingIntent.FLAG_ONE_SHOT); 
    am.setRepeating(AlarmManager.RTC, timetoAlarm, nextalarm, pendingIntent); 
} 

Hice este BroadcastRecever en sustitución de AlarmSerivce aquí:

public void onReceive(Context context, Intent intent) { 
    nm = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); 
    CharSequence from = "It Birthday!"; 
    CharSequence message =" Greet your friend."; 
    PendingIntent contentIntent = PendingIntent.getActivity(context, 0, new Intent(), 0); 
    Notification notif = new Notification(R.drawable.ic_launcher, "Birthday", System.currentTimeMillis()); 
    notif.setLatestEventInfo(context, from, message, contentIntent); 
    nm.notify(1, notif); 
} 

es esto suficiente ??

+0

@Lucifer ayude por favor a mí para mi problema, su misma :) http://stackoverflow.com/questions/33374293/my-alarmmanager-only-one-day-start-when -the-device-restart –

+0

también me enfrenté al mismo problema, por favor ayúdenme stackoverflow.com/questions/41197416/alarmmanager-not-working-after-phone-reboot –

Respuesta

70

Una respuesta simple sería NO. Pero sí puede lograrlo creando un BroadCastReceiver que iniciará la alarma mientras se inicia el arranque del dispositivo.

Uso <action android:name="android.intent.action.BOOT_COMPLETED" /> para atrapar la actividad de arranque en la clase BroadcastReceiver.

Es necesario añadir por encima de la línea de AndroidManifest.xml de la siguiente manera,

<receiver android:name=".AutoStartUp" android:enabled="true" android:exported="false" android:permission="android.permission.RECEIVE_BOOT_COMPLETED"> 
    <intent-filter> 
     <action android:name="android.intent.action.BOOT_COMPLETED" /> 
    </intent-filter> 
    </receiver> 
+1

¿Puedo simplemente cambiar AlarmService en un BroadCastRecever? – Xelamae

+0

No conozco el código de su archivo AlarmService, así que no puedo decir 'sí', pero le sugiero que cree uno nuevo, de modo que si algo sale mal, tiene al menos su trabajo anterior listo :) – Lucifer

+0

Publiqué el receptor. – Xelamae

1

Sí, se puede hacer AlarmManager para trabajar incluso después de reiniciar. Quizás esta es la manera más fácil: añadir el código de abajo en su AndroidManifest.xml:

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

      <category android:name="android.intent.category.DEFAULT" /> 
     </intent-filter> 
    </receiver> 

no se olvide de incluir el usuario permiso para la AndroidManifest.xml como:

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/> 
0

de alguna Los teléfonos sólo se suma

<action android:name="android.intent.action.Boot_COMPLETED" /> 

no trabajar también hay que añadir

<action android:name="android.intent.action.QUICKBOOT_POWERON" /> 

junto con anterior

Cuestiones relacionadas