需求
智能硬件很多是电源供电,本身没有内置电池
断点时,没有电源,就无法维持计时器工作,这样就会丢失关机前的时间信息
当我们重新开机时,时间就会被恢复到出厂时的时间戳
如果有网络,系统会稍后自动同步时间,如果没网络,就会一直保持错误的时间
对于一些定时执行的任务,我们必须确保时间正确,才能执行
所以我们就很有必要,在系统启动后,手动同步网络时间,同步成功后再执行相关任务
前提
只有系统级别的应用,才拥有设置系统时间的权限
想要把应用升级为系统应用,至少满足两个条件,这个我们在前面讲过,不懂的请看专栏前面的博客
- 设置android:sharedUserId=“android.uid.system”
- 用编译系统源码时的签名证书,对APP进行签名
另外,要使用此代码,需要用到Framework层的源码
这部分代码在AndroidSDK中是没有的,需要自己去下载,特定版本安卓系统,对应的framework.jar
实现代码
//同步网络时间
SntpClient client = new SntpClient();
boolean success = client.requestTime("time.ustc.edu.cn", 500);
long ntpTime = client.getNtpTime();
//设置系统时间
SystemClock.setCurrentTimeMillis(ntpTime);