Android 一个获取网址时间的Demo
文章目录
- Android 一个获取网址时间的Demo
- 通过一个网址获取时间的代码
- 关于Android NTP 时间
- Android 同步时间代码
前段时间有个客户想用局域网同步Android 设备的时间,开发后把这个demo分享一下。
效果:
这里也获取了阿里云的NTP网址的时间进行对比。
因为同步时间需要系统权限。源码demo 把同步时间部分代码注释了!
如果有系统签名,把系统签名放进去,配置对应的密钥信息,把对应的代码放开注释,编译运行是可以正常同步时间的。
下面demo apk 和源码地址:
https://download.csdn.net/download/wenzhi20102321/87720170
下面是涉及的主要代码展示:
通过一个网址获取时间的代码
一定要注意的是,Http 网络请求需要用子线程里面进行,否则直接报错 null !
URL url = null;//取得资源对象
try {
url = new URL("https://www.baidu.com/");
URLConnection uc = url.openConnection();//生成连接对象
uc.connect(); //发出连接
long ld = uc.getDate(); //取得网站日期时间
LogUtil.debug("ld = " + ld);
//打印时间字符串看看:
DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS");
String format = formatter.format(calendar.getTime());
LogUtil.debug("format = " + format);
} catch (Exception e) {
}
关于Android NTP 时间
之前写过 NTP 相关知识的介绍,需要的可以看看:
https://blog.csdn.net/wenzhi20102321/article/details/127482145
Android 系统如果配置了NTP 网址,点击同步时间的时候,默认会从NTP 网址进行同步时间的!因为Android 系统又专门同步时间的Service,上面的文章有介绍。
Android 同步时间代码
//更新日历时间
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(ld); // ld 是获取的时间值
//更新系统时间:(重点)
((AlarmManager) MainActivity.this.getSystemService(Context.ALARM_SERVICE)).setTime(ld);
//发送广播通知系统和所有应用
Intent intent = new Intent("android.intent.action.DATE_CHANGED");
sendBroadcast(intent);
Intent intent_time = new Intent("android.intent.action.TIME_TICK");
sendBroadcast(intent_time);
值得注意的是,更新时间到系统上和发送系统广播更新时间都是要系统权限的。
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
//下面这两个应用需要系统权限uid 才能生效
<uses-permission android:name="android.permission.SET_TIME"/>
<uses-permission android:name="android.permission.SET_TIME_ZONE"/>
上面的东西不难,做个demo 有需要的可以提取。