阅读:7842回复:4
Android8.1 Settings二级菜单修改
Android 8.1 Settings里面,Connected devices 里面有2个选项 Cast 和 Chromebook 客户想去掉,我看了一下ConnectedDeviceDashboardFragment.java里面的代码流程,一直没有看到跟Cast 和 Chromebook相关的,不知道他是怎么加载出来的。小伙伴们,有了解过这一块的逻辑吗? 我感觉像是动态获取的,但是没有找到相关的地方。。。
|
|
|
沙发#
发布于:2020-01-16 16:34
/frameworks/base/packages/SettingsLib/src/com/android/settingslib/drawer/CategoryKey.java:28: public static final String CATEGORY_DEVICE = "com.android.settings.category.ia.device";
|
|
|
板凳#
发布于:2020-01-16 17:03
果然我想的没错Bluetooth和USB 这 2 项是在 xml/connected_devices.xml 里面默认配置的,Printing , Cast , Chromebook是代码里面动态加载进来的,我看了一下Printing 和 Cast启动的页面都还是在Settings这个App里面的,而Chromebook启动的页面是属于com.android.google.gms这个是 google play service的一个页面了。
我看了一下代码流程,ConnectedDeviceDashboardFragment.java的父类是DashboardFragment.java里面有一个加载Title的操作, void refreshDashboardTiles(final String TAG) { getCategoryKey()方法获取key来加载Titles public String getCategoryKey() { 而这些key是根据传进来的Framgment类名来获取的。 看一下DashboardFragmentRegistry.java里面相关的部分: PARENT_TO_CATEGORY_KEY_MAP.put(ConnectedDeviceDashboardFragment.class.getName(),找一下CategoryKey.CATEGORY_DEVICE的定义: /frameworks/base/packages/SettingsLib/src/com/android/settingslib/drawer/CategoryKey.java public static final String CATEGORY_DEVICE = "com.android.settings.category.ia.device"; 在package/apps/Settings/AndroidMainfest.xml里面也2处Activity有这个属性, 这个2个Activity应该就是通过这个属性,让ConnectedDeviceDashboardFragment把他们2个的Title加载进来的。 我随便修改了一下这个定义: public static final String CATEGORY_DEVICE = "com.android.settings.category.iab.device"; 加了个b, 这样属性没有b的就匹配不到了。 mmm /frameworks/base/packages/SettingsLib/ 编译了一下,这个是编译一个支持jar包。 然后再mmm package/apps/Settings 编译Settings 安装Settings,果然现在只剩下了Bluetooth 和 USB 2个选项了。 我再修改一下package/apps/Settings/AndroidMainfest,xml的 Printing相关的里面,把他的匹配属性也加上b 再次编译Settings 安装,Printing出来了,这样就是去掉了 Cast 和 Chromebook 这样会有个问题,比如客户其他三方App希望通过这种方式匹配添加到Settings里面,他不知道我这里加了个b会匹配不到。后面有这个需要了再说吧 |
|
|
地板#
发布于:2021-09-02 14:34
qqq
|
|
|
4楼#
发布于:2021-09-02 14:38
aaa
|
|
|