android Settings 分析

转载 2016年05月31日 11:16:45

可以模仿Settings其他菜单项加入自己想要的一级或二级子菜单项。

比如,在菜单Settings里加入一级和二级Usb Mode Settings菜单项 (以Android4.4 KK为例)

一. 加入一级子菜单项Usb Mode Settings, 加在About phone后面

1. packages/apps/Settings/AndroidManifest.xml
        <activity Android:name="Settings$DeviceInfoSettingsActivity"
                android:theme="@style/Theme.Holo.DialogWhenLarge"
                android:label="@string/device_info_settings"
                android:taskAffinity="com.android.settings"
                android:parentActivityName="Settings">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <action android:name="android.settings.DEVICE_INFO_SETTINGS" />
                <category android:name="android.intent.category.DEFAULT" />db
                <category android:name="android.intent.category.VOICE_LAUNCH" />
            </intent-filter>
            <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
                android:value="com.android.settings.DeviceInfoSettings" />
            <meta-data android:name="com.android.settings.TOP_LEVEL_HEADER_ID"
                android:resource="@id/about_settings" />
        </activity>

        <activity android:name="Settings$UsbModeSettingsActivity"
                android:theme="@style/Theme.SubSettingsDialogWhenLarge"
                android:label="@string/usb_mode_settings"
                android:taskAffinity="com.android.settings"
                android:parentActivityName="Settings">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <action android:name="android.settings.USB_MODE_SETTINGS" />
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
            <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
                android:value="com.android.settings.UsbModeSettings" />
            <meta-data android:name="com.android.settings.TOP_LEVEL_HEADER_ID"
                android:resource="@id/usb_mode_settings" />
        </activity>


2. packages/apps/Settings/res/xml/settings_headers.xml 
        <!-- About Device -->
        <dashboard-tile
                android:id="@+id/about_settings"
                android:title="@string/about_settings"
                android:fragment="com.android.settings.DeviceInfoSettings"
                android:icon="@drawable/ic_settings_about"
                />
                
        <!-- Usb Mode -->
        <dashboard-tile
                android:id="@+id/usb_mode_settings"
                android:title="@string/usb_mode_settings"
                android:fragment="com.android.settings.UsbModeSettings"
                android:icon="@drawable/ic_settings_about"
                />


 Lollipop
packages\apps\Settings\res\xml\dashboard_categories.xml        
        <!-- Usb Mode -->
        <dashboard-tile
                android:id="@+id/usb_mode_settings"
                android:title="@string/usb_mode_settings"
                android:fragment="com.android.settings.UsbModeSettings"
                android:icon="@drawable/ic_settings_about"
                />
3. packages\apps\Settings\src\com\android\settings\Settings.Java
     public static class DeviceInfoSettingsActivity extends SettingsActivity { /* empty */ }
+    public static class UsbModeSettingsActivity extends SettingsActivity { /* empty */ }
     public static class ApplicationSettingsActivity extends SettingsActivity { /* empty */ }

4. packages/apps/Settings/src/com/android/settings/Settings.java
            DeviceInfoSettings.class.getName(),
+            UsbModeSettings.class.getName(),
             ManageApplications.class.getName(),

Lollipop
packages\apps\Settings\src\com\android\settings\SettingsActivity.java
            DeviceInfoSettings.class.getName(),
+            UsbModeSettings.class.getName(),
            ManageApplications.class.getName(),

 

5. packages/apps/Settings/res/values/strings.xml
增加新字符串

新增部分
6. packages/apps/Settings/res/drawable/
添加图标

7. 模仿packages/apps/Settings/res/xml/device_info_settings.xml新加一layout文件
packages/apps/Settings/res/xml/usb_mode_settings.xml
      android:title="@string/about_settings">        
        <!-- Device status - launches activity -->
        <PreferenceScreen android:key="status_info"
                android:title="@string/device_status" 
                android:summary="@string/device_status_summary">
            <intent android:action="android.intent.action.MAIN"
                    android:targetPackage="com.android.settings"
                    android:targetClass="com.android.settings.deviceinfo.Status" />
        </PreferenceScreen>

<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
        android:title="@string/usb_mode_settings">
    <PreferenceCategory
            android:title="@string/usb_connection_category" />
    <CheckBoxPreference
        android:key="usb_mtp"
        android:title="@string/usb_mtp_title"
        android:summary="@string/usb_mtp_summary"
        />
    <CheckBoxPreference
        android:key="usb_mass_storage"
        android:title="@string/usb_ptp_title"
        android:summary="@string/usb_ptp_summary"
        />
</PreferenceScreen>

8. 模仿packages/apps/Settings/src/com/android/settings/DeviceInfoSettings.java新加一代码实现
packages/apps/Settings/src/com/android/settings/UsbModeSettings.java

 

