首先Settings 的路径: packages/apps/Settings 从AndroidMainfest.xml 中

 <activity android:name="Settings"           android:taskAffinity="com.android.settings"           android:label="@string/settings_label_launcher"           android:launchMode="singleTask">       <intent-filter android:priority="1">            <action android:name="android.settings.SETTINGS" />            <category android:name="android.intent.category.DEFAULT" />       intent-filter>       <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED"            android:value="true" /> activity>

可见 Settings的入口是Settings 而非SettingsActivity
taskAffinity属性 具体解释 见如下链接:
http://blog.csdn.net/zhangjg_blog/article/details/10923643

<activity-alias android:name="Settings"                android:taskAffinity="com.android.settings"                android:label="@string/settings_label_launcher"                android:launchMode="singleTask"                android:targetActivity="Settings">            <intent-filter>                <action android:name="android.intent.action.MAIN" />                <category android:name="android.intent.category.DEFAULT" />                <category android:name="android.intent.category.LAUNCHER" />            intent-filter>            <meta-data android:name="android.app.shortcuts" android:resource="@xml/shortcuts"/>activity-alias>

activity-alias 属于 activity 的一个子集,实现程序多入口配置, 详见:
http://www.androidchina.net/2970.html

Settings.java源码:

public class Settings extends SettingsActivity {    /*    * Settings subclasses for launching independently.    */    public static class BluetoothSettingsActivity extends SettingsActivity { /* empty */ }    public static class WirelessSettingsActivity extends SettingsActivity { /* empty */ }    public static class SimSettingsActivity extends SettingsActivity { /* empty */ }    public static class Lte4GEnableActivity extends SettingsActivity { /* empty */ }    .....}

Settings 继承了 SettingsActivity ,并创建了很多的 未实现方法 内部静态类,所有的类 的父类都是SettingsActivity, 可见所有的方法实现都在其中

SettingsActivity 从onCreate()方法中调用getMetaData() 如下:

    /**     * 获取activity 额外的数据 mFragmentClass ,如果可以获取这个数据 ,则可以显示     * mFragmentClass 对应的activity     *     *     * ActivityInfo: 获得应用程序中或者 节点的信息     *     * 元素可以作为子元素,被包含在、 、元素中     *     */private void getMetaData() {        try {            //            ActivityInfo ai = getPackageManager().getActivityInfo(getComponentName(),                    PackageManager.GET_META_DATA);            if (ai == null || ai.metaData == null) return;            mFragmentClass = ai.metaData.getString(META_DATA_KEY_FRAGMENT_CLASS);            mActivityAction = ai.metaData.getString(META_DATA_KEY_LAUNCH_ACTIVITY_ACTION);        } catch (NameNotFoundException nnfe) {            // No recovery            Log.d(LOG_TAG, "Cannot get Metadata for: " + getComponentName().toString());        } }

附 Settings 源码地址:
https://github.com/chenxinsi/Settings

更多相关文章

  1. Manifest merger failed : Attribute application@allowBackup v
  2. Android(安卓)GridView之实现单元格合并,以及第一个item点击无响
  3. Android(安卓)NDK: 子线程中C调用Java
  4. android集成环信sdk出现app:transformClassesWithDexForDebug.”
  5. Retrofit源码解析(一)
  6. 去除svn中方法
  7. Android(安卓)学习笔记 databinding简单使用:使用databinding在li
  8. android学习日记之fragment
  9. android 反射应用

随机推荐

  1. Android ueventd解析
  2. Android笔记---四大组件之Content Provid
  3. android 简单例子
  4. Android安全机制之反编译
  5. 《Android多功能日历教程》
  6. Android 第六天重置版_Activity
  7. PopupWindow的简单使用(结合RecyclerView)
  8. Android_GPS
  9. Unreal Engine 4,安装CodeWorksforAndroid
  10. 深入解析Android declare-styleable attr