系统属性调用评估方法介绍

来源:互联网 发布:开票软件金税盘版升级 编辑:程序博客网 时间:2024/05/22 12:12

1.前言

本文档用来介绍《系统属性调用评估报告》中所使用的方法和技术。

2.PropertiesHelper.apk实现

界面效果如下图:
这里写图片描述
按下【Get Property】,将开始执行10000次获取Brightness属性的方法,执行完毕后将显示出来执行时间,单位是ms。

按下【Set Property】,将开始执行10000次设置Brightness属性的方法,执行完毕后将显示出来执行时间,单位也是ms。

这个APK实现起来非常简单,只将源码粘贴如下:

PropertiesHelperMainUI.java

package com.eyelike.ph;import com.eyelike.propertyhelper.R;import android.app.Activity;import android.content.ContentResolver;import android.net.Uri;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.provider.Settings;import android.provider.Settings.SettingNotFoundException;import android.util.Log;import android.view.View;import android.view.WindowManager;import android.widget.Button;import android.widget.TextView;import android.widget.Toast;public class PropertyHelperMainUI extends Activity{    private TextView mGetPropTime;    private TextView mSetPropTime;    private Button mStartGetPropBtn;    private Button mStartSetPropBtn;    private Handler mHandler;    private Handler mHandler2;    WindowManager.LayoutParams params;    int mGetPropResult = 0;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.main_ui);        mGetPropTime = (TextView) findViewById(R.id.get_prop_time_result_tv);        mSetPropTime = (TextView) findViewById(R.id.set_prop_time_result_tv);        mStartGetPropBtn = (Button) findViewById(R.id.start_get_prop_btn);        mStartSetPropBtn = (Button) findViewById(R.id.start_set_prop_btn);        mHandler = new MyHandler();        mHandler2 = new MyHandler();        mStartGetPropBtn.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                Toast.makeText(PropertyHelperMainUI.this,                        "This will take a little long time.", Toast.LENGTH_SHORT).show();                mStartGetPropBtn.setEnabled(false);                //String prop = System.getProperty();                //int prop = SystemProperties.getInt("def_kernel_about_phone");                Thread mThread1 = new Thread(new Runnable() {                    public void run() {                        ContentResolver cr = getContentResolver();                        int i = 0;                        long mStartTime = System.currentTimeMillis();                        while (i < 10000) {                            try {                                mGetPropResult = Settings.System.getInt(cr, Settings.System.SCREEN_BRIGHTNESS);                            } catch (SettingNotFoundException e) {                            }                            ++i;                        }                        long mGetTime = System.currentTimeMillis() - mStartTime;                        Log.e("time", "Time is:" + mGetTime);                        Bundle mBundle = new Bundle();                        mBundle.putString("TYPE", "Get");                        mBundle.putInt("BRIGHTNESS", mGetPropResult);                        mBundle.putLong("TIME", mGetTime);                        Message mMessage = new Message();                        mMessage.obj = mBundle;                        mHandler.sendMessage(mMessage);                    }                });                mThread1.start();            }        });        mStartSetPropBtn.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                Toast.makeText(PropertyHelperMainUI.this,                        "This will take a little long time.", Toast.LENGTH_SHORT).show();                mStartSetPropBtn.setEnabled(false);                params = getWindow().getAttributes();                params.screenBrightness = 50;                //String prop = System.getProperty();                //int prop = SystemProperties.getInt("def_kernel_about_phone");                Thread mThread2 = new Thread(new Runnable() {                    public void run() {                        int i = 0;                        long mStartTime = System.currentTimeMillis();                        while (i < 10000) {                            try {                                getWindow().setAttributes(params);                            } catch (Exception e) {                            }                            ++i;                        }                        long mSetTime = System.currentTimeMillis() - mStartTime;                        Log.e("time", "Time is:" + mSetTime);                         Bundle mBundle = new Bundle();                        mBundle.putString("TYPE", "Set");                        mBundle.putDouble("PARAMS", params.screenBrightness);                        mBundle.putLong("TIME", mSetTime);                        Message mMessage = new Message();                        mMessage.obj = mBundle;                        mHandler2.sendMessage(mMessage);                    }                });                mThread2.start();            }        });    }    class MyHandler extends Handler {        @Override        public void handleMessage(Message msg) {            super.handleMessage(msg);            Bundle mBundle = (Bundle) msg.obj;            String mType = mBundle.getString("TYPE");            int mBrightness = mBundle.getInt("BRIGHTNESS");            double mParams = mBundle.getDouble("PARAMS");            long mTime = mBundle.getLong("TIME");            if (("Get").equals(mType)) {                mGetPropTime.setText("Value is: " + mTime + " Brightness is: " + mBrightness);                mStartGetPropBtn.setEnabled(true);            }            if (("Set").equals(mType)) {                mSetPropTime.setText("Value is: " + mTime + " Params is: " + mParams);                mStartSetPropBtn.setEnabled(true);//              ContentResolver cr = getContentResolver();//              saveBrightness(cr, 5);            }        }    }    /** * 保存亮度设置状态 */    public static void saveBrightness(ContentResolver resolver, int brightness) {        Uri uri = android.provider.Settings.System.getUriFor("screen_brightness");        android.provider.Settings.System.putInt(resolver, "screen_brightness", brightness);        resolver.notifyChange(uri, null);    }}

