【问题标题】:Android how can I set an alarm based on the time set in my sqlite database?Android 如何根据我的 sqlite 数据库中设置的时间设置警报?
【发布时间】:2016-06-16 00:55:00
【问题描述】:

我有一个应用程序,它从称为任务的网络服务接收数据,然后将任务保存到我的 SQLite 数据库中。我接下来要做的是查询这些任务,然后根据设置触发的时间设置警报。假设我有一个任务名称“feed”,并且要触发的任务时间是“09:00 AM”(我的时间使用“h:i A”格式)。如何将此时间格式转换为能够被alarmManager 读取的格式?

public void setAlarm(int uniqueid, int duration) {
    Intent intent = new Intent(this, AlarmReceiver.class);
    intent.setAction(AlarmReceiver.ACTION_ALARM_RECEIVER);//my custom string action name
    PendingIntent pendingIntent = PendingIntent.getBroadcast(this, uniqueid, intent, 0);
    AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);

    alarmManager.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis()
            + (duration * 1000), pendingIntent);
    Toast.makeText(this, "Alarm set for " + uniqueid, Toast.LENGTH_LONG).show();
}

【问题讨论】:

    标签: android alarmmanager time-format


    【解决方案1】:

    试试这个,看看它是否适合你

    Date mDate = new Date();
    Calendar mCalendar = Calendar.getInstance();
    mCalendar.setTime(mDate);
    mCalendar.add(Calendar.MINUTE, 2);
    
    long alarmInTwoMinutes = mCalendar.getTimeInMillis();
    
    alarmManager.set(AlarmManager.RTC_WAKEUP, alarmInTwoMinutes, pendingIntent);
    

    在特定时间更新设置

    Calendar calendar = Calendar.getInstance();
    calendar.setTimeInMillis(System.currentTimeMillis());
    calendar.set(Calendar.HOUR_OF_DAY, 9);
    calendar.set(Calendar.MINUTE, 30);
    
    long alarmInTwoMinutes = calendar.getTimeInMillis();
    

    对于重复,你可以使用

    alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, alarmInTwoMinutes, pendingIntent)
    

    【讨论】:

    • 如果我想在特定时间从时间选择器触发警报怎么办?比如“09:30 AM”?
    • 是每天此时重复还是一次触发?
    【解决方案2】:
    String date_string = "09:00 AM";
    SimpleDateFormat sdf = new SimpleDateFormat("hh:mm a");
    try {
        Date date = sdf.parse(date_string);
        long milliseconds = date.getTime();
    } catch (ParseException e) {
        e.printStackTrace();
    }
    

    使用毫秒。

    【讨论】:

    • 它可以工作,但在设置后直接收到它..就像我从现在开始设置闹钟一样 2 分钟。设置后,它会在所需时间之前立即完成。这是行:alarmManager.set(AlarmManager.RTC_WAKEUP, 毫秒, pendingIntent);
    • @Renboy 是的,是时候发出警报了,阅读 Android AlarmManager 的工作原理:developer.android.com/intl/ru/reference/android/app/…
    猜你喜欢
    • 1970-01-01
    • 2011-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-17
    相关资源
    最近更新 更多