2011-12-13 104 views
1

我是新来android和java编程,我有一个应用程序,触发多个闹钟,并重复他们每一天。它工作正常,但我的问题是,当我删除它继续发射第二天的警报。他们告诉我使用方法取消和我创造了这个功能:如下取消闹钟

public void deleteReminder(Long reminderId){ 
    Intent d = new Intent(mContext, Daily_OnAlarmReceiver.class); 
    d.putExtra(RemindersDbAdapter.KEY_ROWID_DAILY, (long)reminderId); 

    int Daily_requestCode = reminderId.intValue(); 


    PendingIntent pid = PendingIntent.getBroadcast(mContext, Daily_requestCode, d, PendingIntent.FLAG_CANCEL_CURRENT); 

    mAlarmManager.cancel(pid); 
} 

我的设置提醒功能:

public void setReminder(Long reminderId, Calendar when) { 

     Intent i = new Intent(mContext, Daily_OnAlarmReceiver.class); 
     i.putExtra(RemindersDbAdapter.KEY_ROWID_DAILY, (long)reminderId); 
     int Daily_requestCode = reminderId.intValue(); 

     PendingIntent pi = PendingIntent.getBroadcast(mContext, Daily_requestCode, i, PendingIntent.FLAG_CANCEL_CURRENT); 
     mAlarmManager.setRepeating(AlarmManager.RTC_WAKEUP, when.getTimeInMillis(), AlarmManager.INTERVAL_DAY, pi); 
} 

两者都被放置在AlarmManager.java文件。

下面的代码是只从列表中删除报警另一个Java文件,但它不阻止系统发射报警:

public boolean onContextItemSelected(MenuItem item) { 
      switch(item.getItemId()) { 
      case R.id.menu_delete: 

      AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo(); 
       mDbHelper.deleteDailyReminder(info.id); 
       fillData(); 
       return true; 
     } 
      return super.onContextItemSelected(item); 
     } 

我的问题是如何在以前的代码中调用这个new Daily_ReminderManager(this).deleteReminder(mRowId);所以提醒将从列表中和警报管理器中删除。

,我想知道如果我的第一个代码是正确的

回答

0

为了取消报警通过filterEquals(..)定义Intents必须匹配。

这意味着intents动作,数据,类型,类和类别必须相同。在这个比较中不使用额外的数据。

+0

如何在我的情况下使用filterEquals? – zoza 2011-12-13 19:00:00