Android 振动和触感反馈功能失效问题分析

2024-04-29 13:36

本文主要是介绍Android 振动和触感反馈功能失效问题分析,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

    • 一、 可以先通过adb来确定是否有打印Log,查看中相关的按键振动事件是否有效
    • 二、 适配按键事件
    • 三、延长振动时长

  在Android13的项目(MTK平台)中遇到这样一个问题,在设置 - 提示音和振动 - 振动和触感反馈 - 打开按触反馈,但是按键没有振动的效果(一般来说也就是三个导航按键的振动反馈)

一、 可以先通过adb来确定是否有打印Log,查看中相关的按键振动事件是否有效

  这里Log打印的振动时长,其实是WAVEFORM_CLICK_EFFECT的值(在本文章的第三点)

adb shell logcat | findstr "timeoutMs"
04-28 13:41:23.515   697   697 I Vibrator: Vibrator on for timeoutMs: 20

二、 适配按键事件

  如果没有相关Log打印,则在PhoneWindowManager中根本就没有对应按键的振动事件,则需要将对应的按键进行如下配置

system/frameworks/base/services/core/java/com/android/server/policy/PhoneWindowManager.java
	@Overridepublic int interceptKeyBeforeQueueing(KeyEvent event, int policyFlags) {......// Enable haptics if down and virtual key without multiple repetitions. If this is a hard// virtual key such as a navigation bar button, only vibrate if flag is enabled.final boolean isNavBarVirtKey = ((event.getFlags() & KeyEvent.FLAG_VIRTUAL_HARD_KEY) != 0);boolean useHapticFeedback = down&& (policyFlags & WindowManagerPolicy.FLAG_VIRTUAL) != 0&& (!isNavBarVirtKey || mNavBarVirtualKeyHapticFeedbackEnabled)&& event.getRepeatCount() == 0;// press and touch feedback of navigation keys beginLog.d(TAG, "keying vibration 1 = " + keyCode);if (keyCode == KeyEvent.KEYCODE_HOME || keyCode == KeyEvent.KEYCODE_BACK || keyCode == KeyEvent.KEYCODE_APP_SWITCH {if (down && event.getRepeatCount() == 0) {useHapticFeedback = true;Log.d(TAG, "keying vibration 2 = " + keyCode);}}// press and touch feedback of navigation keys end......

三、延长振动时长

  如果Log中打印振动时常为20毫秒的话,亲测是没有任何振动触感的,所以我们延长振动的时间(单位为毫秒),具体的值要根据自己的需求来修改(本人项目最后修改的是80毫秒),当时我的项目只需要修改WAVEFORM_CLICK_EFFECT = 80即可生效。

vendor/vendor/mediatek/proprietary/hardware/libvibrator/aidl/default/Vibrator.cpp
// Use effect #1 in the waveform library for CLICK effect
static constexpr int32_t WAVEFORM_CLICK_EFFECT = 80;// Use effect #2 in the waveform library for TICK effect
static constexpr int32_t WAVEFORM_TICK_EFFECT = 50; // Use effect #3 in the waveform library for DOUBLE_CLICK effect
static constexpr int32_t WAVEFORM_DOUBLE_CLICK_EFFECT = 70;// Use effect #4 in the waveform library for HEAVY_CLICK effect
static constexpr int32_t WAVEFORM_HEAVY_CLICK_EFFECT = 90;
慢也好,步伐小也罢,是往前走就好。

这篇关于Android 振动和触感反馈功能失效问题分析的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/946232

相关文章

VS配置好Qt环境之后但无法打开ui界面的问题解决

《VS配置好Qt环境之后但无法打开ui界面的问题解决》本文主要介绍了VS配置好Qt环境之后但无法打开ui界面的问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要... 目UKeLvb录找到Qt安装目录中designer.UKeLvBexe的路径找到vs中的解决方案资源

Apache 高级配置实战之从连接保持到日志分析的完整指南

《Apache高级配置实战之从连接保持到日志分析的完整指南》本文带你从连接保持优化开始,一路走到访问控制和日志管理,最后用AWStats来分析网站数据,对Apache配置日志分析相关知识感兴趣的朋友... 目录Apache 高级配置实战:从连接保持到日志分析的完整指南前言 一、Apache 连接保持 - 性

MySQL启动报错:InnoDB表空间丢失问题及解决方法

《MySQL启动报错:InnoDB表空间丢失问题及解决方法》在启动MySQL时,遇到了InnoDB:Tablespace5975wasnotfound,该错误表明MySQL在启动过程中无法找到指定的s... 目录mysql 启动报错:InnoDB 表空间丢失问题及解决方法错误分析解决方案1. 启用 inno

Druid连接池实现自定义数据库密码加解密功能

《Druid连接池实现自定义数据库密码加解密功能》在现代应用开发中,数据安全是至关重要的,本文将介绍如何在​​Druid​​连接池中实现自定义的数据库密码加解密功能,有需要的小伙伴可以参考一下... 目录1. 环境准备2. 密码加密算法的选择3. 自定义 ​​DruidDataSource​​ 的密码解密3

Java使用MethodHandle来替代反射,提高性能问题

《Java使用MethodHandle来替代反射,提高性能问题》:本文主要介绍Java使用MethodHandle来替代反射,提高性能问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑... 目录一、认识MethodHandle1、简介2、使用方式3、与反射的区别二、示例1、基本使用2、(重要)

Linux中的more 和 less区别对比分析

《Linux中的more和less区别对比分析》在Linux/Unix系统中,more和less都是用于分页查看文本文件的命令,但less是more的增强版,功能更强大,:本文主要介绍Linu... 目录1. 基础功能对比2. 常用操作对比less 的操作3. 实际使用示例4. 为什么推荐 less?5.

spring-gateway filters添加自定义过滤器实现流程分析(可插拔)

《spring-gatewayfilters添加自定义过滤器实现流程分析(可插拔)》:本文主要介绍spring-gatewayfilters添加自定义过滤器实现流程分析(可插拔),本文通过实例图... 目录需求背景需求拆解设计流程及作用域逻辑处理代码逻辑需求背景公司要求,通过公司网络代理访问的请求需要做请

SpringCloud使用Nacos 配置中心实现配置自动刷新功能使用

《SpringCloud使用Nacos配置中心实现配置自动刷新功能使用》SpringCloud项目中使用Nacos作为配置中心可以方便开发及运维人员随时查看配置信息,及配置共享,并且Nacos支持配... 目录前言一、Nacos中集中配置方式?二、使用步骤1.使用$Value 注解2.使用@Configur

电脑蓝牙连不上怎么办? 5 招教你轻松修复Mac蓝牙连接问题的技巧

《电脑蓝牙连不上怎么办?5招教你轻松修复Mac蓝牙连接问题的技巧》蓝牙连接问题是一些Mac用户经常遇到的常见问题之一,在本文章中,我们将提供一些有用的提示和技巧,帮助您解决可能出现的蓝牙连接问... 蓝牙作为一种流行的无线技术,已经成为我们连接各种设备的重要工具。在 MAC 上,你可以根据自己的需求,轻松地

Java 中的跨域问题解决方法

《Java中的跨域问题解决方法》跨域问题本质上是浏览器的一种安全机制,与Java本身无关,但Java后端开发者需要理解其来源以便正确解决,下面给大家介绍Java中的跨域问题解决方法,感兴趣的朋友一起... 目录1、Java 中跨域问题的来源1.1. 浏览器同源策略(Same-Origin Policy)1.