我正在开发一个每24小时计算+5的应用程序,但设备上的时间不应影响此计时器。例如,如果是时钟上午9:00和计时器上的20分钟,并且用户将设备时间设置为9:15,则计时器仍应有20分钟计时。
答案 0 :(得分:0)
警报有两种通用时钟类型:"已过时的实时时间"和"实时时钟" (RTC)。经过实时使用自系统启动以来的"时间"作为参考,实时时钟使用UTC(挂钟)时间。这意味着经过的实时时间适合根据时间的推移设置警报(例如,每隔30秒触发一次警报),因为它不受时区/区域设置的影响。实时时钟类型更适合依赖于当前区域设置的警报。
您可以将AlarmManager与RTC一起使用,如下所示
PendingIntent pendingIntent = PendingIntent.getBroadcast(context,DAILY_REMINDER_REQUEST_CODE, yourIntent,
PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager am = (AlarmManager) context.getSystemService(ALARM_SERVICE);
am.setInexactRepeating(AlarmManager.RTC_WAKEUP, setcalendar.getTimeInMillis(),
AlarmManager.INTERVAL_DAY, pendingIntent);
然后使用BroadcastReciever获取事件并执行您的操作:
public class AlarmReceiver extends BroadcastReceiver {
String TAG = "AlarmReceiver";
@Override
public void onReceive(Context context, Intent intent) {
//Your logic here
}
}
答案 1 :(得分:0)
您可以使用android.net.SntpClient
这是一个简单的SNTP客户端,用于从SNTP服务中检索时间:
SntpClient client = new SntpClient();
if (client.requestTime("time.foo.com")) {
long now = client.getNtpTime() + SystemClock.elapsedRealtime() - client.getNtpTimeReference();
}
您可以找到实施here。