国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統(tǒng) > Android > 正文

詳解Android 7.0 Settings 加載選項(xiàng)

2019-10-23 19:47:33
字體:
供稿:網(wǎng)友

先寫在前面,這說的Settings加載選項(xiàng)是指Settings這個應(yīng)用顯示在主界面的選項(xiàng),這個修改需要對系統(tǒng)源碼進(jìn)行修改。

Android 7.0 Settings頂部多了一個建議選項(xiàng),多了個側(cè)邊欄,操作更加便捷了。

android,7.0,settings      android,7.0,settings

                  原生7.0主界面                                                          原生7.0側(cè)邊欄

Android 6.0

之前做Android 6.0開發(fā)的,都會了解到6.0的Settings加載選項(xiàng)是通過加載dashboard_categories.xml,獲取需要顯示的選項(xiàng),并且在SettingsActivity中也進(jìn)行判斷是否要顯示,所以在6.0上添加一個選項(xiàng)是比較簡單的,直接在dashboard_categories.xml添加icon、title、summary,也可以添加目標(biāo)fragment和Intent,這樣就可以順利跳轉(zhuǎn)到對應(yīng)的界面了。但是在7.0上,google對Settings進(jìn)行了重構(gòu)。

Android 7.0

7.0的Settings的選項(xiàng)不再從dashboard_categories.xml中加載選項(xiàng)列表,而是通過在Androidmanifest.xml中,配置intent-filter的Action,在通過PackageManager進(jìn)行指定的Action進(jìn)行搜索,那么就可以獲取到需要顯示的選項(xiàng)列表了,并且也需要在代碼中進(jìn)行判斷,判斷哪些功能需要顯示與否。

TileUtils.Java中通過幾個Action進(jìn)行獲取系統(tǒng)中對應(yīng)的activity,如Settings中的幾個

private static final String SETTINGS_ACTION ="com.android/190020.html">android.settings.action.SETTINGS";private static final String OPERATOR_SETTINGS ="com.android.settings.OPERATOR_APPLICATION_SETTING";private static final String OPERATOR_DEFAULT_CATEGORY ="com.android.settings.category.wireless";private static final String MANUFACTURER_SETTINGS ="com.android.settings.MANUFACTURER_APPLICATION_SETTING";private static final String MANUFACTURER_DEFAULT_CATEGORY ="com.android.settings.category.device";

通過PackageManager進(jìn)行搜索,獲取到這一系列的activity信息,

PackageManager pm = context.getPackageManager();List<ResolveInfo> results = pm.queryIntentActivitiesAsUser(intent,PackageManager.GET_META_DATA, user.getIdentifier());

并且在AndroidManifest.xml通過meta-data配置了icon、title、summary,那這就有Settings中顯示的圖標(biāo)、標(biāo)題和說明。還有在Settings中顯示的分類、目標(biāo)Fragment。

Settings 的AndroidManifest.xml 下面那代碼是Settings->about phone的Activity配置。

<activity android:name="Settings$DeviceInfoSettingsActivity"        android:theme="@style/Theme.SubSettingsDialogWhenLarge"        android:label="@string/device_info_settings"        android:icon="@drawable/ic_settings_about"        android:taskAffinity="com.android.settings"        android:parentActivityName="Settings">      <intent-filter android:priority="1">        <action android:name="android.settings.DEVICE_INFO_SETTINGS" />        <category android:name="android.intent.category.DEFAULT" />      </intent-filter>      <intent-filter>        <action android:name="android.intent.action.MAIN" />        <category android:name="android.intent.category.DEFAULT" />        <category android:name="android.intent.category.VOICE_LAUNCH" />      </intent-filter>      <intent-filter android:priority="-1">        <action android:name="com.android.settings.action.SETTINGS" />      </intent-filter>      <meta-data android:name="com.android.settings.category"        android:value="com.android.settings.category.system" />      <meta-data android:name="com.android.settings.title"        android:resource="@string/about_settings" />      <meta-data android:name="com.android.settings.FRAGMENT_CLASS"        android:value="com.android.settings.DeviceInfoSettings" />      <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED"        android:value="true" />    </activity>

Settings顯示各選項(xiàng)的思路比較簡單,所以直接在Settings里面添加功能選項(xiàng)還是比較簡單的。

添加第三方apk到Settings選項(xiàng)中

如果需要Settings中添加打包好的apk,需要三個步驟。

1. 添加action。

可以被PackageManager搜索到的activity,搜索到后添加到Settings的選項(xiàng)列表中

 

復(fù)制代碼 代碼如下:

private static final String EXTRA_SETTINGS_ACTION ="com.android.settings.action.EXTRA_SETTINGS";

 

1、添加顯示的選項(xiàng)信息。

在該apk的AndroidManifest.xml對應(yīng)的啟動activity中添加以下meta-data。最好是有該apk提供公司的技術(shù)支持,不然有混淆的代碼就比較難進(jìn)行更改、回編譯了。

  /**   * The key used to get the category from metadata of activities of action   * {@link #EXTRA_SETTINGS_ACTION}   * The value must be one of:   * <li>com.android.settings.category.wireless</li>   * <li>com.android.settings.category.device</li>   * <li>com.android.settings.category.personal</li>   * <li>com.android.settings.category.system</li>   */  private static final String EXTRA_CATEGORY_KEY = "com.android.settings.category";  /**   * Name of the meta-data item that should be set in the AndroidManifest.xml   * to specify the icon that should be displayed for the preference.   */  public static final String META_DATA_PREFERENCE_ICON = "com.android.settings.icon";  /**   * Name of the meta-data item that should be set in the AndroidManifest.xml   * to specify the title that should be displayed for the preference.   */  public static final String META_DATA_PREFERENCE_TITLE = "com.android.settings.title";  /**   * Name of the meta-data item that should be set in the AndroidManifest.xml   * to specify the summary text that should be displayed for the preference.   */  public static final String META_DATA_PREFERENCE_SUMMARY = "com.android.settings.summary";

在TileUtils.java的白名單中添加對應(yīng)的包名。

這個也是Android考慮到的一些安全上的問題,沒有添加到白名單上面的包名,就不會顯示出來。

  /// Extra package white list for add item to Settings @{  private static final String[] EXTRA_PACKAGE_WHITE_LIST = {};  /// @}

最后就是全編,刷機(jī)驗(yàn)證了。

相比android6.0,在7.0上添加功能選項(xiàng)顯得更簡單了,只需要寫好了功能,在Settings的AndroidManifest.xml中添加必要的參數(shù),或者是在獨(dú)立的apk中AndroidManifest.xml中配置必要的參數(shù),再在TileUtils.java中添加包名就好了。需要修改的地方更少了,并且Google將很方方法放到了com.android.settinglibs里,精簡了一部分代碼。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持VEVB武林網(wǎng)。

 

注:相關(guān)教程知識閱讀請移步到Android開發(fā)頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 孟村| 哈尔滨市| 韶关市| 碌曲县| 红安县| 慈溪市| 定远县| 四子王旗| 泾川县| 新乐市| 南澳县| 县级市| 清水县| 德惠市| 宁河县| 山丹县| 安吉县| 新绛县| 奇台县| 出国| 仙桃市| 津南区| 鄂托克前旗| 庆元县| 祥云县| 忻州市| 闻喜县| 常宁市| 华宁县| 尖扎县| 曲阳县| 沙湾县| 毕节市| 楚雄市| 白水县| 高安市| 南华县| 凭祥市| 古浪县| 美姑县| 镇原县|