J'ai une situation étrange avec AlarmManager. Je planifie un événement avec AlarmManager et transmets une chaîne en utilisant le paramètre intention.putExtra. La chaîne est soit silencieuse ou vibrante et lorsque le récepteur se déclenche, le téléphone doit soit tourner la sonnerie soit mettre le téléphone en mode vibreur. L'instruction de journal affiche correctement la valeur attendue à chaque fois.Intent.putExtras pas cohérent
Intent intent;
if (eventType.equals("start")) {
intent = new Intent(context, SReceiver.class);
} else {
intent = new Intent(context, EReceiver.class);
}
intent.setAction(eventType+Long.toString(newId));
Log.v("EditQT",ringerModeType.toUpperCase());
intent.putExtra("ringerModeType", ringerModeType.toUpperCase());
PendingIntent appIntent = PendingIntent.getBroadcast(context, 0,
intent, 0);
AlarmManager alarmManager = (AlarmManager) getSystemService (Context.ALARM_SERVICE);
alarmManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(),
appIntent);
Le récepteur qui se déclenche lorsque l'alarme exécute a également une déclaration de journal et je peux voir la première fois que l'instruction émet la chaîne attendue soit SILENT ou VIBRATE mais pour chaque exécution ultérieure, la sortie indique la valeur d'origine à la fin du récepteur. L'alarme s'exécute, puis je change la valeur de putExtra en chaîne opposée et le récepteur affiche toujours l'événement de valeur précédente bien que l'appel du code ci-dessus montre que la nouvelle valeur a été transmise. La valeur de setAction est la même à chaque fois.
audioManager = (AudioManager) context.getSystemService(Activity.AUDIO_SERVICE);
Log.v("Start",intent.getExtras().get("ringerModeType").toString());
if (intent.getExtras().get("ringerModeType").equals("SILENTMODE")) {
audioManager.setRingerMode(AudioManager.RINGER_MODE_SILENT);
} else {
audioManager.setRingerMode(AudioManager.RINGER_MODE_VIBRATE);
}
Des pensées?
Est-ce que cela veut dire que même si l'intention est survenue dans le passé, le système sait encore à ce sujet? – JDM
Cela semble fonctionner tant que le téléphone n'est pas éteint et redémarré. Si cela se produit et que l'intention est appelée à nouveau à l'aide de FLAG_UPDATE_CURRENT, l'événement n'est pas planifié. Existe-t-il un moyen de vérifier si l'intention existe dans son état actuel? – JDM
"Cela signifie-t-il que même si l'intention s'est produite dans le passé, le système est toujours au courant?" Oui, sauf si vous utilisez 'FLAG_ONE_SHOT'. "Y at-il un moyen de vérifier si l'intention existe dans son état actuel?" Non, mais essayez 'FLAG_CANCEL_CURRENT' ou' FLAG_ONE_SHOT' à la place, puis, selon la façon dont vous essayez d'utiliser 'PendingIntents'. – CommonsWare