以毫秒为单位的时间报警

时间:2010-12-17 02:26:11

标签: android calendar timepicker

好的,所以我正在制作一个发出通知的警报,比如每天下午3点,但是我希望用户可以选择这个,AM / PM和小时/分钟之间可以自由更改。我可能会使用TimePicker,这是我到目前为止的代码:

    public void startAlarm() {


            Intent intent = new Intent(currentDay.this, AlarmReceiver.class);
            PendingIntent sender = PendingIntent.getBroadcast(currentDay.this,0, intent,0);

            long firstTime = SystemClock.elapsedRealtime();
            firstTime += 15*1000;


            AlarmManager am = (AlarmManager)getSystemService(ALARM_SERVICE);
            am.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP,firstTime,AlarmManager.INTERVAL_DAY, sender);


        }

所以,我想我将会使用以下内容:

Calendar cal = Calendar.getInstance();
cal.set(Calendar.HOUR_OF_DAY, 19);
cal.set(Calendar.MINUTE, 45);

然后使用

cal.getTimeInMillis()

但这不起作用,任何想法?谢谢!

编辑:所以,长话短说,我知道如何获得当前时间,然后添加让我们说15秒,但我希望有一个确定的时间工作例如下午5:14,我所做的一切尝试过不起作用

1 个答案:

答案 0 :(得分:2)

据我所知,你正在使用当前日期/时间获取一个Calendar实例,然后你要添加19小时45分钟,而不是将Calendar实例的时间明确设置为19:45。那是你的意思吗?您需要使用Calendar set()方法设置显式时间。

来自Calendar

的API参考
  

日历的getInstance方法返回一个日历,其区域设置基于系统设置,其时间字段已使用当前日期和时间初始化

    Calendar rightNow = Calendar.getInstance()
public abstract void add (int field, int value)

Since: API Level 1
Adds the specified amount to a Calendar field.
Parameters
    field   the Calendar field to modify.
    value   the amount to add to the field.
    Throws IllegalArgumentException if field is DST_OFFSET or ZONE_OFFSET.

编辑:将本地时间转换为UTC ...

Calendar cal = Calendar.getInstance();
cal.set(Calendar.HOUR_OF_DAY, 19);
cal.set(Calendar.MINUTE, 45);
int offset = cal.getTimeZone().getOffset(cal.getTimeInMillis());
firstTime = cal.getTimeInMillis() + offset;

注意:我没有尝试过上述方法,但可能有一种更简单的方法,但它应该有效。我很难测试这样的东西,因为我的时区是GMT / UTC。