Android N Setttings 零-壹 读源码------first part
来源:互联网 发布:装修设计师知乎 编辑:程序博客网 时间:2024/05/16 15:59
首先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: 获得应用程序中<activity/>或者 <receiver />节点的信息 * * <meta-data>元素可以作为子元素,被包含在<activity>、<application> 、<service>和<receiver>元素中 * */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 0
- Android N Setttings 零-壹 读源码------first part
- Refactoring Patterns (First Part)
- Refactoring Patterns (First Part)
- Chapter7: Classes(First Part)
- 编译android源码学习的First Step
- Android N NotificationManagerService源码分析
- android N dmesg源码分析
- First Preview of Android N: Developer APIs & Tools
- CompizConfig Setttings Manager
- Retrofit——A type-safe HTTP client for Android and Java(The first part)
- N!中的零
- 统计n!尾部零
- 【android源码】编译android M源码、刷机,开启源码学习的First Step
- 零基础学Android源码之Handler机制
- Android-first
- Android --first
- Sentiment of 《First Blood Part II》
- the part that hit the pavement first
- (OK) Lineage-14.1(Android 7)
- 安卓事件传递机制图解
- JQuery UI开发技巧
- 创建Maven工程(web项目)
- Unity编辑器中Status窗口详解
- Android N Setttings 零-壹 读源码------first part
- 理解Hibernate的三种实例状态
- conda httperror http none none for url none Anaconda更新失败
- C++基础·四
- 使用std::lower_bound和std::upper_bound解决常见的二分查找问题
- Dagger2基础与进阶
- SHTML和HTML的区别
- 在centos7中安装redis
- Java实现归并排序