1,SystemProperties
Android源码开发中大量存在SystemProperties.set()、SystemProperties.get(),这两个方法用于对系统属性的读取。这里以Android设置系统时区为例简单介绍一下SystemProperties的使用。
Settings/src/com/android/settings/ZonePicker.java
public void onListItemClick(ListView listView, View v, int position, long id) {
...
final AlarmManager alarm = (AlarmManager) activity.getSystemService(Context.ALARM_SERVICE);
alarm.setTimeZone(tzId);
...
}
点击时区列表后调用AlarmManagerService的setTimeZone进行修改时区,设置系统属性值,并且发送修改时区广播.
frameworks/base/services/java/com/android/server/AlarmManagerService.java
public void setTimeZone(String tz) {
mContext.enforceCallingOrSelfPermission("android.permission.SET_TIME_ZONE","setTimeZone");//判断权限
try {
if (TextUtils.isEmpty(tz)) return;
synchronized (this) {
String current = <strong>SystemProperties.get("persist.sys.timezone")//获取系统之前的时区
if (current == null || !current.equals(zone.getID())) {
timeZoneWasChanged = true;
SystemProperties.set("persist.sys.timezone", zone.getID()); //设置最新的时区
}
}
if (timeZoneWasChanged) {
<span style="white-space:pre"> </span>//发送修改时区广播
Intent intent = new Intent(Intent.ACTION_TIMEZONE_CHANGED);