Settings源代码分析之wifi高级界面

转载请注明出处:http://blog.csdn.net/droyon/article/details/20055301。

文中不当之处,请指正。

之所以会注意到Wifi的高级界面,是因为,它很特别,它叫AdvancedWifiSettingsActivity,它的特别之处就是它配置了parent_fragment_class。

<activity android:name="Settings$AdvancedWifiSettingsActivity"
                android:label="@string/wifi_advanced_settings_label"
                android:configChanges="orientation|keyboardHidden|screenSize"
                android:clearTaskOnLaunch="true">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <action android:name="android.settings.WIFI_IP_SETTINGS" />
                <category android:name="android.intent.category.VOICE_LAUNCH" />
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
            <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
                android:value="com.android.settings.wifi.AdvancedWifiSettings" />
            <meta-data android:name="com.android.settings.TOP_LEVEL_HEADER_ID"
                android:resource="@id/wifi_settings" />
            <meta-data android:name="com.android.settings.PARENT_FRAGMENT_TITLE"
                android:resource="@string/wifi_settings" />
            <meta-data android:name="com.android.settings.PARENT_FRAGMENT_CLASS"
                android:value="com.android.settings.Settings$WifiSettingsActivity" />
        </activity>

关于meta-data配置,一般的界面只有前两行。例如WifiSettings

<activity-alias android:name=".wifi.WifiSettings"
                android:label="@string/wifi_settings"
                android:targetActivity="Settings$WifiSettingsActivity"
                android:configChanges="orientation|keyboardHidden|screenSize"
                android:exported="true"
                android:clearTaskOnLaunch="true">
            <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
                android:value="com.android.settings.wifi.WifiSettings" />
            <meta-data android:name="com.android.settings.TOP_LEVEL_HEADER_ID"
                android:resource="@id/wifi_settings" />
        </activity-alias>

在了解Android 设置(Settings)源代码时,我对这两个界面进行了如下测试:

1、新建Android应用,通过如下intent启动wifi高级界面

Intent intent=new Intent();
intent.setAction("android.settings.WIFI_IP_SETTINGS");
startActivity(intent);

启动界面如下方左图,点击左上角“<”号,会返回到WifiSettings界面。如下方右图。

Settings源代码分析之wifi高级界面_第1张图片                                  Settings源代码分析之wifi高级界面_第2张图片

2、新建Android 应用,通过如下intent启动

Intent intent = new Intent();
intent.setAction("android.settings.BLUETOOTH_SETTINGS");
startActivity(intent);

启动界面如下:

Settings源代码分析之wifi高级界面_第3张图片

我一直很纠结第一步中启动的wifi高级界面为什么会有左上角的“<”号,之前一直以为是因为AdvancedWifiSettingsActivity在配置中多了两项meta-data,今天删掉了多出来的meta-data,才发现认知错误。


其原因时因为在AndroidManifest中还配置了一个属性,正是这个属性,使wifi高级界面出现了左上角“<”号。

android:parentActivityName="Settings$WifiSettingsActivity" 

正是这条属性,让Wifi高级界面出现了左上角“<”号,并且点击时能够返回WifiSettings界面。



你可能感兴趣的:(设置应用解析,左上角尖号,wifi高级界面)