後でトリガーされるようにAlarmManagerに渡すために、追加のメッセージをインテントに入れようとしています。私のonReceiveは正しくトリガーされますが、extras.getString()はnullを返します
セットアップ:
public PendingIntent getPendingIntent(int uniqueRequestCode, String extra) {
Intent intent = new Intent(this, ActionReceiver.class);
intent.putExtra("EXTRA", extra);
PendingIntent pendingIntent = PendingIntent.getBroadcast(this, uniqueRequestCode,
intent, 0);
return pendingIntent;
}
public void setSilentLater(TimeRule timeRule) {
boolean[] weekdays = timeRule.getReoccurringWeekdays();
int dayOfWeek = 0;
for (boolean day : weekdays) {
dayOfWeek++;
if (day == true) {
Calendar cal = Calendar.getInstance();
AlarmManager alarmManager = (AlarmManager) this
.getSystemService(Context.ALARM_SERVICE);
cal.set(Calendar.DAY_OF_WEEK, dayOfWeek);
cal.set(Calendar.HOUR_OF_DAY,
timeRule.getStartTime().get(Calendar.HOUR_OF_DAY));
cal.set(Calendar.MINUTE,
timeRule.getStartTime().get(Calendar.MINUTE));
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MILLISECOND, 0);
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP,
cal.getTimeInMillis(), 3600000 * 7, getPendingIntent(0, "RINGER_OFF"));
}
}
}
これがトリガーされると、メッセージは空になります。
public class ActionReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Bundle extras = intent.getExtras();
String message = extras.getString("EXTRA"); //empty
if(message == "RINGER_OFF")
{
AudioManager am = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
am.setRingerMode(AudioManager.RINGER_MODE_SILENT);
}
else if(message == "RINGER_ON")
{
AudioManager am = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
am.setRingerMode(AudioManager.RINGER_MODE_NORMAL);
}
}
}
UPDATE:Vincent Hiribarrenのソリューションをご覧ください
古い回答...Hareshのコードは完全な答えではありません... Bundleを使用し、Bundleなしで試しましたが、どちらの場合でもnullになりましたエキストラから文字列を取得しようとしています!!
コードの正確な問題は、PendingIntentにあります!
これは、余分なものを渡そうとしている場合は間違っています:
PendingIntent pendingIntent = PendingIntent.getBroadcast(this, uniqueRequestCode, intent, 0);
なぜなら 0
フラグは頭痛の原因になります
これが正しい方法です-フラグを指定してください!
PendingIntent pendingIntent = PendingIntent.getBroadcast(this, uniqueRequestCode, intent, PendingIntent.FLAG_UPDATE_CURRENT);
Googleのサンプルコード アラームにエクストラを含めることを無視したため、これはおそらくこのような一般的な問題です。