方案一
获取待设置的时间:
String y = String.valueOf(mDatePicker.getYear());
y = check(y, 4);
String mon = String.valueOf(mDatePicker.getMonth()+1);
mon = check(mon, 2);
String d = String.valueOf(mDatePicker.getDayOfMonth());
d = check(d, 2);
String h = String.valueOf(mTimePicker.getCurrentHour());
h = check(h, 2);
String m = String.valueOf(mTimePicker.getCurrentMinute());
m = check(m, 2);
String date = "" + y + mon + d + "." + h + m + "00";
timeSynchronization(date);
//时间位数确定 2030年1月1日,需要转成20300101
private String check(String data, int limit) {
int length = data.length();
if (length < limit) {
for (int i = length; i < limit; i++) {
data = 0 + data;
}
}
return data;
}
//设置系统时间
public void timeSynchronization(String date) {
Log.i("nadiee", "timeSynchronization()-date:" + date);
ArrayList<String> envlist = new ArrayList<String>();
Map<String, String> env = System.getenv();
for (String envName : env.keySet()) {
envlist.add(envName + "=" + env.get(envName));
}
String[] envp = (String[]) envlist.toArray(new String[0]);
String command;
command = "date -s " + date;
Log.i("nadiee", "command:" + command);
try {
Runtime.getRuntime().exec(new String[] { "su", "-c", command }, envp);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
方案二
网上很多介绍通过menifest 添加 android:sharedUserId="android.uid.system"获取系统权限来设置系统时间,不过要在对于源码下编译,或者用对于证书重新签名。