在从日期选择器和时间戳选择所需的日期和时间后,我尝试创建3个通知。我想为所选值发送最近3天的通知。但在3次通知后,我想取消通知流程。我从我的活动中设置了待处理通知和警报管理器,如
TimePickerDialog.OnTimeSetListener mTimeSetListener = new TimePickerDialog.OnTimeSetListener() {
public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
//last 3 days add notification
Calendar calendar = Calendar.getInstance();
calendar.set(year, month, day, hourOfDay, minute, 0);
long when = calendar.getTimeInMillis();
when = when -3*(24*60*60*1000)+3000; //set startup time 3 days before
GetTime(when);
long diff = when - Calendar.getInstance().getTimeInMillis();
while (diff < 0){
when+= (24*60*60*1000); //increment 24h if selected time is closer then 3 days
diff = when - Calendar.getInstance().getTimeInMillis();
GetTime(when);
}
if (diff >0) {
Intent notifyIntent = new Intent(getApplicationContext() ,NotificationReceiver.class);
notifyIntent.putExtra("ctg", categorySelected);
PendingIntent pendingIntent = PendingIntent.getBroadcast(getApplicationContext(), new Utils().getIdForCategory(categorySelected), notifyIntent, PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, when, 60*1000, pendingIntent); //setting for testing purposes for 60 seconds
}
}
};
我的接收器类是:
protected void onHandleIntent(Intent intent) {
String categorySelected = intent.getStringExtra("ctg");
SharedPreference pref = new SharedPreference(getApplicationContext());
int alarmCount = pref.getAlarmCount(categorySelected);
if (alarmCount<=3){
Log.d("alarmCount", String.valueOf(alarmCount));
pref.saveAlarmCount(categorySelected,alarmCount+1);
showNotification(intent);
}
else //we reached the 3 times
{
new Utils().clearAllPendingIntent(getApplicationContext(),categorySelected);
}
}
和我明确的方法
public void clearAllPendingIntent(Context context, String categorySelected){
AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
Intent notifyIntent = new Intent(context ,NotificationReceiver.class);
notifyIntent.putExtra("ctg",categorySelected);
PendingIntent pendingUpdateIntent = PendingIntent.getBroadcast(context, new Utils().getIdForCategory(categorySelected), notifyIntent, PendingIntent.FLAG_CANCEL_CURRENT);
SharedPreference pref = new SharedPreference(context);
pref.saveAlarmCount(categorySelected,1);
// Cancel alarms
try {
alarmManager.cancel(pendingUpdateIntent);
} catch (Exception e) {
}
}
我的问题是,待处理的意图在3次后没有被取消,这意味着我每分钟都会收到通知。我做错了什么?
答案 0 :(得分:0)
实际问题在于我的new Utils().getIdForCategory(categorySelected)
函数,该函数应根据类别返回特定值。
public int getIdForCategory(String category){
if (category.equals("A")) return 1; //before it was category=="A"
if (category.equals("B")) return 2;
if (category.equals("C")) return 3;
if (category.equals("D")) return 4;
if (category.equals("E")) return 5;
return 0;
}