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;
}
修改接口使用
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());
}
注意: 如果直接调用该结构,apk需要system权限;绕过的解决方案,系统服务中增加接口实现该函数的调用,然后给上层apk拉一个调用服务的接口,适用于系统深度定制开发