2017-10-12 4 views
0

Il y a un rappel d'alarme. Comment déclencher l'alarme plus d'une fois, et à chaque rappel? Un seul réveil fonctionne, le reste est écrasé.TaskReminer ne fonctionne qu'une seule alarme

code:

public class ReminderManager { 

private Context mContext; 
private AlarmManager mAlarmManager; 

public ReminderManager(Context context) { 
    mContext = context; 
    mAlarmManager = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE); 
} 

public void setReminder(Long taskId, Calendar when) { 

    if (when.getTimeInMillis() < System.currentTimeMillis()) { 
     return; 
    } 

    Intent i = new Intent(mContext, OnAlarmReceiver.class); 
    i.putExtra(DbAdapter.KEY_ROWID, (long)taskId); 
    PendingIntent pi = PendingIntent.getBroadcast(mContext, 0, i, PendingIntent.FLAG_ONE_SHOT); 
    mAlarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime(), pi); 
} 

} 

Je comprends que le problème est dans requestCode, mais je ne comprends pas comment le résoudre ..

Répondre

0
PendingIntent pi = PendingIntent.getBroadcast(mContext,{unique id}, i, PendingIntent.FLAG_ONE_SHOT); 

L'intention de chaque attente doit être fourni un identifiant unique créer un identifiant aléatoire et affecter cet identifiant comme identifiant unique à l'intention en attente. Dans le cas contraire l'intention dans l'attente sera écrasé

Pour identifiant unique de créer des nombres aléatoires

Random rand = new Random(); 
int n = rand.nextInt(); 

Ou utilisez id la base de données le cas échéant.

+0

Je comprends, mais comment puis-je le résoudre? –

+0

Créer un nombre aléatoire ... –

+0

Random rand = new Aléatoire(); int n = rand.nextInt(); –