时间:2018-03-30 20:27:59

标签: android alarmmanager android-alarms

我想在特定时间设置闹钟,我尝试了下面的代码。问题是,大多数情况下警报会在10秒内响起。我尝试在祝酒词中获得time的价值,这看起来非常好。

Calendar cur_cal = new GregorianCalendar();
cur_cal.setTimeInMillis(System.currentTimeMillis());//set the current time and date for this calendar

Calendar cal = new GregorianCalendar();
cal.add(Calendar.DAY_OF_YEAR, cur_cal.get(Calendar.DAY_OF_YEAR));
cal.set(Calendar.HOUR_OF_DAY, 1);
cal.set(Calendar.MINUTE, 54);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MILLISECOND, 0);
cal.set(Calendar.DATE, cur_cal.get(Calendar.DATE));
cal.set(Calendar.MONTH, cur_cal.get(Calendar.MONTH));

long futureInMillis = SystemClock.elapsedRealtime() + delay;
long time = cal.getTimeInMillis()-(System.currentTimeMillis());

AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
alarmManager.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, time, (1000*60*60*24) , pendingIntent);

Toast.makeText(context, "alarm set for" + time, Toast.LENGTH_SHORT).show();

我也试过了,

alarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, time, pendingIntent);

alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), 24*60*60*1000, pendingIntent);

alarmManager.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), pendingIntent);

1 个答案:

答案 0 :(得分:1)

据我了解你的问题("我想在特定的时间内设置闹钟"),你想让闹钟发出声音 - 让我们说明天上午10点。但是,您的代码似乎与此语句相矛盾,因为您正在计算时间差:

long time = cal.getTimeInMillis()-(System.currentTimeMillis());

您可能还遇到了AlarmManager使用setRepeating()方法遇到的问题。 Android文档说:

  

注意:从API 19开始,所有重复警报都不准确。如果你的   应用程序需要精确的交付时间,然后必须使用一次性   确切的警报,每次重新安排,如上所述。遗产   targetSdkVersion早于API 19的应用程序将   继续发出所有警报,包括重复警报,   确切地对待。

因此,如果您确实想要在特定时间设置闹钟(而不是时差),请尝试以下操作:

long time = cal.getTimeInMillis();

您也可以考虑更改为setExact()方法,并根据需要创建代码重复(Internet上有示例)。

链接到Android文档: https://developer.android.com/reference/android/app/AlarmManager.html#setRepeating(int,%20long,%20long,%20android.app.PendingIntent)