跟了一下系统设置的代码。现在简单做点笔记,以供日后参考。
代码路径在packages/apps/Settings/中。
整个Settings的主类是Settings.java
关于手机的一些基本信息在DeviceInfoSettings.java中
DeviceInfoSettings.java:
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
addPreferencesFromResource(R.xml.device_info_settings);
setStringSummary(KEY_FIRMWARE_VERSION, Build.VERSION.RELEASE); //显示Android Version的版本号
findPreference(KEY_FIRMWARE_VERSION).setEnabled(true); //
//setValueSummary(KEY_BASEBAND_VERSION, "gsm.version.baseband"); //Baseband verison(基带信息)
setStringSummary(KEY_ROM_INFO, getRomInfo()); //ROM
setStringSummary(KEY_RAM_INFO, getRamInfo());<span style="white-space:pre"> </span>//RAM
setStringSummary(KEY_CPU_INFO, getCpuInfo()); //CPU信息
setStringSummary(KEY_BASEBAND_VERSION, getBasebandVersion());
setStringSummary(KEY_DEVICE_MODEL, Build.MODEL + getMsvSuffix());
setValueSummary(KEY_EQUIPMENT_ID, PROPERTY_EQUIPMENT_ID);
setStringSummary(KEY_DEVICE_MODEL, Build.MODEL);
setStringSummary(KEY_BUILD_NUMBER, Build.DISPLAY); //
findPreference(KEY_BUILD_NUMBER).setEnabled(true);
findPreference(KEY_KERNEL_VERSION).setSummary(getFormattedKernelVersion()); //内核信息
还有一些个人认为很有意思的隐形功能,Android开发人员还是比较恶搞的。看onPreferenceTreeClick方法:
@Override
public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) {
if (preference.getKey().equals(KEY_FIRMWARE_VERSION)) { //点击Android Version信息
System.arraycopy(mHits, 1, mHits, 0, mHits.length-1);
mHits[mHits.length-1] = SystemClock.uptimeMillis();
if (mHits[0] >= (SystemClock.uptimeMillis()-500)) { //短时间内多次点击
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.setClassName("android",
com.android.internal.app.PlatLogoActivity.class.getName()); //跳转到很任性的版本界面
try {
startActivity(intent);
} catch (Exception e) {
Log.e(LOG_TAG, "Unable to start activity " + intent.toString());
}
}
} else if (preference.getKey().equals(KEY_BUILD_NUMBER)) { //点击Build number 多次点击进入开发者模式
if (mDevHitCountdown > 0) {
mDevHitCountdown--;
if (mDevHitCountdown == 0) {
getActivity().getSharedPreferences(DevelopmentSettings.PREF_FILE,
Context.MODE_PRIVATE).edit().putBoolean(
DevelopmentSettings.PREF_SHOW, true).apply();
if (mDevHitToast != null) {
mDevHitToast.cancel();
}
mDevHitToast = Toast.makeText(getActivity(), R.string.show_dev_on,
Toast.LENGTH_LONG);
mDevHitToast.show();
} else if (mDevHitCountdown > 0
&& mDevHitCountdown < (TAPS_TO_BE_A_DEVELOPER-2)) {
if (mDevHitToast != null) {
mDevHitToast.cancel();
}
mDevHitToast = Toast.makeText(getActivity(), getResources().getQuantityString(
R.plurals.show_dev_countdown, mDevHitCountdown, mDevHitCountdown),
Toast.LENGTH_SHORT);
mDevHitToast.show();
}
} else if (mDevHitCountdown < 0) {
if (mDevHitToast != null) {
mDevHitToast.cancel();
}
mDevHitToast = Toast.makeText(getActivity(), R.string.show_dev_already,
Toast.LENGTH_LONG);
mDevHitToast.show();
}
}
return super.onPreferenceTreeClick(preferenceScreen, preference);
}