我在取消特定警报时遇到问题。我正在使用警报管理器 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/