转载请注明出处: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界面。如下方右图。
2、新建Android 应用,通过如下intent启动
Intent intent = new Intent();
intent.setAction("android.settings.BLUETOOTH_SETTINGS");
startActivity(intent);
启动界面如下:
我一直很纠结第一步中启动的wifi高级界面为什么会有左上角的“<”号,之前一直以为是因为AdvancedWifiSettingsActivity在配置中多了两项meta-data,今天删掉了多出来的meta-data,才发现认知错误。
其原因时因为在AndroidManifest中还配置了一个属性,正是这个属性,使wifi高级界面出现了左上角“<”号。
android:parentActivityName="Settings$WifiSettingsActivity"
正是这条属性,让Wifi高级界面出现了左上角“<”号,并且点击时能够返回WifiSettings界面。