阅读:7842回复:4

Android8.1 Settings二级菜单修改

楼主#
更多 发布于:2020-01-16 14:01
Android 8.1 Settings里面,Connected devices 里面有2个选项 Cast 和 Chromebook 客户想去掉,我看了一下ConnectedDeviceDashboardFragment.java里面的代码流程,一直没有看到跟Cast 和 Chromebook相关的,不知道他是怎么加载出来的。小伙伴们,有了解过这一块的逻辑吗? 我感觉像是动态获取的,但是没有找到相关的地方。。。
[url]http://190.lsal.cn/195/1329.gif?0728100424873[/url]
沙发#
发布于: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";
[url]http://190.lsal.cn/195/1329.gif?0728100424873[/url]
板凳#
发布于: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) {
        final PreferenceScreen screen = getPreferenceScreen();
        final DashboardCategory category =
                mDashboardFeatureProvider.getTilesForCategory(getCategoryKey());


getCategoryKey()方法获取key来加载Titles


public String getCategoryKey() {
       return DashboardFragmentRegistry.PARENT_TO_CATEGORY_KEY_MAP.get(getClass().getName());
   }

而这些key是根据传进来的Framgment类名来获取的。
看一下DashboardFragmentRegistry.java里面相关的部分:

PARENT_TO_CATEGORY_KEY_MAP.put(ConnectedDeviceDashboardFragment.class.getName(),
               CategoryKey.CATEGORY_DEVICE);
找一下
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会匹配不到。后面有这个需要了再说吧

图片

[url]http://190.lsal.cn/195/1329.gif?0728100424873[/url]
地板#
发布于:2021-09-02 14:34
qqq
[url]http://190.lsal.cn/195/1329.gif?0728100424873[/url]
4楼#
发布于:2021-09-02 14:38
aaa
[url]http://190.lsal.cn/195/1329.gif?0728100424873[/url]
游客

返回顶部