AndroidManifest.xml

<manifest xmlns:android="http://schemas.android.com/apk/res/android"    package="com.eyelike.propertyhelper"    android:versionCode="1"    android:versionName="1.0" >    <uses-sdk        android:minSdkVersion="19"        android:targetSdkVersion="19" />    <application        android:allowBackup="true"        android:icon="@drawable/ic_launcher"        android:label="@string/app_name"        android:theme="@style/AppTheme" >        <activity            android:name="com.eyelike.ph.PropertyHelperMainUI">            <intent-filter>                <action android:name="android.intent.action.MAIN" />                <category android:name="android.intent.category.LAUNCHER" />            </intent-filter>        </activity>    </application>    <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>    <uses-permission android:name="android.permission.GET_TASKS"/>    <uses-permission android:name="android.permission.WRITE_SETTINGS" /></manifest>

values/strings.xml

<resources>    <string name="app_name">PropertyHelper</string>    <string name="start_get_prop">Start get property</string>    <string name="start_set_prop">Start set property</string>    <string name="get_prop_time">Get Property Time</string>    <string name="set_prop_time">Set property Time</string>    <string name="warn_msg">Run 10000 times, you need wait for a little long time.</string></resources>

layout/main_ui.xml

<?xml version="1.0" encoding="utf-8"?><ScrollView xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="fill_parent"    android:layout_height="wrap_content" >    <LinearLayout        android:layout_width="fill_parent"        android:layout_height="wrap_content"        android:orientation="vertical" >        <TextView            android:id="@+id/get_prop_time_tv"            android:layout_width="fill_parent"            android:layout_height="wrap_content"            android:text="@string/get_prop_time" />        <TextView            android:id="@+id/get_prop_time_result_tv"            android:layout_width="fill_parent"            android:layout_height="wrap_content" />        <Button            android:id="@+id/start_get_prop_btn"            android:layout_width="fill_parent"            android:layout_height="wrap_content"            android:text="@string/start_get_prop" />        <TextView            android:id="@+id/set_prop_time_tv"            android:layout_width="fill_parent"            android:layout_height="wrap_content"            android:text="@string/set_prop_time" />        <TextView            android:id="@+id/set_prop_time_result_tv"            android:layout_width="fill_parent"            android:layout_height="wrap_content" />        <Button            android:id="@+id/start_set_prop_btn"            android:layout_width="fill_parent"            android:layout_height="wrap_content"            android:text="@string/start_set_prop" />    </LinearLayout></ScrollView>

3.SettingsPropertiesCalculator实现

这部分是通过系统源码环境进行实现的。由于个人对Settings比较熟悉,所以就将功能直接集成在Settings设置中了。其他人也可以直接实现一个类似于Note或者MusicePlayer这样的系统APK应用,主要代码都不需要太多改变。

界面效果如下图:
这里写图片描述
下面介绍一下改动的地方,也以源码形式粘贴出来。

packages/apps/Settings/Manifest.xml添加如下代码块:

      <!-- add by eyelike at 2015-1-27 for PropertiesSettings -->        <activity android:name="Settings$PropertiesCalculatorSettingsActivity"                android:label="@string/properties_calculator_settings"                android:taskAffinity=""                android:excludeFromRecents="true">            <intent-filter>                <action android:name="android.intent.action.MAIN" />                <category android:name="android.intent.category.DEFAULT" />                <category android:name="com.android.settings.SHORTCUT" />            </intent-filter>            <meta-data android:name="com.android.settings.FRAGMENT_CLASS"                android:value="com.android.settings.PropertiesCalculatorSettings" />            <meta-data android:name="com.android.settings.TOP_LEVEL_HEADER_ID"                android:resource="@id/properties_calculator_settings" />        </activity>

