是否可以获得特定警报的时间?

时间:2019-07-26 03:33:52

标签: android broadcastreceiver alarmmanager android-pendingintent

我正在为Android设计一个事件计划器(用于学习),希望每个事件都有自己的提醒。我已经启用了警报,并且警报已成功触发,并且知道如何检查警报是否存在,但是我无法找到如何获取每个警报的时间。

我设法使用以下方法确定警报是否存在:

    Intent i = new Intent(getApplicationContext(), NotificationReceiver.class);
    pIntent = PendingIntent.getBroadcast(getApplicationContext(), (int) id, i, PendingIntent.FLAG_NO_CREATE);

我已经尝试使用

    AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);
    Calendar test = Calendar.getInstance();
    test.setTimeInMillis(am.getNextAlarmClock().getTriggerTime());
    Log.d(TAG, "getReminder: TRIGGER: " + test.getTime());

但是测试时在那里显示的时间甚至与我的任何闹钟都不匹配。同样,这也无法让我确定警报属于哪个事件。

这是我创建提醒的地方。

public void makeReminder(String event, long reminder){
    Log.d(TAG, "makeReminder: Started");

    Intent i = new Intent (getApplicationContext(), NotificationReceiver.class);
    i.putExtra("id", event); // eventID
    i.putExtra("reminder", reminder); // reminderKey
    i.putExtra("reminderTime", reminderCal.getTimeInMillis()); // actual time for the reminder
    i.putExtra("message", "You have an upcoming event on " + dateTimeFormat.format(startCal.getTime()));
    i.putExtra("name", eventName);
    i.putExtra("channel", "event");

    PendingIntent nIntent = (PendingIntent) PendingIntent.getBroadcast(
            getApplicationContext(),
            (int)reminder, i,
            PendingIntent.FLAG_CANCEL_CURRENT
    );

    AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
    alarmManager.setExact(AlarmManager.RTC_WAKEUP, reminderCal.getTimeInMillis(), nIntent);

    Log.d(TAG, "makeReminder: reminder set for " + reminderCal.getTime());
    Log.d(TAG, "makeReminder: reminderID: " + reminder);

}

我不确定如何继续获取时间,但是我希望有可能通过hinterKey来获取触发时间,或者可以在事件实际被触发之前从意图中获取hinterTime。重点是让用户查看是否有警报设置,何时设置,然后我知道如何取消或更改警报。只是找不到显示它的好方法。

希望我能忽略一些容易实现的事情://但似乎无法解决这个问题。

1 个答案:

答案 0 :(得分:0)

您无法从AlarmManager获取此信息。如果您需要此信息,则需要将其保存在某些持久性存储(SQLite数据库,SharedPreferences,File等)中,并自行进行管理。