我想在特定时间设置闹钟,我尝试了下面的代码。问题是,大多数情况下警报会在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);
答案 0 :(得分:1)
据我了解你的问题("我想在特定的时间内设置闹钟"),你想让闹钟发出声音 - 让我们说明天上午10点。但是,您的代码似乎与此语句相矛盾,因为您正在计算时间差:
long time = cal.getTimeInMillis()-(System.currentTimeMillis());
您可能还遇到了AlarmManager
使用setRepeating()
方法遇到的问题。 Android文档说:
注意:从API 19开始,所有重复警报都不准确。如果你的 应用程序需要精确的交付时间,然后必须使用一次性 确切的警报,每次重新安排,如上所述。遗产 targetSdkVersion早于API 19的应用程序将 继续发出所有警报,包括重复警报, 确切地对待。
因此,如果您确实想要在特定时间设置闹钟(而不是时差),请尝试以下操作:
long time = cal.getTimeInMillis();
您也可以考虑更改为setExact()
方法,并根据需要创建代码重复(Internet上有示例)。