Android PendingIntent.getBroadcastメソッドでintentデータが更新されない問題

1865 ワード

プロジェクトの詳細問題:複数の異なるアラームを設定したが、アラームの内容は常に同じであり、最後のテストではintent値が割り当てられているが、なぜPendingIntentなのか分からないことが分かった.getBroadcast(ScheduleView.this, 0, intent, 0);のintent値が負けたのは昔の...getBroadcast()関数の問題を推測します.
  • Serviceで設定タイミング放送のコード
  • 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つのパラメータを設定してこそ役に立ちます.データは変わらないし、更新しても始まらないし、データが変わっても、更新しなくても始まらない.