【安卓13】谷歌桌面Launcher3屏蔽全部应用里面的部分app

devtools/2024/9/24 21:24:55/
1、需求

我们在做谷歌桌面时,移植了一些我们自己的应用,但是有些应用是服务型的app,不需要显示在主页,要隐藏掉

2、解决方案
方法1:

解决办法很简单,阅读源码发现,谷歌桌面添加全部应用的源码在这里com/android/launcher3/model/AllAppsList.java
在这里插入图片描述
在这个add 方法里,根据mAppFilter里面的方法去过滤掉不需要add 的应用
在这里插入图片描述
这个类读取了一个数组文件R.array.filtered_components,这个文件里面定义了需要过滤的组件,我这里查看源码这个数组文件是空的,没有过滤任何app,这个文件在res/values/config.xml里面定义

可以在这里添加要过滤的包名

    <!-- 定义一个字符串数组,用于存储需要过滤的组件名称 --><string-array name="filtered_components"><!-- 使用完整的类名,或者包名+类名的形式 --><item>com.example.package.SomeActivity</item><item>com.example.package.AnotherService</item><item>com.example.package.YetAnotherReceiver</item><!-- 添加更多需要过滤的组件 --></string-array>
方法2

直接在AppFilter.java类里面过滤

    private final Set<ComponentName> mFilteredComponents;private List<String> mFilterAppList = null;public AppFilter(Context context) {mFilteredComponents = Arrays.stream(context.getResources().getStringArray(R.array.filtered_components)).map(ComponentName::unflattenFromString).collect(Collectors.toSet());mFilterAppList.add("你要过滤的包名");}public boolean shouldShowApp(ComponentName app) {if (mFilterAppList != null && mFilterAppList.contains(app.getPackageName())) {return false;}return !mFilteredComponents.contains(app);}
方法3

这个方法要修改编译文件,大家可不看,这里只提供一个思路,不同的供应商修改不一样
源码目录新增一个黑名单文件,修改编译MK文件,在MK文件里面将这个黑名单文件copy到out输出目录,比如/vendor/etc/google_hide_apk_list.txt,这样在编译固件的时候,系统的这个目录会包含这个文件,这样就可以在Launcher3里面读取这个文件找到要过滤的包名

public class AppFilter {private final Set<ComponentName> mFilteredComponents;private List<String> mFilterAppList = null;public AppFilter(Context context) {mFilteredComponents = Arrays.stream(context.getResources().getStringArray(R.array.filtered_components)).map(ComponentName::unflattenFromString).collect(Collectors.toSet());mFilterAppList = getBlackList();}public boolean shouldShowApp(ComponentName app) {if (mFilterAppList != null && mFilterAppList.contains(app.getPackageName())) {return false;}return !mFilteredComponents.contains(app);}private List<String> getBlackList() {mFilterAppList = new ArrayList<>();try (BufferedReader bfd = new BufferedReader(new FileReader("/vendor/etc/google_hide_apk_list.txt"))) {String retain;while ((retain = bfd.readLine()) != null) {mFilterAppList.add(retain.trim());if (!TextUtils.isEmpty(retain)){Log.d("AppFilter", "blacklist add packageName: " + retain);}}} catch (IOException e) {e.printStackTrace();}return mFilterAppList;}}
总结

这是常用的几种方法,第二种简单明了,直接在类里面过滤,还有什么疑问可留言沟通


http://www.ppmy.cn/devtools/24586.html

相关文章

使用FutureTask来提高接口的并发性能优化经验以及踩坑记录

背景&#xff1a; 批量数据采集接口&#xff0c;随着时间的推移&#xff0c;设备一次性上传的数据包越来越大&#xff0c;大到一次性需要处理64条数据&#xff0c;而每条数据需要花费大量的时间去处理&#xff0c;那么如果串行对任务进行处理的话&#xff0c;那么总时间就是N …

CHiME-8多通道远场语音识别Baseline介绍

语音领域每年都有很多比赛&#xff0c;每个比赛都有自己的侧重点&#xff0c;其中CHiME系列比赛的侧重点就是多通道远场语音识别&#xff0c;与其他的语音识别比赛有所区别的是&#xff0c;CHiME提供分布式麦克风和麦克风阵列数据&#xff0c;这样可以选择合适的前端算法以降低…

虚拟机网络桥接模式无法通信,获取到的ip为169.254.X.X

原因&#xff1a;VMware自动选择的网卡可能不对 解决&#xff1a;编辑-虚拟网络编辑器-更改桥接模式-选择宿主机物理网卡&#xff0c;断开虚拟机网络连接后重新连接即可

从零手写实现 apache Tomcat-01-入门介绍

创作缘由 平时使用 tomcat 等 web 服务器不可谓不多&#xff0c;但是一直一知半解。 于是想着自己实现一个简单版本&#xff0c;学习一下 tomcat 的精髓。 怎么实现一个 tomcat 呢&#xff1f; Tomcat就像是一个用Java语言搭起来的大舞台&#xff0c;专门用来演出那些用Jav…

驱动电路的设计

采用驱动芯片EG2104来驱动MOS管。 图 3.6 驱动电路 如图3.6是驱动电路原理图&#xff0c;EG2104 是一款高性价比的带SD死区功能的 MOS 管、IGBT 管栅极驱动专用芯片。内部集成了逻辑信号输入处理电路、死区时控制电路、电平位移电路、脉冲滤波电路及输出驱动电路。C1是滤波电容…

华为配置mDNS网关示例(AP与AC间二层转发)

华为配置mDNS网关示例&#xff08;AP与AC间二层转发&#xff09; 组网图形 图1 配置mDNS网关组网图 组网需求配置思路操作步骤配置文件 组网需求 如图1所示&#xff0c;某企业的移动终端通过WLAN连接网络&#xff0c;AP_1和AP_2分别与AC之间采用二层转发。部门1和部门2分别属…

在kuboard中添加k8s集群

1.登录kuboard后&#xff0c;点击添加集群面板 系统会跳转到k8s集群添加页面&#xff0c;按照页面提示输入自身的集群信息即可&#xff0c;此处没有什么难点。 添加成功后&#xff0c;点击集群面板&#xff0c;然后点击集群概要信息&#xff0c;就可以查看集群节点信息。 集群节…

力扣数据库题库学习(4.29日)--1633. 各赛事的用户注册率

1633. 各赛事的用户注册率 问题链接 问题分析 编写解决方案统计出各赛事的用户注册百分率&#xff0c;保留两位小数。返回的结果表按 percentage 的 降序 排序&#xff0c;若相同则按 contest_id 的 升序 排序。 注册率是单个项目的注册人数与总人数的比率。 涉及的知识点主…