Android PendingIntent.getBroadcastメソッドでintentデータが更新されない問題
1865 ワード
プロジェクトの詳細問題:複数の異なるアラームを設定したが、アラームの内容は常に同じであり、最後のテストではintent値が割り当てられているが、なぜPendingIntentなのか分からないことが分かった.getBroadcast(ScheduleView.this, 0, intent, 0);のintent値が負けたのは昔の...getBroadcast()関数の問題を推測します. Serviceで設定タイミング放送のコード
理由:多くの資料を見たのはPendingIntontのためです.getBroadcast(Context context,int requestCode,Intent intent,int flags)の2番目と4番目のパラメータが原因です.
解決:
2番目のパラメータを自己増加変数に設定し、毎回異なることを保証し、4番目のパラメータをタイムリーに更新するように設定します.この2つのパラメータを設定してこそ役に立ちます.データは変わらないし、更新しても始まらないし、データが変わっても、更新しなくても始まらない.
private AlarmManager alarmManager;
private Calendar calendar;
private Intent intent;
private PendingIntent pendingIntent;
private int alarmCount = 0;
public void setAlarm(String todo, int code) {
alarmManager = (AlarmManager) context.getSystemService(ALARM_SERVICE);
calendar = Calendar.getInstance();
calendar.set(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH), calendar.get(Calendar.HOUR_OF_DAY), calendar.get(Calendar.MINUTE), calendar.get(Calendar.SECOND));
intent = new Intent("android.intent.action.alarm");
intent.putExtra("todo", todo);
intent.putExtra("remindTypeCode", code);
Log.d(TAG, "setAlarm: " + intent.getStringExtra("todo") + intent.getIntExtra("remindTypeCode", 0));
calendar.set(year, (month-1), day, hour, minute, 0);
pendingIntent = PendingIntent.getBroadcast(context, 0, intent, 0);
alarmManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pendingIntent);
}
理由:多くの資料を見たのはPendingIntontのためです.getBroadcast(Context context,int requestCode,Intent intent,int flags)の2番目と4番目のパラメータが原因です.
解決:
int alarmCount=0;
PendingIntent pi = PendingIntent.getBroadcast(ScheduleView.this,alarmCount++, intent,PendingIntent.FLAG_UPDATE_CURRENT); // PendingIntent
2番目のパラメータを自己増加変数に設定し、毎回異なることを保証し、4番目のパラメータをタイムリーに更新するように設定します.この2つのパラメータを設定してこそ役に立ちます.データは変わらないし、更新しても始まらないし、データが変わっても、更新しなくても始まらない.