Android更新设备时间

开发安卓系统真的是太有趣了,由于公司设备运行环境是局域网,无法连接外网。导致设备通过手动修改设备时间非常不可控,于是在网上找了方法去更新设备时间,但是发现网上提供的方法是需要shearUsid作为系统签名用户才能实现。

如:
Android 设置系统日期时间和时区

跟着讲解,我一顿操作猛如虎,一运行打包安装,gg了,安装不了,报错:INSTALL_FAILED_SHARED_USER_INCOMPATIBLE,意思是需要系统签名。很明显这种方式行不通。

于是求助于同事,公司设备本身存在定制化,但是上述这个方式也太“系统化”了。在同事的帮助下得知还有SDK能力,其实应该也是利用反射的方式,不过我这里用的是直接shell操作。

Android : 反射机制获取或设置系统属性(SystemProperties) 这种方式供参考。

我的方式:

 /**
     * 获取服务器时间
     */
    private void getServerTime() {
        HttpSend.getInstance().getServerTime(new ResultCallbackListener() {
            @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("发送消息了"));
    }

自测能实现!至于工具类大同小异,这里就不说明了。如有需要可以给我留言。

你可能感兴趣的:(Android更新设备时间)