web-dev-qa-db-fra.com

Alarm Manager persiste-t-il même après le redémarrage?

Je suis vraiment nouveau sur Android, j'ai fait des recherches sur les alarmes. Je veux alarmer s'il y a un anniversaire ce jour-là. J'ai utilisé le gestionnaire d'alarmes. J'étais confus parce que j'ai lu qu'il s'efface après le redémarrage. Je n'ai pas de téléphone Android Android donc j'utilise juste l'émulateur.

Voici mon code:

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);
}

J'ai fait ce BroadcastRecever en remplacement d'AlarmSerivce ici:

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);
 }

est-ce assez??

46
Xelamae

Une réponse simple serait NON . Mais oui, vous pouvez y parvenir en créant un BroadCastReceiver qui lancera l'alarme pendant le démarrage de l'appareil.

Utilisation <action Android:name="Android.intent.action.BOOT_COMPLETED" /> pour intercepter l'activité de démarrage dans la classe BroadCastReceiver.

Vous devez ajouter la ligne ci-dessus dans AndroidManifest.xml comme suit,

<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>
84
Lucifer

Oui, vous pouvez faire fonctionner AlarmManager même après le redémarrage. C'est peut-être le moyen le plus simple: ajoutez le code ci-dessous dans votre 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>

n'oubliez pas d'inclure la permission de l'utilisateur dans AndroidManifest.xml comme:

<uses-permission Android:name="Android.permission.RECEIVE_BOOT_COMPLETED"/>
5
Mohan Munisifreddy

dans certains téléphones en ajoutant seulement

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

ne fonctionne pas, vous devez également ajouter

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

avec le précédent

1
Romy Gomes