packages/apps/Settings/res/xml/settings_headers.xml添加如下代码块:

   <!-- Add by eyelike at 2015-1-27 for PropertiesCalculator -->    <header        android:id="@+id/properties_calculator_settings"        android:fragment="com.android.settings.PropertiesCalculatorSettings"        android:icon="@drawable/ic_settings_about"        android:title="@string/properties_calculator_settings" />

packages/apps/Settings/res/values/strings.xml添加如下代码块:

    <!-- add by eyelike at 2015-1-27 for PropertiesCalculator -->    <string name="properties_calculator_settings">PropertiesSettings</string>    <string name="start_set_prop">Start set property</string>    <string name="start_get_prop">Start get property</string>    <string name="start_get_int_prop">Start getInt property</string>    <string name="start_get_boolean_prop">Start getBoolean property</string>    <string name="start_get_long_prop">Start getLong property</string>    <string name="set_prop_time">Set property Time</string>    <string name="get_prop_time">Get Property Time</string>    <string name="get_int_prop_time">GetInt Property Time</string>    <string name="get_boolean_prop_time">GetBoolean Property Time</string>    <string name="get_long_prop_time">GetLong Property Time</string>    <string name="warn_msg">Run 10000 times, you need wait for a little long time.</string>

packages/apps/Settings/res/layout 新建布局文件properties_calculator_ui.xml:

<?xml version="1.0" encoding="utf-8"?><ScrollView xmlns:android="http://schemas.android.com/apk/res/android"        android:layout_width="fill_parent"        android:layout_height="wrap_content">        <LinearLayout            android:layout_width="fill_parent"            android:layout_height="wrap_content"            android:orientation="vertical" >    <TextView        android:id="@+id/set_prop_time_tv"        android:layout_width="fill_parent"        android:layout_height="wrap_content"        android:text="@string/set_prop_time" />    <TextView        android:id="@+id/set_prop_time_result_tv"        android:layout_width="fill_parent"        android:layout_height="wrap_content" />    <Button        android:id="@+id/start_set_prop_btn"        android:layout_width="fill_parent"        android:layout_height="wrap_content"        android:text="@string/start_set_prop" />    <TextView        android:id="@+id/get_prop_time_tv"        android:layout_width="fill_parent"        android:layout_height="wrap_content"        android:text="@string/get_prop_time" />    <TextView        android:id="@+id/get_prop_time_result_tv"        android:layout_width="fill_parent"        android:layout_height="wrap_content" />    <Button        android:id="@+id/start_get_prop_btn"        android:layout_width="fill_parent"        android:layout_height="wrap_content"        android:text="@string/start_get_prop" />    <TextView        android:id="@+id/get_int_prop_time_tv"        android:layout_width="fill_parent"        android:layout_height="wrap_content"        android:text="@string/get_int_prop_time" />    <TextView        android:id="@+id/get_int_prop_time_result_tv"        android:layout_width="fill_parent"        android:layout_height="wrap_content" />    <Button        android:id="@+id/start_get_int_prop_btn"        android:layout_width="fill_parent"        android:layout_height="wrap_content"        android:text="@string/start_get_int_prop" />    <TextView        android:id="@+id/get_boolean_prop_time_tv"        android:layout_width="fill_parent"        android:layout_height="wrap_content"        android:text="@string/get_boolean_prop_time" />    <TextView        android:id="@+id/get_boolean_prop_time_result_tv"        android:layout_width="fill_parent"        android:layout_height="wrap_content" />    <Button        android:id="@+id/start_get_boolean_prop_btn"        android:layout_width="fill_parent"        android:layout_height="wrap_content"        android:text="@string/start_get_boolean_prop" />    <TextView        android:id="@+id/get_long_prop_time_tv"        android:layout_width="fill_parent"        android:layout_height="wrap_content"        android:text="@string/get_long_prop_time" />    <TextView        android:id="@+id/get_long_prop_time_result_tv"        android:layout_width="fill_parent"        android:layout_height="wrap_content" />    <Button        android:id="@+id/start_get_long_prop_btn"        android:layout_width="fill_parent"        android:layout_height="wrap_content"        android:text="@string/start_get_long_prop" />        </LinearLayout>    </ScrollView>

