更改系统时区
前提是设备系统已处于root权限
查看设备是否root权限步骤:
- 通过adb connect IP 连接Android 设备;
- 用adb命令 adb shell 进入系统权限
- 如果结果显示是#号,说明设备已root,如果是$号,说明设备未root,如图所示:
在清单文件manifest头部加入 android:sharedUserId=“android.uid.system”
添加权限
<uses-permission android:name="android.permission.WRITE_SETTINGS"/>
<uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS"/>
<uses-permission android:name="android.permission.SET_TIME" />
<uses-permission android:name="android.permission.SET_TIME_ZONE" />
/** * 获取当前时区 * @return */
public static String getDefaultTimeZone(){
return TimeZone.getDefault().getDisplayName();
}
/** * 设置系统的时区 * @param timeZone */
public static void setTimeZone(String timeZone){
AlarmManager alarmManager = (AlarmManager)mContext.getSystemService(ALARM_SERVICE);
alarmManager.setTimeZone(timeZone);
}
/** * 获取GMT时间 * @param time * @return * @throws ParseException */
public static Date getGMT(String time) throws ParseException {
DateFormat df = new SimpleDateFormat("EEE, d-MMM-yyyy HH:mm:ss",Locale.ENGLISH);
return df.parse(time);
}
/** * 获取CST时间 * @param date * @return */
public static String getCST(Date date) {
DateFormat df = new SimpleDateFormat("EEE, d-MMM-yyyy HH:mm:ss z",Locale.ENGLISH);
df.setTimeZone(TimeZone.getTimeZone("GMT"));
return(df.format(date));
}
/** * 获取网络时间 * @return */
public static String getNetTime(){
SimpleDateFormat dff = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
dff.setTimeZone(TimeZone.getTimeZone("GMT+08"));
String netTime = dff.format(new Date());
return netTime;
}
/** * 测试 * @return */
public static void getTime(){
String time = getDefaultTimeZone();
Date date = new Date();
try {
Log.w("CST Time: ",getCST(date));
Log.w("getNetTime(): ",getNetTime());
Log.w("时区: ",time +" GMT Time: "+ getGMT(getCST(date)));
}
catch (Exception e) {
e.printStackTrace();
}
setTimeZone("Asia/Shanghai");}