当前位置:   article > 正文

Android ntp服务动态替换_ntpserverchanger.apk

ntpserverchanger.apk

ntp服务动态替换


参考博文
Android4.0 时间更新分析 NTPServer更改
https://blog.csdn.net/nickzhang2010/article/details/8004560
Android中通过NTP服务器获取时间功能源码分析
https://blog.csdn.net/i2cbus/article/details/21550901

解决方案
1、关闭系统自动刷新,调用SntpClient类结构,自行实现刷新时间apk
2、修改setting数据库中ntp server的值,重启设备
frameworks\base\core\java\android\util\NtpTrustedTime.java

public static synchronized NtpTrustedTime getInstance(Context context) {
        if (sSingleton == null) {
            final Resources res = context.getResources();
            final ContentResolver resolver = context.getContentResolver();

            final String defaultServer = res.getString(
                    com.android.internal.R.string.config_ntpServer);
            final long defaultTimeout = res.getInteger(
                    com.android.internal.R.integer.config_ntpTimeout);

           // 修改此处获取的ntp server值,重启后会从数据库那最新的值
            final String secureServer = Settings.Global.getString(
                    resolver, Settings.Global.NTP_SERVER);
            final long timeout = Settings.Global.getLong(
                    resolver, Settings.Global.NTP_TIMEOUT, defaultTimeout);

            final String server = secureServer != null ? secureServer : defaultServer;
            sSingleton = new NtpTrustedTime(server, timeout);
            sContext = context;
        }

        return sSingleton;
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

修改接口使用
frameworks\base\core\java\android\provider\Settings.java

        /**
         * Store a name/value pair into the database.
         * @param resolver to access the database with
         * @param name to store
         * @param value to associate with the name
         * @return true if the value was set, false on database errors
         */
        public static boolean putString(ContentResolver resolver,
                String name, String value) {
            return putStringForUser(resolver, name, value, UserHandle.myUserId());
        }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

注意: 如果直接调用该结构,apk需要system权限;绕过的解决方案,系统服务中增加接口实现该函数的调用,然后给上层apk拉一个调用服务的接口,适用于系统深度定制开发

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop】
推荐阅读
相关标签
  

闽ICP备14008679号