在我的活動中,我設置了時間讓AlarmManager生成未來日期的通知,並將信息存儲在sqlite數據庫中。通過更改id來通知notificationManager來設置多個通知後,我在ListView中顯示信息。取消通知已經使用AlarmManager和BroadCast接收器設置
現在我想取消或刪除一些通知。例如,我爲1小時後的通知設置了時間,我想通過listview的longitemclick取消它,但會生成通知。
我看到了如何從通知欄取消通知但不適合我的情況。我想在通知生成之前取消通知。
我該如何做到這一點?
這裏是我打電話通知代碼:
custom = new CustomDateTimePicker(noticall.this,new CustomDateTimePicker.ICustomDateTimeListener() {
@Override
public void onCancel() {
finish();
}
@Override
public void onSet(Dialog dialog, Calendar calendarSelected,Date dateSelected, int year, String monthFullName,
String monthShortName, int monthNumber, int date,
String weekDayFullName, String weekDayShortName,
int hour24, int hour12, int min, int sec,
String AM_PM) {
Calendar calendar = Calendar.getInstance();
calendar.set(year, monthNumber, date, hour24, min, 0);
long when = calendar.getTimeInMillis(); // notification time
myIntent = new Intent(noticall.this, MyReceiver.class);
pendingIntent = PendingIntent.getBroadcast(noticall.this, 0, myIntent,0);
alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE);
alarmManager.set(AlarmManager.RTC, calendar.getTimeInMillis(), pendingIntent);
Date = calendarSelected.get(Calendar.DAY_OF_MONTH) + "/" + (monthNumber+1) + "/" +year;
Time = hour12 + ":" + min + " " + AM_PM;
setlisto(Date);
Intent intent = getIntent();
finish();
startActivity(intent);
Toast.makeText(noticall.this,"Record Added", Toast.LENGTH_SHORT).show();
}
});
MYRECIEVER類:
public class MyReceiver extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent)
{
/*Intent service1 = new Intent(context, MyAlarmService.class);
context.startService(service1);*/
Log.i("App", "called receiver method");
try{
Utils.generateNotification(context);
}catch(Exception e){
e.printStackTrace();
}
}
}
utils的類:
public class Utils {
//int k = noticall.in2;
static int i=0;
static long[] vibrate = { 1000, 1000, 1000, 1000, 1000 };
public static NotificationManager mManager;
@SuppressWarnings("static-access")
public static void generateNotification(Context context){
mManager = (NotificationManager) context.getSystemService(context.NOTIFICATION_SERVICE);
int j=i+=1;
Intent intent1 = new Intent(context,Sipdroid.class);
Notification notification = new Notification(R.drawable.yel1," NOTIFICATION!", System.currentTimeMillis());
notification.defaults |= Notification.DEFAULT_SOUND;
notification.defaults |= Notification.DEFAULT_VIBRATE;
notification.defaults |= Notification.DEFAULT_LIGHTS;
intent1.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP| Intent.FLAG_ACTIVITY_CLEAR_TOP);
PendingIntent pendingNotificationIntent = PendingIntent.getActivity(context,0, intent1,PendingIntent.FLAG_UPDATE_CURRENT);
notification.flags |= Notification.FLAG_AUTO_CANCEL;
notification.setLatestEventInfo(context, "xxxx", "xx "+noticall.Names, pendingNotificationIntent);
Log.i("increeeee", noticall.incre+"");
mManager.notify(j, notification); // for multiple notifications... change 0 to no of notification....
}
}
在我的這個活動,我想取消設置的通知:
this.getListView().setOnItemLongClickListener(new OnItemLongClickListener() {
public boolean onItemLongClick(AdapterView<?> parent, View v, int position, long id) {
Log.w("DELETED", " DELETED");
// code here to delete specific notification or pendingIntent or alarmmanager
}
});
我想這代碼,但它的工作對取消所有待處理的意圖取消我想取消特定pendingIntents:
public void unsetAlarm(View v) {
myIntent = new Intent(noticall.this, MyReceiver.class);
pendingIntent = PendingIntent.getBroadcast(noticall.this, 0, myIntent,0);
alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE);
alarmManager.cancel(pendingIntent);
Log.v("ahooooo", "cancelling notification");
}
如何取消特定的pendingIntents?
我可以保留我正在設置的待處理意圖的記錄,以後我可以取消只需要取消那些我想要的?有可能嗎?你能告訴我一個例子嗎? –