Android:calendar.getTimeInMillis()获取不同的值

时间:2013-12-30 09:58:09

标签: android dialog alert alarm

我有一个应用程序,有时会在闹钟状态栏上收到通知。 问题是,当时间满足时,他运行得很完美,但在此之后,警报会在某些时段启动,例如5分钟,1小时。

然后我把一个(如果)解决问题,但他们从未见过。

   long current_time = System.currentTimeMillis();

  if (current_time == limit_time)

这是完整的代码。

Calendar calendar = Calendar.getInstance();


        calendar.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);

        calendar.set(Calendar.HOUR_OF_DAY,11);
        calendar.set(Calendar.MINUTE,27);
        calendar.set(Calendar.SECOND,0);


        long current_time = System.currentTimeMillis();


        long limit_time = calendar.getTimeInMillis();



       if (current_time == limit_time){
            Intent myIntent = new Intent(MainActivity.this, MyReceiver.class);
            pendingIntent = PendingIntent.getBroadcast(MainActivity.this, 0, myIntent, 0);


            AlarmManager alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE);
            alarmManager.set(AlarmManager.RTC, calendar.getTimeInMillis(), pendingIntent);
        }

enter image description here

3 个答案:

答案 0 :(得分:2)

我不确定我明白你在问什么,但是

Calendar calendar = Calendar.getInstance();

Calendar实例初始化为当前日期和时间,精确度为毫秒。

当您在日历上设置某些字段时,其他字段保持不变。因此,如果毫秒标记中的最后3位数有问题,请将它们设置为零:

calendar.set(Calendar.MILLISECOND, 0);

对于毫秒时间戳的比较,使用>=<=而不是==通常更有用。

答案 1 :(得分:1)

当然每次都不一样,这就是重点,当你以毫秒为单位计算它不是同一时间现在现在

更改您的代码并使用&lt;或者&gt;取决于你的需要,而不是==因为计算机可能会跳过检查你正在寻找的值,因为它会快速,因此它可能会从1388395620883变为1388395620892,它实际上没有跳过,但它没有时间打印或检查(或其他)所有。 尝试在无限循环中打印此System.currentTimeMillis()以查看它是如何进行的,您将看到它无法“快速打印”

答案 2 :(得分:0)

最好使用比较

if(time == limit_time)导致问题

将两个值都设置为日历并进行比较。check this for more details