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

相关文章

Mybatis 传参与排序模糊查询功能实现

《Mybatis传参与排序模糊查询功能实现》:本文主要介绍Mybatis传参与排序模糊查询功能实现,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧... 目录一、#{ }和${ }传参的区别二、排序三、like查询四、数据库连接池五、mysql 开发企业规范一、#{ }和${ }传参的

SpringBoot首笔交易慢问题排查与优化方案

《SpringBoot首笔交易慢问题排查与优化方案》在我们的微服务项目中,遇到这样的问题:应用启动后,第一笔交易响应耗时高达4、5秒,而后续请求均能在毫秒级完成,这不仅触发监控告警,也极大影响了用户体... 目录问题背景排查步骤1. 日志分析2. 性能工具定位优化方案:提前预热各种资源1. Flowable

kotlin中const 和val的区别及使用场景分析

《kotlin中const和val的区别及使用场景分析》在Kotlin中,const和val都是用来声明常量的,但它们的使用场景和功能有所不同,下面给大家介绍kotlin中const和val的区别,... 目录kotlin中const 和val的区别1. val:2. const:二 代码示例1 Java

Go标准库常见错误分析和解决办法

《Go标准库常见错误分析和解决办法》Go语言的标准库为开发者提供了丰富且高效的工具,涵盖了从网络编程到文件操作等各个方面,然而,标准库虽好,使用不当却可能适得其反,正所谓工欲善其事,必先利其器,本文将... 目录1. 使用了错误的time.Duration2. time.After导致的内存泄漏3. jsO

springboot循环依赖问题案例代码及解决办法

《springboot循环依赖问题案例代码及解决办法》在SpringBoot中,如果两个或多个Bean之间存在循环依赖(即BeanA依赖BeanB,而BeanB又依赖BeanA),会导致Spring的... 目录1. 什么是循环依赖?2. 循环依赖的场景案例3. 解决循环依赖的常见方法方法 1:使用 @La

Android中Dialog的使用详解

《Android中Dialog的使用详解》Dialog(对话框)是Android中常用的UI组件,用于临时显示重要信息或获取用户输入,本文给大家介绍Android中Dialog的使用,感兴趣的朋友一起... 目录android中Dialog的使用详解1. 基本Dialog类型1.1 AlertDialog(

Java实现文件图片的预览和下载功能

《Java实现文件图片的预览和下载功能》这篇文章主要为大家详细介绍了如何使用Java实现文件图片的预览和下载功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... Java实现文件(图片)的预览和下载 @ApiOperation("访问文件") @GetMapping("

SpringKafka消息发布之KafkaTemplate与事务支持功能

《SpringKafka消息发布之KafkaTemplate与事务支持功能》通过本文介绍的基本用法、序列化选项、事务支持、错误处理和性能优化技术,开发者可以构建高效可靠的Kafka消息发布系统,事务支... 目录引言一、KafkaTemplate基础二、消息序列化三、事务支持机制四、错误处理与重试五、性能优

SpringIntegration消息路由之Router的条件路由与过滤功能

《SpringIntegration消息路由之Router的条件路由与过滤功能》本文详细介绍了Router的基础概念、条件路由实现、基于消息头的路由、动态路由与路由表、消息过滤与选择性路由以及错误处理... 目录引言一、Router基础概念二、条件路由实现三、基于消息头的路由四、动态路由与路由表五、消息过滤

Spring Boot 3.4.3 基于 Spring WebFlux 实现 SSE 功能(代码示例)

《SpringBoot3.4.3基于SpringWebFlux实现SSE功能(代码示例)》SpringBoot3.4.3结合SpringWebFlux实现SSE功能,为实时数据推送提供... 目录1. SSE 简介1.1 什么是 SSE?1.2 SSE 的优点1.3 适用场景2. Spring WebFlu