詳解Android 7.0 Settings 加載選項(xiàng)
先寫在前面,這說的Settings加載選項(xiàng)是指Settings這個(gè)應(yīng)用顯示在主界面的選項(xiàng),這個(gè)修改需要對(duì)系統(tǒng)源碼進(jìn)行修改。
Android 7.0 Settings頂部多了一個(gè)建議選項(xiàng),多了個(gè)側(cè)邊欄,操作更加便捷了。
原生7.0主界面 原生7.0側(cè)邊欄
Android 6.0
之前做Android 6.0開發(fā)的,都會(huì)了解到6.0的Settings加載選項(xiàng)是通過加載dashboard_categories.xml,獲取需要顯示的選項(xiàng),并且在SettingsActivity中也進(jìn)行判斷是否要顯示,所以在6.0上添加一個(gè)選項(xiàng)是比較簡單的,直接在dashboard_categories.xml添加icon、title、summary,也可以添加目標(biāo)fragment和Intent,這樣就可以順利跳轉(zhuǎn)到對(duì)應(yīng)的界面了。但是在7.0上,google對(duì)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中通過幾個(gè)Action進(jìn)行獲取系統(tǒng)中對(duì)應(yīng)的activity,如Settings中的幾個(gè)
private static final String SETTINGS_ACTION ="com.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,需要三個(gè)步驟。
1. 添加action。
可以被PackageManager搜索到的activity,搜索到后添加到Settings的選項(xiàng)列表中
private static final String EXTRA_SETTINGS_ACTION ="com.android.settings.action.EXTRA_SETTINGS";
1、添加顯示的選項(xiàng)信息。
在該apk的AndroidManifest.xml對(duì)應(yīng)的啟動(dò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的白名單中添加對(duì)應(yīng)的包名。
這個(gè)也是Android考慮到的一些安全上的問題,沒有添加到白名單上面的包名,就不會(huì)顯示出來。
/// 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)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Android中Service與Activity之間通信的幾種方式
本篇文章主要介紹了Android中Service與Activity之間通信的幾種方式,Activity主要負(fù)責(zé)前臺(tái)頁面的展示,Service主要負(fù)責(zé)需要長期運(yùn)行的任務(wù),具有一定的參考價(jià)值,有興趣的可以了解一下。2017-02-02Android中實(shí)現(xiàn)自動(dòng)生成布局View的初始化代碼方法
這篇文章主要介紹了Android中實(shí)現(xiàn)自動(dòng)生成布局View的初始化代碼方法,本文使用解析layout 布局文件的方法實(shí)現(xiàn)需求,需要的朋友可以參考下2014-10-10Android HorizontalScrollView滑動(dòng)與ViewPager切換案例詳解
這篇文章主要介紹了Android HorizontalScrollView滑動(dòng)與ViewPager切換案例詳解,本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-08-08Android 驗(yàn)證碼功能實(shí)現(xiàn)代碼
這篇文章主要介紹了Android 驗(yàn)證碼功能實(shí)現(xiàn)代碼的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2016-08-08實(shí)例詳解Android快速開發(fā)工具類總結(jié)
這篇文章主要介紹了實(shí)例詳解Android快速開發(fā)工具類總結(jié)的相關(guān)資料,需要的朋友可以參考下2016-01-01android簡易文件管理器實(shí)例(列表式文件目錄)
下面小編就為大家?guī)硪黄猘ndroid簡易文件管理器實(shí)例(列表式文件目錄)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-04-04Android 自定義View結(jié)合自定義TabLayout實(shí)現(xiàn)頂部標(biāo)簽滑動(dòng)效果
小編最近在做app的項(xiàng)目,需要用到tablayout實(shí)現(xiàn)頂部的滑動(dòng)效果,文中代碼用到了自定義item,代碼也很簡單,感興趣的朋友跟隨腳本之家小編一起看看吧2018-07-07