> 文章列表 > Android 一个获取网址时间的Demo

Android 一个获取网址时间的Demo

Android 一个获取网址时间的Demo

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 有需要的可以提取。