android - 如何取消特定的警报?

标签 android alarmmanager

我在取消特定警报时遇到问题。我正在使用警报管理器 SET 方法设置多个警报。但我无法取消特定的警报。如果我取消,它正在取消之前设置的所有警报。我正在使用单个 ALARM MANAGER ID 来设置多个警报。

保存方法

private void saveState() 
{
    //  String date = mDateText.getText().toString();
    String title = mTitleText.getText().toString(); 
    String body = mBodyText.getText().toString();
    String sdate = sDateText.getText().toString();
    String stime = sTimeText.getText().toString();   
    String rdate = rDateText.getText().toString();   
    String rtime = rTimeText.getText().toString();   

    String appRemDate = ((Button)findViewById(R.id.enterdaterem)).getText().toString();
    String appRemTime = ((Button)findViewById(R.id.entertimerem)).getText().toString();


    Calendar cal = Calendar.getInstance(); 

    //setting date & month
    if(appRemDate.substring(0,2).endsWith("-" ) && appRemDate.substring(2,4).endsWith("-" ))
    { 

        cal.set(Calendar.YEAR, Integer.parseInt(appRemDate.substring(4,8)));
        cal.set(Calendar.MONTH, Integer.parseInt(appRemDate.substring(2,3)) -1);
        cal.set(Calendar.DATE, Integer.parseInt(appRemDate.substring(0,1))); 
    }
    else if( !appRemDate.substring(0,2).contains("-" ) && !appRemDate.substring(3,5).contains("-" ) )
    {  

        cal.set(Calendar.YEAR, Integer.parseInt(appRemDate.substring(6,10)));
        cal.set(Calendar.MONTH, Integer.parseInt(appRemDate.substring(3,5)) -1);
        cal.set(Calendar.DATE, Integer.parseInt(appRemDate.substring(0,2))); 
    }
    else if( appRemDate.substring(0,2).endsWith("-" ) && !appRemDate.substring(2,4).endsWith("-" ))
    {  
        cal.set(Calendar.YEAR, Integer.parseInt(appRemDate.substring(5,9)));
        cal.set(Calendar.MONTH, Integer.parseInt(appRemDate.substring(2,4)) -1);
        cal.set(Calendar.DATE, Integer.parseInt(appRemDate.substring(0,1))); 
    }
    else  
    {  
        cal.set(Calendar.YEAR, Integer.parseInt(appRemDate.substring(5,9)));
        cal.set(Calendar.MONTH, Integer.parseInt(appRemDate.substring(3,4)) -1);
        cal.set(Calendar.DATE, Integer.parseInt(appRemDate.substring(0,2))); 
    } 
    cal.set(Calendar.HOUR_OF_DAY, Integer.parseInt(appRemTime.substring(0, 2))); 

    cal.set(Calendar.MINUTE, Integer.parseInt(appRemTime.substring(3, 5)));

    cal.set(Calendar.SECOND, 0); 

    if (mRowId == null) 
    {
        long id = mDbHelper.createNote(  title, body, sdate, stime, rdate, rtime);
        invokeAlaram( cal.getTimeInMillis(), id );
        if (id > 0) 
        {
            mRowId = id;
        }
    } 
    else 
    { 
        long id = mDbHelper.updateNote(mRowId,  title, body, sdate, stime, rdate, rtime);
        invokeAlaram( cal.getTimeInMillis(),   id );
    }
}

调用报警方法

private void invokeAlaram(long invokeTime, long id )
{

    AlarmManager am = (AlarmManager)getSystemService(ALARM_SERVICE); 

    Intent i =  new Intent(this, MyAlarmServiceForAppointments.class);

    i.putExtra("rowId", String.valueOf(id));
    am.set(AlarmManager.RTC_WAKEUP, invokeTime,   PendingIntent.getService(this , (int) System.currentTimeMillis() ,i , 0));

} 

任何人都可以帮助我如何取消特定的警报。

最佳答案

当您将请求代码的系统毫秒时间传递给 getService() 时,就像这里一样

am.set(AlarmManager.RTC_WAKEUP, invokeTime,   PendingIntent.getService(this , (int) System.currentTimeMillis() ,i , 0));

您必须传递您的唯一编号,而不是使用系统时间,该编号被视为针对特定 Intent 的请求不同。

现在你必须保留所有基于此的请求代码你可以取消警报

注意:作为您传入PendingIntent的Intent对象,必须与您在设定时间定义的取消警报的定义相同

am.set(AlarmManager.RTC_WAKEUP, invokeTime,   PendingIntent.getService(this , 1 ,i , 0));

am.set(AlarmManager.RTC_WAKEUP, invokeTime,   PendingIntent.getService(this , 2 ,i , 0));

等等

现在取消

am.cancel(PendingIntent.getService(this , 2 ,i , 0));

关于android - 如何取消特定的警报?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7845091/

相关文章:

Android Studio (0.8.1) 无法使用 go to declaration/implementation

java - 如果我为前一天设置,为什么我的 alarmManager 会立即启动?

android - 使用 AlarmManager 更新应用程序小部件

android - 从 Intent 中获取额外信息(BaseAdapter => BroadcastReceiver)

android - 查看 Canvas 可见性问题

android - 如何在Android Studio中为dart函数自动生成header comments?

java android ,onclick按钮内的延迟包括gui更改

java - Android AutoCompleteTextView,如何将建议链接到xml?

java - Android AlarmManager 随机触发

java - 重启后第二天闹钟管理器不起作用