Android7.0修改时间服务器

在无法连接外网的Android设备(如门禁、售货机)中,修改时间服务器成为一个挑战。本文介绍了通过adb shell命令、代码设置ID以及利用Settings.Global.NTP_SERVER的方式在Android 7.0上修改时间服务器的实践过程,包括遇到的问题和解决方法,确保设备时间与内网服务器同步。
摘要由CSDN通过智能技术生成

场景目的

最近有一个需求,需要修改Android设备的时间服务器。如果是普通的Android手机可以通过GPS或者其它的方法在没有网的情况下同步时间,但是对于只是搭载了Android系统的设备(如门禁、售货机之类)在无法连接外网的环境中就不那么容易做到了。

在内网服务器请求IP地址通过头部或者回复携带参数,可以让时间下发到设备上,不过就需要我们用代码时常去校准,使用能 ping 通的时间服务器可以让系统进行自动处理。

命令修改

刚开始的时候,我想使用的是通过在Android程序中调用adb shell命令来修改时间服务器,也确实有这样的命令存在。

settings put global ntp_server ntp1.aliyun.com

ntp1.aliyun.com是阿里的时间服务器域名,可以设置成其它的或者ip。

网上说要使用这条命令需要先执行 su 命令,我按照说的去做,给Android设备设置了一个没有网络的局域网IP,然后让设备去通过网络同步时间确实是做到了,说明这条命令是有效的。

但是命令行窗口能够成功修改,在 APP 中调用却未必能够同样生效。

Process process = Runtime.getRuntime().exec(isRoot ? "su" : "sh");

在执行上面代码的时候,报了如下错误:

Cannot run program "su": error=13,Premission denied

它说不能执行su,但我的设备已经root了,应该是不会出现这个问题的。我搜索了一下,大多说需要修改Android源码,在alps\system\extras\su下的su.c中有这样一句代码:

if (current_uid != AID_ROOT && current_uid != AID_SHELL) error(1, 0, "not allowed");

似乎和这个有关系,但就算能成功,我的需求也不能通过修改源码来实现。

如果不执行su命令,好像有时也能修改时间服务器,因为我在搜索过程中想到了另一种方法,所以这个没有验证,有兴趣的朋友可以自己研究。

通过id设置

因为使用shell命令不能正常修改,我就想到能不能获取到当前使用的时间服务器是哪个。根据查找资料,我知道系统默认的是设置在frameworks\base\co

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值