如何创建多个警报?

时间:2011-07-08 07:02:08

标签: 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);
}

2 个答案:

答案 0 :(得分:3)

我将以我在其中一个应用创建的方式发布一个示例。

调用闹钟时,您需要发送一个额外的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);

然后用这一行检索id:

Long.parseLong(intent.getData().getSchemeSpecificPart())

取消时只需使用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);

AlarmReciever是我的BroadcastReceiver。 DisplayActivity是活动本身。

它在AlarmReciever中我有以下代码:

Long.parseLong(intent.getData().getSchemeSpecificPart())

答案 1 :(得分:1)

这是关于David如何获得唯一身份证的回复的继续。

唯一ID可以来自SQLITE表。在创建用于存储提醒日期和时间的表时,请使用带有AUTOINCREMENT的_ID列。插入行时,此列将自动获取一个数字和唯一数字。该表还将帮助您存储提醒,以防设备关闭并且您想再次重新创建提醒。在设备关闭时,我认为警报会丢失。

CREATE TABLE IF NOT EXISTS reminder_datetime
_ID INTEGER PRIMARY KEY AUTOINCREMENT,
NOTIF_DATETIME INTEGER;

要使用表格设置和获取日期,请使用日历对象:

Calendar cal = Calendar.getInstance();

然后你可以使用cal.setTime或cal.setTimeInMillis函数。 同样,获取函数来获取日期。

如果要将日期格式化为可读日期,请使用日期格式:

myDate = android.text.format.DateFormat.format("MM/dd/yyyy", cal.getTimeInMillis()).toString();