packages/apps/Settings/src/com/android/settings 新建核心代码类PropertiesCalculatorSettings.java:

/* * Copyright (C) 2006 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * *      http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */package com.android.settings;import android.app.Activity;import android.os.Bundle;import android.provider.Settings;import android.util.Log;import android.os.SystemProperties;import android.preference.Preference;import android.content.ContentResolver;import android.os.Handler;import android.os.Message;import android.provider.Settings;import android.provider.Settings.SettingNotFoundException;import android.view.View;import android.view.WindowManager;import android.widget.Button;import android.widget.TextView;import android.widget.Toast;import android.view.LayoutInflater;import android.view.ViewGroup;public class PropertiesCalculatorSettings extends SettingsPreferenceFragment {    private TextView mGetPropTime;    private TextView mSetPropTime;    private TextView mGetIntPropTime;    private TextView mGetBooleanPropTime;    private TextView mGetLongPropTime;    private Button mStartGetPropBtn;    private Button mStartSetPropBtn;        private Button mStartGetIntPropBtn;        private Button mStartGetBooleanPropBtn;        private Button mStartGetLongPropBtn;    private Handler mHandler;    private Handler mHandler2;    private Handler mHandler3;    private Handler mHandler4;    private Handler mHandler5;        private View mView;        @Override          public View onCreateView(LayoutInflater inflater,ViewGroup container,Bundle savedInstanceState){                  mView=inflater.inflate(R.layout.properties_calculator_ui, null, false);        mGetPropTime = (TextView) mView.findViewById(R.id.get_prop_time_result_tv);        mSetPropTime = (TextView) mView.findViewById(R.id.set_prop_time_result_tv);        mGetIntPropTime = (TextView) mView.findViewById(R.id.get_int_prop_time_result_tv);        mGetBooleanPropTime = (TextView) mView.findViewById(R.id.get_boolean_prop_time_result_tv);        mGetLongPropTime = (TextView) mView.findViewById(R.id.get_long_prop_time_result_tv);        mStartGetPropBtn = (Button) mView.findViewById(R.id.start_get_prop_btn);        mStartSetPropBtn = (Button) mView.findViewById(R.id.start_set_prop_btn);        mStartGetIntPropBtn = (Button) mView.findViewById(R.id.start_get_int_prop_btn);        mStartGetBooleanPropBtn = (Button) mView.findViewById(R.id.start_get_boolean_prop_btn);        mStartGetLongPropBtn = (Button) mView.findViewById(R.id.start_get_long_prop_btn);                mHandler = new MyHandler();        mHandler2 = new MyHandler();        mHandler3 = new MyHandler();        mHandler4 = new MyHandler();        mHandler5 = new MyHandler();        mStartGetPropBtn.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                mStartGetPropBtn.setEnabled(false);                //String prop = System.getProperty();                //int prop = SystemProperties.getInt("def_kernel_about_phone");                Thread mThread1 = new Thread(new Runnable() {                    public void run() {                        ContentResolver cr = getContentResolver();                        int i = 0;                                                String mSvn = "";                        long mStartTime = System.currentTimeMillis();                        while (i < 10000) {                            try {                                                                // -2---get(String)---                                //int mGetPropResult = Settings.System.getInt(cr, Settings.System.SCREEN_BRIGHTNESS);                                                                mSvn = SystemProperties.get("ro.def.software.svn");                            } catch (Exception e) {                            }                            ++i;                        }                        long mGetTime = System.currentTimeMillis() - mStartTime;                        Log.e("time", "Time is:" + mGetTime);                        Bundle mBundle = new Bundle();                        mBundle.putString("TYPE", "Get");                        mBundle.putLong("TIME", mGetTime);                        Message mMessage = new Message();                        mMessage.obj = mBundle;                        mHandler.sendMessage(mMessage);                    }                });                mThread1.start();            }        });        mStartSetPropBtn.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                mStartSetPropBtn.setEnabled(false);                //String prop = System.getProperty();                //int prop = SystemProperties.getInt("def_kernel_about_phone");                Thread mThread2 = new Thread(new Runnable() {                    public void run() {                        int i = 0;                        long mStartTime = System.currentTimeMillis();                        while (i < 10000) {                            try {                                                             // -1---set(String)---                                                             SystemProperties.set("persist.sys.headset_mode", "2");                            } catch (Exception e) {                            }                            ++i;                        }                        long mSetTime = System.currentTimeMillis() - mStartTime;                        Log.e("ZHAOZHAO", "Time is:" + mSetTime);                        Bundle mBundle = new Bundle();                        mBundle.putString("TYPE", "Set");                        mBundle.putLong("TIME", mSetTime);                        Message mMessage = new Message();                        mMessage.obj = mBundle;                        mHandler2.sendMessage(mMessage);                    }                });                mThread2.start();            }        });        mStartGetIntPropBtn.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                mStartGetIntPropBtn.setEnabled(false);                //String prop = System.getProperty();                //int prop = SystemProperties.getInt("def_kernel_about_phone");                Thread mThread3 = new Thread(new Runnable() {                    public void run() {                        int i = 0;                                                int mGuestMode = 0;                        long mStartTime = System.currentTimeMillis();                        while (i < 10000) {                            try {                                                                // -3---getInt---                                                                mGuestMode = SystemProperties.getInt("persist.security.guestmode", 0);                            } catch (Exception e) {                            }                            ++i;                        }                        long mGetTime = System.currentTimeMillis() - mStartTime;                        Log.e("ZHAOZHAO", "Time is:" + mGetTime);                        Bundle mBundle = new Bundle();                        mBundle.putString("TYPE", "GetInt");                        mBundle.putLong("TIME", mGetTime);                        Message mMessage = new Message();                        mMessage.obj = mBundle;                        mHandler3.sendMessage(mMessage);                    }                });                mThread3.start();            }        });        mStartGetBooleanPropBtn.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                mStartGetBooleanPropBtn.setEnabled(false);                Thread mThread4 = new Thread(new Runnable() {                    public void run() {                        ContentResolver cr = getContentResolver();                        int i = 0;                                                boolean mResult = true;                        long mStartTime = System.currentTimeMillis();                        while (i < 10000) {                            try {                                                                // -4---getBoolean---                                                                mResult = SystemProperties.getBoolean("ro.settings.seprate", true);                            } catch (Exception e) {                            }                            ++i;                        }                        long mGetTime = System.currentTimeMillis() - mStartTime;                        Log.e("time", "Time is:" + mGetTime);                        Bundle mBundle = new Bundle();                        mBundle.putString("TYPE", "GetBoolean");                        mBundle.putLong("TIME", mGetTime);                        Message mMessage = new Message();                        mMessage.obj = mBundle;                        mHandler4.sendMessage(mMessage);                    }                });                mThread4.start();            }        });        mStartGetLongPropBtn.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                mStartGetLongPropBtn.setEnabled(false);                Thread mThread5 = new Thread(new Runnable() {                    public void run() {                        int i = 0;                                                long mEcmTimeOut = 0;                        long mStartTime = System.currentTimeMillis();                        while (i < 10000) {                            try {                                // -5---getLong---                                                                mEcmTimeOut = SystemProperties.getLong("ro.cdma.ecmexittimer", 300000);                            } catch (Exception e) {                            }                            ++i;                        }                        long mGetTime = System.currentTimeMillis() - mStartTime;                        Log.e("time", "Time is:" + mGetTime);                        Bundle mBundle = new Bundle();                        mBundle.putString("TYPE", "GetLong");                        mBundle.putLong("TIME", mGetTime);                        Message mMessage = new Message();                        mMessage.obj = mBundle;                        mHandler5.sendMessage(mMessage);                    }                });                mThread5.start();            }        });            return mView;        }        @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        }    class MyHandler extends Handler {        @Override        public void handleMessage(Message msg) {            super.handleMessage(msg);            Bundle mBundle = (Bundle) msg.obj;            String mType = mBundle.getString("TYPE");            long mTime = mBundle.getLong("TIME");            if (("Get").equals(mType)) {                mGetPropTime.setText("Value is: " + mTime);                mStartGetPropBtn.setEnabled(true);            }            if (("Set").equals(mType)) {                mSetPropTime.setText("Value is: " + mTime);                mStartSetPropBtn.setEnabled(true);            }            if (("GetInt").equals(mType)) {                mGetIntPropTime.setText("Value is: " + mTime);                mStartGetIntPropBtn.setEnabled(true);            }            if (("GetBoolean").equals(mType)) {                mGetBooleanPropTime.setText("Value is: " + mTime);                mStartGetBooleanPropBtn.setEnabled(true);            }            if (("GetLong").equals(mType)) {                mGetLongPropTime.setText("Value is: " + mTime);                mStartGetLongPropBtn.setEnabled(true);            }        }    }}

packages/apps/Settings/src/com/settings/Settings.java 中进行代码添加:

//A.    // Show only these settings for restricted users    private int[] SETTINGS_FOR_RESTRICTED = {            R.id.wireless_section,            R.id.wifi_settings,            R.id.bluetooth_settings,            R.id.data_usage_settings,            R.id.wireless_settings,            R.id.device_section,            R.id.sound_settings,            R.id.display_settings,            R.id.lock_settings, //added by XXX            R.id.storage_settings,            R.id.application_settings,            R.id.battery_settings,            R.id.personal_section,            R.id.location_settings,            R.id.security_settings,            R.id.language_settings,            R.id.user_settings,            R.id.account_settings,            R.id.account_add,            R.id.system_section,            R.id.date_time_settings,            R.id.about_settings,            R.id.accessibility_settings,            R.id.print_settings,            R.id.nfc_payment_settings,            R.id.home_settings,            R.id.audioprofle_settings,            R.id.sound_settings,            R.id.jrdsound_settings,//add by XXX            R.id.power_settings,            R.id.hotknot_settings            ,R.id.properties_calculator_settings// add by eyelike at 2015-1-27    };//B.    private static final String[] ENTRY_FRAGMENTS = {        WirelessSettings.class.getName(),        WifiSettings.class.getName(),        AdvancedWifiSettings.class.getName(),        BluetoothSettings.class.getName(),        TetherSettings.class.getName(),        WifiP2pSettings.class.getName(),        VpnSettings.class.getName(),        DateTimeSettings.class.getName(),        LocalePicker.class.getName(),        InputMethodAndLanguageSettings.class.getName(),        SpellCheckersSettings.class.getName(),        UserDictionaryList.class.getName(),        UserDictionarySettings.class.getName(),        SoundSettings.class.getName(),        JrdSoundSettings.class.getName(),//add by XXX        DisplaySettings.class.getName(),        DeviceInfoSettings.class.getName(),        ManageApplications.class.getName(),        ProcessStatsUi.class.getName(),        NotificationStation.class.getName(),        LocationSettings.class.getName(),        SecuritySettings.class.getName(),        PrivacySettings.class.getName(),        DeviceAdminSettings.class.getName(),        AccessibilitySettings.class.getName(),        ToggleCaptioningPreferenceFragment.class.getName(),        TextToSpeechSettings.class.getName(),        Memory.class.getName(),        DevelopmentSettings.class.getName(),        UsbSettings.class.getName(),        AndroidBeam.class.getName(),        WifiDisplaySettings.class.getName(),        PowerUsageSummary.class.getName(),        AccountSyncSettings.class.getName(),        CryptKeeperSettings.class.getName(),        DataUsageSummary.class.getName(),        DreamSettings.class.getName(),        UserSettings.class.getName(),        NotificationAccessSettings.class.getName(),        ManageAccountsSettings.class.getName(),        PrintSettingsFragment.class.getName(),        PrintJobSettingsFragment.class.getName(),        TrustedCredentialsSettings.class.getName(),        PaymentSettings.class.getName(),        KeyboardLayoutPickerFragment.class.getName(),        //M@:        SimManagement.class.getName(),        SimInfoEditor.class.getName(),        //Class name same as Activity name so use full name here        com.mediatek.gemini.SimDataRoamingSettings.class.getName(),        AudioProfileSettings.class.getName(),        Editprofile.class.getName(),        HDMISettings.class.getName(),        SelectSimCardFragment.class.getName(),        UsbSharingChoose.class.getName(),        UsbSharingInfo.class.getName(),        TetherWifiSettings.class.getName(),        DrmSettings.class.getName(),        WifiGprsSelector.class.getName(),        BeamShareHistory.class.getName(),        HotKnotSettings.class.getName(),        MasterClear.class.getName(),//add by XXX        com.mediatek.gemini.SimRoamingSettings.class.getName()//add by XXX        ,PropertiesCalculatorSettings.class.getName()//add by eyelike at 2015-1-27        //    };//C.    // add by eyelike at 2015-1-27    public static class PropertiesSettingsActivity extends Settings { /* empty */ }

代码添加在A.B.C.三处,分别用add by eyelike注释出来了。

评估报告请见:《系统属性调用评估报告 》
评估数据请见:《系统属性调用评估表》

eyelike@2015-01-28

0 0
原创粉丝点击