web-dev-qa-db-fra.com

AlarmManager ne fonctionne pas

Je dois commencer l'activité AlarmReceiver après 10 secondes (par exemple). J'ai besoin qu'il soit activé sans exécuter l'application. Mais que l'application s'exécute ou non, la AlarmReceiver ne sera pas appelée. Aucune suggestion?

Intent intent = new Intent(this, AlarmReceiver.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 111, intent, 0);
AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);

//alarmManager.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() 
                                          //+ (10 * 1000), pendingIntent);
Toast.makeText(this, "Alarm set", Toast.LENGTH_LONG).show();
16
dinesh707
public class AlarmReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
          String message = "Hellooo, alrm worked ----";
          Toast.makeText(context, message, Toast.LENGTH_SHORT).show();
          Intent intent2 = new Intent(context, TripNotification.class); 
          intent2.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
          context.startActivity(intent2);
    }

    public void setAlarm(Context context){
        Log.d("Carbon","Alrm SET !!");

        // get a Calendar object with current time
         Calendar cal = Calendar.getInstance();
         // add 30 seconds to the calendar object
         cal.add(Calendar.SECOND, 30);
         Intent intent = new Intent(context, AlarmReceiver.class);
         PendingIntent sender = PendingIntent.getBroadcast(context, 192837, intent, PendingIntent.FLAG_UPDATE_CURRENT);

         // Get the AlarmManager service
         AlarmManager am = (AlarmManager) context.getSystemService(context.ALARM_SERVICE);
         am.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), sender);
    }
}

C'est le code final que j'ai réussi à faire fonctionner. Vous devez ajouter 

 <receiver  Android:process=":remote" Android:name="AlarmReceiver"></receiver>

juste au-dessus de la balise </application> dans le fichier manifeste.

Une alarme se déclenchera dans les 30 secondes suivant l'appel de la méthode SetAlarm().

31
dinesh707

Pour l'instant, il n'est pas possible de démarrer Alarm sans exécuter l'application. Vous devez exécuter votre application respective pour activer votre alarme. Pour cela .... !!

Dans votre ALARM_ACTIVITY:  

AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);

Intent intent = new Intent(ALARM_ACTIVITY.this,ALARM_RECEIVER.class); 

PendingIntent pendingIntent = PendingIntent.getBroadcast(SetReminder.this, ID, intent, PendingIntent.FLAG_UPDATE_CURRENT);

alarmManager.set(AlarmManager.RTC_WAKEUP, System.currentTimeInMillis() + 1000, pendingIntent);

Dans votre ALARME_RECEIVER :

NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);

PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);

notification = new Notification(R.drawable.alarmicon, "charSequence", System.currentTimeMillis());

notification.setLatestEventInfo(context, "alarmTitle", "charSequence", pendingIntent);

notification.flags |= Notification.FLAG_AUTO_CANCEL;

notificationManager.notify(1, notification);
6
Prat

Et si cela ne fonctionne toujours pas, supprimer la partie Android:process=":remote" peut aider. Travaillé pour moi :)

3
kellogs

Tant que votre application a exécuté une seule fois pour établir l'alarme avec AlarmManager, elle déclenche votre intention même si votre application n'est pas en cours d'exécution. L'exception est après le redémarrage d'un périphérique. Pour déclencher une alarme au redémarrage du périphérique , implémentez une BroadcastReceiver pour régler l’alarme et ajoutez le destinataire à votre manifeste pour ACTION_BOOT_COMPLETED:

<receiver Android:name=".SampleBootReceiver"
        Android:enabled="false">
    <intent-filter>
        <action Android:name="Android.intent.action.BOOT_COMPLETED"></action>
    </intent-filter>
</receiver>
0
Edward Brey