当前位置: 首页 > news >正文

android开发局域网内通过NTP服务端自动更新系统时间

1. 问题:如果设备有机会处于外网,一般不会有系统时间自动同步问题,但是存在一些使用场景就是设备一直处于局域网环境,如果设备关机一段时间了,再启动设备后,时间可能是1970或者其实错误时间

2. 解决方法:系统时间的自动更新是通过ntp server服务在外网可用时自动请求和同步系统时间的,我们只需要将ntp server服务地址设置为我们的内网服务端地址即可。当然前提是内网服务端开启了ntp服务,具体怎么开启自行百度或者Google。

3. 代码实现(部分系统要求是系统app或者有系统权限的app才能修改成功):

val ipAddress = "192.168.101.123"
LogUtils.d("tryUpdateNtpServer ipAddress=$ipAddress")
if (ipAddress.isEmpty()) {LogUtils.d("tryUpdateNtpServer ipAddress is empty")return
}val ntpServerKey = "ntp_server"
val oldNtpServer = Settings.Global.getString(context.contentResolver, ntpServerKey)  //先获取判断一下是不是添加过了
LogUtils.d("tryUpdateNtpServer oldNtpServer=$oldNtpServer")
if (!oldNtpServer.isNullOrEmpty() && oldNtpServer.contains(ipAddress)) {LogUtils.d("tryUpdateNtpServer already set ntp_server")return
}Settings.Global.putString(context.contentResolver, ntpServerKey, ipAddress)    //使用Settings.Global.putString设置
var newNtpServer = Settings.Global.getString(context.contentResolver, ntpServerKey)
if (!newNtpServer.isNullOrEmpty() && newNtpServer.contains(ipAddress)) {LogUtils.d("tryUpdateNtpServer set ntp_server by Settings.Global.putString success")ToastUtils.showLong("设置NTP服务器成功,正在重启设备生效")ThreadUtils.getMainHandler().postDelayed({ ShellUtils.execCmd("reboot", false) }, 2000)  //设置成功需要重启设备之后才能生效return
}
LogUtils.d("tryUpdateNtpServer set ntp_server by Settings.Global.putString failed")
ShellUtils.execCmd("settings put global $ntpServerKey $ipAddress", false)   //如果设置失败,尝试使用settings put global命令设置,ShellUtils.execCmd来自依赖库com.blankj:utilcode:1.30.7
newNtpServer = Settings.Global.getString(context.contentResolver, ntpServerKey)
if (!newNtpServer.isNullOrEmpty() && newNtpServer.contains(ipAddress)) {LogUtils.d("tryUpdateNtpServer set ntp_server by settings put global success")ToastUtils.showLong("设置NTP服务器成功,正在重启设备生效")ThreadUtils.getMainHandler().postDelayed({ ShellUtils.execCmd("reboot", false) }, 2000)  //设置成功需要重启设备之后才能生效return
}
LogUtils.d("tryUpdateNtpServer set ntp_server by settings put global ntp_server failed")
http://www.wxhsa.cn/company.asp?id=2127

相关文章:

  • 一招解决Proxmox VE虚拟机磁盘空间耗尽:LVM在线扩容实战 - 若
  • jiaozi
  • 基于Linux系统的定制软件安装硬件设备选型指南
  • c++之is_trivially_default_constructible
  • python3协程学习-async,await
  • 猫树分治
  • Rust太难了。。。。。。。
  • AI导航生成寻路点-FindPathToLocationSynchronously
  • cache写策略
  • 个人微信开发
  • C++之std::is_trivially_copyable
  • PostgreSQL技术大讲堂 - 第104讲:PostgreSQL分区表应用实践
  • redis实现缓存1-添加商户缓存
  • qemu的外部快照实现原理
  • Springboot 集成 飞书群消息
  • 最新爆料:GitHub Copilot全面推出OpenAI GPT-5 和 GPT-5 mini!
  • netstat 命令查看端口状态详解
  • 智聘无界:AI 破解全球化招聘合规、成本与人才匹配难题的实践路径
  • Nature | 本周最新文献速递
  • Flink 与Flink可视化平台StreamPark教程(CDC功能)
  • GAS_Aura-Setting Up Auto Running
  • Ubuntu 24.04 LTS 登录用户和密码忘记找回方法
  • 错排问题
  • 源码调试-带你了解下车牌识别的深度学习模型-LPRNet
  • 仓储物流业务字段(一)
  • ubuntu 24.04部署mysql8.0.41(glibc2.28)
  • cmakelist文件中常见语句的含义
  • charles破解-在线生成激活码
  • 微信个人号开发
  • 内部排序-直接插入排序冒泡排序快速排序对比