rea*_*ser 5 android android-alarms
我可以使用下面的代码创建和取消警报.我想创建多个警报.闹钟时间来自arraylist.在这个arraylist我想为每个日期创建一个警报.按下取消按钮将仅取消当前警报.我该怎么做?
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
setOneTimeAlarm();
buttonCancel.setOnClickListener(new Button.OnClickListener() {
@Override
public void onClick(View arg0) {
AlarmManager alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE);
alarmManager.cancel(pendingIntent);
// Tell the user about what we did.
Toast.makeText(MainActivity.this, "Cancel!", Toast.LENGTH_LONG).show();
}
});
}
private void setOneTimeAlarm() {
Intent intent = new Intent(this, AReceiver.class);
pendingIntent = PendingIntent.getBroadcast(this, 0, intent, PendingIntent.FLAG_ONE_SHOT);
alarmManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pendingIntent);
}
Run Code Online (Sandbox Code Playgroud)
我将发布一个示例,其中包含我在我创建的应用程序之一中执行此操作的方法。
调用警报时,您需要发送一个额外的 id,如下所示: Tmp 是一个具有唯一 ID 的对象。
Intent intent = new Intent(DisplayActivity.this,AlarmReciever.class);
intent.setData(Uri.parse("timer:"+tmp.getId()));
PendingIntent pendingIntent = PendingIntent.getBroadcast(DisplayActivity.this,1, intent, 0);
AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);
am.set(AlarmManager.RTC_WAKEUP,calendar.getTimeInMillis(),pendingIntent);
Run Code Online (Sandbox Code Playgroud)
然后用这一行检索 id:
Long.parseLong(intent.getData().getSchemeSpecificPart())
Run Code Online (Sandbox Code Playgroud)
取消时,只需使用 ID 创建相同的挂起意图并调用 Alarmmanager.cancel()
编辑:
要取消用户单击的项目上的特定警报(这是 tmp.getId 派上用场的地方),我刚刚使用了这段代码,我认为您需要创建相同的pendingIntent才能取消特定警报。
Intent intent = new Intent(DisplayActivity.this,AlarmReciever.class);
intent.setData(Uri.parse("timer:"+tmp.getId()));
PendingIntent pendingIntent = PendingIntent.getBroadcast(DisplayActivity.this,1, intent, 0);
AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);
am.cancel(pendingIntent);
Run Code Online (Sandbox Code Playgroud)
AlarmReciever 是我的广播接收器。DisplayActivity 是活动本身。
在 AlarmReciever 中我有以下代码:
Long.parseLong(intent.getData().getSchemeSpecificPart())
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2458 次 |
| 最近记录: |