Android BSP 开发之六
1.设定Android settings中某个xml文件(包括其子项)或者某个Preference不被搜索到
设定某个xml文件(包括子项)不被搜索到
找到该xml文件对应的fragment java文件中的SEARCH_INDEX_DATA_PROVIDER,在该provider中对isPageSearchEnabled方法进行重写并返回false.
public static final SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =new BaseSearchIndexProvider() {@Overridepublic List<SearchIndexableResource> getXmlResourcesToIndex(Context context,boolean enabled) {List<SearchIndexableResource> indexables = new ArrayList<>();SearchIndexableResource indexable = new SearchIndexableResource(context);indexable.xmlResId = R.xml.accessibility_vibration_settings;indexables.add(indexable);return indexables;}@Overrideprotected boolean isPageSearchEnabled(Context context) {return false;}};
设定特定的Preference不被搜索到
找到这个特定的Preference对应的xml文件所在的fragment java文件中的SEARCH_INDEX_DATA_PROVIDER, 对该Provider中的getNonIndexableKeys方法进行重写.
public static final SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =new BaseSearchIndexProvider() {@Overridepublic List<SearchIndexableResource> getXmlResourcesToIndex(Context context,boolean enabled) {List<SearchIndexableResource> indexables = new ArrayList<>();SearchIndexableResource indexable = new SearchIndexableResource(context);indexable.xmlResId = R.xml.accessibility_settings;indexables.add(indexable);return indexables;}@Overridepublic List<String> getNonIndexableKeys(Context context) {final List<String> nonIndexableKeys = super.getNonIndexableKeys(context);nonIndexableKeys.add("vibration_preference_screen"); //这个key为特定preference keyreturn nonIndexableKeys;}};
2.在长按Power弹出的选项中添加或删除项
在长按power弹出的选项中添加或删除某一项,在frameworks/base/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsDialog.java文件中定义一个私有类继承SinglePressAction.
private final class BatteryShelfModeAction extends SinglePressAction{private BatteryShelfModeAction() {super(R.drawable.ic_lock_power_off, //display iconandroid.R.string.battery_shelf_mode_title_in_power_menu); //display icon label}@Overridepublic boolean showDuringKeyguard() {return true;}@Overridepublic boolean showBeforeProvisioning() {return true;}@Overridepublic void onPress() {// enter battery shelf modeIntent batteryShelfDialogIntent = new Intent();batteryShelfDialogIntent.setComponent(new ComponentName("com.wistron.touchfwupdate", "com.wistron.battery.BatteryShelfMode"));batteryShelfDialogIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);mContext.startActivity(batteryShelfDialogIntent);}}
在 GlobalActionsDialog.java文件中的createDialog 方法中找到globalActionsList
mItems = new ArrayList<Action>();String[] defaultActions = mContext.getResources().getStringArray(R.array.config_globalActionsList);ArraySet<String> addedKeys = new ArraySet<String>();mHasLogoutButton = false;mHasLockdownButton = false;for (int i = 0; i < defaultActions.length; i++) {
在frameworks/base/core/res/res/values/config.xml中的config_globalActionsList
添加key
<string-array translatable="false" name="config_globalActionsList"><item>power</item><item>restart</item><item>lockdown</item><item>logout</item><item>bugreport</item><item>screenshot</item><item>shelf_mode</item><item>emergency</item></string-array>
在 GlobalActionsDialog.java文件中的createDialog 方法中添加
for (int i = 0; i < defaultActions.length; i++) {String actionKey = defaultActions[i];if (addedKeys.contains(actionKey)) {// If we already have added this, don't add it again.continue;}if (GLOBAL_ACTION_KEY_POWER.equals(actionKey)) {mItems.add(new PowerAction());} else if (GLOBAL_ACTION_KEY_AIRPLANE.equals(actionKey)) {mItems.add(mAirplaneModeOn);} else if (GLOBAL_ACTION_KEY_BUGREPORT.equals(actionKey)) {if (Settings.Global.getInt(mContext.getContentResolver(),Settings.Global.BUGREPORT_IN_POWER_MENU, 0) != 0 && isCurrentUserOwner()) {mItems.add(new BugReportAction());}} else if (GLOBAL_ACTION_KEY_SILENT.equals(actionKey)) {if (mShowSilentToggle) {mItems.add(mSilentModeAction);}} else if (GLOBAL_ACTION_KEY_USERS.equals(actionKey)) {if (SystemProperties.getBoolean("fw.power_user_switcher", false)) {addUsersToMenu(mItems);}} else if (GLOBAL_ACTION_KEY_SETTINGS.equals(actionKey)) {mItems.add(getSettingsAction());} else if (GLOBAL_ACTION_KEY_LOCKDOWN.equals(actionKey)) {if (Settings.Secure.getIntForUser(mContext.getContentResolver(),Settings.Secure.LOCKDOWN_IN_POWER_MENU, 0, getCurrentUser().id) != 0&& shouldDisplayLockdown()) {mItems.add(getLockdownAction());mHasLockdownButton = true;}} else if (GLOBAL_ACTION_KEY_VOICEASSIST.equals(actionKey)) {mItems.add(getVoiceAssistAction());} else if (GLOBAL_ACTION_KEY_ASSIST.equals(actionKey)) {mItems.add(getAssistAction());} else if (GLOBAL_ACTION_KEY_RESTART.equals(actionKey)) {mItems.add(new RestartAction());} else if (GLOBAL_ACTION_KEY_SCREENSHOT.equals(actionKey)) {mItems.add(new ScreenshotAction());} else if (GLOBAL_ACTION_KEY_LOGOUT.equals(actionKey)) {if (mDevicePolicyManager.isLogoutEnabled()&& getCurrentUser().id != UserHandle.USER_SYSTEM) {mItems.add(new LogoutAction());mHasLogoutButton = true;}} else if (GLOBAL_ACTION_KEY_EMERGENCY.equals(actionKey)) {if (!mEmergencyAffordanceManager.needsEmergencyAffordance()) {mItems.add(new EmergencyDialerAction());}} else if (GLOBAL_ACTION_KEY_BATTERY_SHELF_MODE.equals(actionKey)) {
// if (!SystemProperties.get("ro.boot.hwid", "0").equals("0"))mItems.add(new BatteryShelfModeAction());}else {Log.e(TAG, "Invalid global action key " + actionKey);}// Add here so we don't add more than one.addedKeys.add(actionKey);}
相关文章:
Android BSP 开发之六
1.设定Android settings中某个xml文件(包括其子项)或者某个Preference不被搜索到 设定某个xml文件(包括子项)不被搜索到 找到该xml文件对应的fragment java文件中的SEARCH_INDEX_DATA_PROVIDER,在该provider中对isPageSearchEnabled方法进行重写并…...
mybatis的使用,mybatis的实现原理,mybatis的优缺点,MyBatis缓存,MyBatis运行的原理,MyBatis的编写方式
文章目录 MyBatis简介结构图Mybatis缓存(一级缓存、二级缓存)MyBatis是什么?mybatis的实现原理JDBC编程有哪些不足之处,MyBatis是如何解决这些问题的?Mybatis优缺点优点缺点映射关系 MyBatis的解析和运行原理MyBatis的…...
Effective Modern C++(1.顶层const与底层const)
1.顶层const与底层const的定义 const修饰的变量不可以改变,那么他就是顶层const,如: const int a 10; 那么,对于 const int *const p new int(10); 第二个const就是顶层const,因为他修饰的是p;第一个…...
mmsegmentation学习笔记
mmsegmentation教程 下载预训练权重 github–>mmsegmentation–>model zoo–>XXX model(如:PSPNet)–>找到预选连权重与config的前缀一致:pspnet_r50-d8_4xb2-40k_cityscapes-512x1024 (model) 了解配置文件 查看…...
RabbitMQ简易安装
一般来说安装 RabbitMQ 之前要安装 Erlang ,可以去Erlang官网下载。接着去RabbitMQ官网下载安装包,之后解压缩即可。 Erlang官方下载地址:Downloads - Erlang/OTP RabbitMQ官方下载地址:Downloading and Installing RabbitMQ —…...
Mac M1 安装Docker打包arm64的python项目的镜像包
1、首先安装Docker,到官网下载,选择apple chip版 Docker中文网 官网 2、双击下载的dmg文件,在弹出框中之间拖拽到右边 3、打开docker,修改国内镜像源,位置在配置-DockerEngine "registry-mirrors": ["…...
『OPEN3D』1.8 点云的配准理论
点云的配准是将不同的3D点云对齐成一个完成的点云模型;配准的目标是找到两帧点云之间的相对旋转(rotation)与平移(translation),使得两份点云中有重叠的区域能够完好拼接。 点云配准示例图(来自…...
Python数据结构
目录 5.1. 列表详解 5.1.1. 用列表实现堆栈 5.1.2. 用列表实现队列 5.1.3. 列表推导式 5.1.4. 嵌套的列表推导式 5.2. del 语句 5.3. 元组和序列 5.4. 集合 5.5. 字典 5.6. 循环的技巧 5.7. 深入条件控制 5.8. 序列和其他类型的比较 本章深入讲解之前学过的一些内容…...
突发!新华三总裁《致全体员工的一封信》,中高层全面降薪10%-20%!
* 你好,我是前端队长,在职场,玩副业,文末有福利! 精彩回顾:进了央企,拿了户口,却感觉被困住了。 11月23号,某社交平台爆出了新华三总裁于英涛的《致全体员工的一封信》&a…...
QIIME 2介绍
QIIME 2(Quantitative Insights Into Microbial Ecology 2)是一个用于分析和解释微生物组数据的开源生物信息学工具。它是QIIME的第二个版本,经过重新设计以提高灵活性、可扩展性和可重复性。 1. 关于QIIME 2的一些重要特征和概念࿱…...
Spring Cloud Gateway 的简单介绍和基本使用
前言 本文主要对Spring Cloud Gateway进行简单的概念介绍,并通过多模块编程的方式进行一个简单的实操。 文章目录 前言1 什么是网关(概念)2 微服务中的网关2.1 问题12.2 问题2 3 网关作用4 Spring Cloud Gateway组成5 Spring Cloud Gateway基…...
Leaflet结合Echarts实现迁徙图
效果图如下: <!DOCTYPE html> <html><head><title>Leaflet结合Echarts4实现迁徙图</title><meta charset"utf-8" /><meta name"viewport" content"widthdevice-width, initial-scale1.0">…...
在mysql存储过程中间部分,使用游标遍历动态结果集(游标动态传参使用)
mysql游标动态传参实现(动态游标) 1.问题2.需求描述3.实现3.1.使用3.2.代码(直接看这都可以) 1.问题 众所周知,mysql存储过程功能是没有oracle的包功能强大的,但是在去O的趋势下,mysql存储过程的…...
全球SAR卫星大盘点与回波数据处理专栏目录
近年来,随着商业航天的蓬勃发展,商业SAR卫星星座成为美欧等主要航天国家的发展重点,目前已在全球范围内涌现出众多初创公司进军商业SAR领域,开始构建大规模商业微小SAR卫星星座,其所具有的创新服务能力将为传统的商业遥…...
C语言重点编程题——21-30
目录 21. 从键盘输入的10个整数中,找出第一个能被7整除的数。若找到,打印此数后退出循环;若未找到,打印"not exist" ★★★★22.有一个一维数组,内放10个学生成绩,写一个函数,求出平均分。 23.有N个学生,每个学生的信息包括学号、 性别、姓名、四门课的成绩…...
pip install 使用清华镜像源
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple some-package 官方文档: pypi | 镜像站使用帮助 | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror...
VBA技术资料MF86:将PPT文件批量另存为PDF文件
我给VBA的定义:VBA是个人小型自动化处理的有效工具。利用好了,可以大大提高自己的工作效率,而且可以提高数据的准确度。我的教程一共九套,分为初级、中级、高级三大部分。是对VBA的系统讲解,从简单的入门,到…...
taro h5 ios解决input不能自动获取焦点拉起键盘
描述:页面中有个按钮,点击跳转到第二个页面(有input),能直接获取焦点拉起键盘输入 安卓: 直接用focus() ios: focus无效,必须手动拉起 原理: 点击按钮的时候拉起一…...
「Docker」如何在苹果电脑上构建简单的Go云原生程序「MacOS」
介绍 使用Docker开发Golang云原生应用程序,使用Golang服务和Redis服务 注:写得很详细 为方便我的朋友可以看懂 环境部署 确保已经安装Go、docker等基础配置 官网下载链接直达:Docker官网下载 Go官网下载 操作步骤 第一步 创建一个…...
Vue环境的搭建
1.Vue开发的两种方式 (1)核心包传统开发模式 基于html/css/js文件,直接引入,开发Vue。 (2)工程化开发模式(更常用的一种): 主要是基于构建工具(例如,webp…...
(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)
题目:3442. 奇偶频次间的最大差值 I 思路 :哈希,时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况,哈希表这里用数组即可实现。 C版本: class Solution { public:int maxDifference(string s) {int a[26]…...
多场景 OkHttpClient 管理器 - Android 网络通信解决方案
下面是一个完整的 Android 实现,展示如何创建和管理多个 OkHttpClient 实例,分别用于长连接、普通 HTTP 请求和文件下载场景。 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas…...
IGP(Interior Gateway Protocol,内部网关协议)
IGP(Interior Gateway Protocol,内部网关协议) 是一种用于在一个自治系统(AS)内部传递路由信息的路由协议,主要用于在一个组织或机构的内部网络中决定数据包的最佳路径。与用于自治系统之间通信的 EGP&…...
iPhone密码忘记了办?iPhoneUnlocker,iPhone解锁工具Aiseesoft iPhone Unlocker 高级注册版分享
平时用 iPhone 的时候,难免会碰到解锁的麻烦事。比如密码忘了、人脸识别 / 指纹识别突然不灵,或者买了二手 iPhone 却被原来的 iCloud 账号锁住,这时候就需要靠谱的解锁工具来帮忙了。Aiseesoft iPhone Unlocker 就是专门解决这些问题的软件&…...
【磁盘】每天掌握一个Linux命令 - iostat
目录 【磁盘】每天掌握一个Linux命令 - iostat工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景 注意事项 【磁盘】每天掌握一个Linux命令 - iostat 工具概述 iostat(I/O Statistics)是Linux系统下用于监视系统输入输出设备和CPU使…...
Auto-Coder使用GPT-4o完成:在用TabPFN这个模型构建一个预测未来3天涨跌的分类任务
通过akshare库,获取股票数据,并生成TabPFN这个模型 可以识别、处理的格式,写一个完整的预处理示例,并构建一个预测未来 3 天股价涨跌的分类任务 用TabPFN这个模型构建一个预测未来 3 天股价涨跌的分类任务,进行预测并输…...
Ascend NPU上适配Step-Audio模型
1 概述 1.1 简述 Step-Audio 是业界首个集语音理解与生成控制一体化的产品级开源实时语音对话系统,支持多语言对话(如 中文,英文,日语),语音情感(如 开心,悲伤)&#x…...
ArcGIS Pro制作水平横向图例+多级标注
今天介绍下载ArcGIS Pro中如何设置水平横向图例。 之前我们介绍了ArcGIS的横向图例制作:ArcGIS横向、多列图例、顺序重排、符号居中、批量更改图例符号等等(ArcGIS出图图例8大技巧),那这次我们看看ArcGIS Pro如何更加快捷的操作。…...
精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南
精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南 在数字化营销时代,邮件列表效度、用户参与度和网站性能等指标往往决定着创业公司的增长成败。今天,我们将深入解析邮件打开率、网站可用性、页面参与时…...
Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习)
Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习) 一、Aspose.PDF 简介二、说明(⚠️仅供学习与研究使用)三、技术流程总览四、准备工作1. 下载 Jar 包2. Maven 项目依赖配置 五、字节码修改实现代码&#…...
