开发安卓系统真的是太有趣了,由于公司设备运行环境是局域网,无法连接外网。导致设备通过手动修改设备时间非常不可控,于是在网上找了方法去更新设备时间,但是发现网上提供的方法是需要shearUsid作为系统签名用户才能实现。
跟着讲解,我一顿操作猛如虎,一运行打包安装,gg了,安装不了,报错:INSTALL_FAILED_SHARED_USER_INCOMPATIBLE,意思是需要系统签名。很明显这种方式行不通。
于是求助于同事,公司设备本身存在定制化,但是上述这个方式也太“系统化”了。在同事的帮助下得知还有SDK能力,其实应该也是利用反射的方式,不过我这里用的是直接shell操作。
Android : 反射机制获取或设置系统属性(SystemProperties) 这种方式供参考。
我的方式:
/**
* 获取服务器时间
*/
private void getServerTime() {
HttpSend.getInstance().getServerTime(new ResultCallbackListener<String>() {
@Override
public void onSuccess(String data) {
ELog.e("服务器时间:" + data + "-->" + DateUtils.getDateTimeStr(Long.parseLong(data)));
if (!TextUtils.isEmpty(data)) {
MyApp.deviceControlStrategy.updateSystemDateTime(data);
}
}
});
}
/**
* 修改系统时间
*
* @param date
*/
@Override
public void updateSystemDateTime(String date) {
//测试设置系统时间
String formatSystemTime = DateUtils.getFormatSystemTime(Long.parseLong(date));
ELog.e("formatSystemTime = " + formatSystemTime);
ShellUtils.execCommand("date " + formatSystemTime + " set" + "\n busybox hwclock -w\n", true);
//设置完成之后,麻烦发送心跳,不然设备会无限重启
EventBus.getDefault().post(new WatchDogEvent("发送消息了"));
}
自测能实现!至于工具类大同小异,这里就不说明了。如有需要可以给我留言。
网友评论