二. 加入一级子菜单项Usb Mode Settings, 加在Developer options下面, 在"Desktop backup password"后面

1.packages/apps/Settings/AndroidManifest.xml
        <activity android:name="SetFullBackupPassword"
                android:theme="@style/Theme.SubSettingsDialogWhenLarge"
                android:exported="false">
        </activity>

        <activity android:name="UsbModeSettings"
                android:theme="@style/Theme.SubSettingsDialogWhenLarge"
                android:exported="false">
        </activity>


2. packages/apps/Settings/res/xml/development_prefs.xml
    <PreferenceScreen
            android:key="local_backup_password"
            android:title="@string/local_backup_password_title"
            android:summary="@string/local_backup_password_summary_none"
            android:persistent="false" >
        <intent
                android:action="android.settings.privacy.SET_FULL_BACKUP_PASSWORD"
                android:targetPackage="com.android.settings"
                android:targetClass="com.android.settings.SetFullBackupPassword" />
    </PreferenceScreen>

    <PreferenceScreen
            android:key="usb_mode"
            android:title="@string/usb_mode_settings"
            android:summary="@string/usb_mode_settings_summary"
        <intent
                android:action="android.intent.action.MAIN"
                android:targetPackage="com.android.settings"
                android:targetClass="com.android.settings.UsbModeSettings" />
    </PreferenceScreen>

3. /packages/apps/Settings/res/values/strings.xml
+    <string name="usb_mode_settings">USB mode settings</string>
......


4. 新加文件

      res/layout/usb_mode_settings.xml

     packages/apps/Settings/res/drawable/ 图标
 

    src/com/android/settings/UsbModeSettings.java

Android 5.1 Settings模块源码分析

前述: 本人已工作两年多,但是依然感觉还是Android的门外汉,之前一直从事Android的应用开发,每天就是各种调用SDK方法,各种拷贝网上的源码以及jar包,从来也不管为啥这样用,由于换了一份工...
  • dongxianfei
  • dongxianfei
  • 2016年07月21日 10:08
  • 3228

android settings源代码分析(3)

本章主要分析google settings里面存储模块的代码。
  • zhudaozhuan
  • zhudaozhuan
  • 2014年10月30日 16:31
  • 6617

Android Settings源代码数据储存简易分析

Android Settings源代码数据储存简易分析 在Android系统的设置里面,我们可以对手机的很多属性进行相关的设置,如铃声,显示屏亮度等等,Android将这些数据储存在一个名为sett...
  • xiaowan0404
  • xiaowan0404
  • 2014年10月19日 22:38
  • 2158

Android 5.1 Settings源码简要分析

转载请注明出处,谢谢~http://blog.csdn.net/u011974987/article/details/51004854; 概述:先声明:本人工作快两年了,仍是菜鸟级别的,惭愧啊!以前遇...
  • u011974987
  • u011974987
  • 2016年03月29日 12:36
  • 5541

android 7.0 Settings列表加载流程

Android 7.0 settings布局跟以前有很大的区别,之前用的是preference,7.0开始使用的是DrawerLayer,流程如下:...
  • yj934672573
  • yj934672573
  • 2017年01月20日 10:32
  • 1372

Android media媒体库分析之:分类别统计媒体文件大小

转载自:http://www.linuxidc.com/Linux/2015-03/114754.htm ==============================================...
  • tangxuankai
  • tangxuankai
  • 2015年06月15日 21:05
  • 756

Android L Settings界面结构简单分析

Android L Settings界面结构简单分析 Settings是Android系统很重要的模块,这部分也一直在看,很多时候都是在看某个具体的选项,比如WLAN,蓝牙这样具体的源码,但是对于主界...
  • long375577908
  • long375577908
  • 2017年03月21日 12:24
  • 396

Android Settings模块分析

http://www.360doc.com/content/13/0910/01/9171956_313396663.shtml
  • sdhgood
  • sdhgood
  • 2014年07月15日 15:17
  • 577

android 4.4 Settings分析

本问将回答以下八个问题,如有错误,敬请批评指正,不胜感激!(注:本文中的Settings解析基于android4.0+) 问题一、Settings的主界面是怎么实现的? 问题二、为什么使用hier...
  • JMC601
  • JMC601
  • 2014年07月31日 20:33
  • 1748

Android Settings应用分析

由于需要修改Setting默认设定的需要,需要分析下Setting的源码,以及数据存储与读取。 Android自带的应用程序存储在packages/apps目录下 主要目录和文件如下: ...
  • hufeng882412
  • hufeng882412
  • 2012年09月19日 11:06
  • 558
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:android Settings 分析
举报原因:
原因补充:

(最多只允许输入30个字)