【Android TV】 遥控器Enter键无法调出软键盘

安卓TV开发之自定义键盘   最近公司在搞智能电视APP开发,里面涉及到许多常用功能,基本上TV开发都需要用到这些,比如说焦点选中框,自定义键盘等等,后面陆续记录开发过程。本文重点介绍自定义键盘。 首先要说明的是安卓系统自带有软键盘,理论上来讲是可以直接拿来用。如果是手机APP开发,确实是直接调用手机软键盘,除了特殊场合需要自定义键盘,比如处于安全考虑的密码键盘,或者输入金额的键盘等。但是TV开发不行,不信你打开你家的... 阅读详情

问题描述:

Android TV开机向导,进入连接wifi界面,按遥控器Enter键无法调出软键盘(Android 9.0)

分析过程:

1、getevent可读取到按键值——正常

2、dumpsys input ,dumpsys input_method发现:

4: Xiaomi RC
 Classes:0x80000023
 Path:/dev/input/event3
 Enabled: true
 Descriptor: 2e1c360bd32e2d03aa7681aaa7c
 Location:
 Controllernumber: 0
 Uniqueld: c4: ff: bc: 90: e9: 37
 Identifier: bus=0x0005, vendor=0x2717, product=0x32b9, version=0x0000
 Keylayoutfile: /system/usr/keylayout/Generic. KI
 Keycharactermapfile: /system/usr/keychars/Generic.kcm
 Configurationfile:
 Havekeyboard Layoutoverlay: false

通过http://androidxref.com/9.0.0_r3/xref/frameworks/native/services/inputflinger/EventHub.h,查看该rc device被识别成的类型,0x80000023对应的是外部实体键盘,问题就出现在这里了,遥控器被识别成usb键盘了,导致按Enter键没有弹出软键盘

/*
99 * Input device classes.
100 */
101enum {
102    /* The input device is a keyboard or has buttons. */
103    INPUT_DEVICE_CLASS_KEYBOARD      = 0x00000001,
104
105    /* The input device is an alpha-numeric keyboard (not just a dial pad). */
106    INPUT_DEVICE_CLASS_ALPHAKEY      = 0x00000002,
107
108    /* The input device is a touchscreen or a touchpad (either single-touch or multi-touch). */
109    INPUT_DEVICE_CLASS_TOUCH         = 0x00000004,
110
111    /* The input device is a cursor device such as a trackball or mouse. */
112    INPUT_DEVICE_CLASS_CURSOR        = 0x00000008,
113
114    /* The input device is a multi-touch touchscreen. */
115    INPUT_DEVICE_CLASS_TOUCH_MT      = 0x00000010,
116
117    /* The input device is a directional pad (implies keyboard, has DPAD keys). */
118    INPUT_DEVICE_CLASS_DPAD          = 0x00000020,
119
120    /* The input device is a gamepad (implies keyboard, has BUTTON keys). */
121    INPUT_DEVICE_CLASS_GAMEPAD       = 0x00000040,
122
123    /* The input device has switches. */
124    INPUT_DEVICE_CLASS_SWITCH        = 0x00000080,
125
126    /* The input device is a joystick (implies gamepad, has joystick absolute axes). */
127    INPUT_DEVICE_CLASS_JOYSTICK      = 0x00000100,
128
129    /* The input device has a vibrator (supports FF_RUMBLE). */
130    INPUT_DEVICE_CLASS_VIBRATOR      = 0x00000200,
131
132    /* The input device has a microphone. */
133    INPUT_DEVICE_CLASS_MIC           = 0x00000400,
134
135    /* The input device is an external stylus (has data we want to fuse with touch data). */
136    INPUT_DEVICE_CLASS_EXTERNAL_STYLUS = 0x00000800,
137
138    /* The input device has a rotary encoder */
139    INPUT_DEVICE_CLASS_ROTARY_ENCODER = 0x00001000,
140
141    /* The input device is virtual (not a real device, not part of UI configuration). */
142    INPUT_DEVICE_CLASS_VIRTUAL       = 0x40000000,
143
144    /* The input device is external (not built-in). */
145    INPUT_DEVICE_CLASS_EXTERNAL      = 0x80000000,
146};

Root Cause

RC被识别成hardware keyboard,此类型是由RC的driver自身config的

可以试下输入settings put secure show_ime_with_hard_keyboard 1看是否能调出软键盘

Solution

1、从根源上解决:让RC的厂商自行修改driver config,使其不被识别成hardware keyboard(最优解)

2、android层解决:在对应的device的overlay下设置以下config,但是,会有副作用:插入usb keyboard时也会显示IME(软键盘)

      <!-- Default for Settings.Secure.SHOW_IME_WITH_HARD_KEYBOARD -->
       132    <bool name="def_show_ime_with_hard_keyboard">true</bool>

 

 

 

Android语言基础教程(111)Android事件处理之处理键盘事件:别让键盘玩死你!Android键盘事件处理全揭秘 在Android开发中,键盘事件处理常常被忽略,却直接影响用户体验。本文深度解析键盘事件处理机制,从基础原理到实战技巧,涵盖按键监听、事件分发流程及常见坑点。通过完整示例,教你如何优雅处理用户输入、导航拦截及多键组合操作。无论你是新手还是老鸟,都能轻松掌握,让App交互更流畅!快来解锁这些隐藏技能,告别键盘失控的尴尬吧! 阅读详情

相关推荐

第 23 章:窗口系统

Insets 代表屏幕被系统 UI(状态栏、导航栏、IME)或硬件特性(挖孔、圆角)占用的区域。窗口布局时需要避开这些区域。Insets 系统从旧演进到现代与。

dengfuma的专栏 365

Android中处理软键盘上“回车键”的2种方法

1. 给EditText设置属性【android:imeOptions="actionDone"】 2.给EditText设置属性【android:inputType="text"】 如    [html] view plaincopyprint? EditText           android:id="@+id/editText1"  

Winter916的专栏 1917

Android 14.0 遥控器点击输入框 弹不出输入法

在14.0系统产品rom定制化开发中,遇到奇怪的现象,就是遥控器操作输入框的时候,始终弹不出输入法,刚开始怀疑是输入法的问题,换输入法发现还是一样 ,这时候又连接鼠标来操作发现可以弹出输入法 ,那么就不是输入法的问题,就要从遥控器焦点入手了,接下来看下关于EditText的相关焦点分析

安卓兼职framework和app工程师的博客 657

Android TvSettings Bug: 密码框无法点击唤起输入法

Android 10 的Box方案, 默认使用的是TvSettings作为系统设置,输入操作的习惯上是使用鼠标,键盘,遥控,日常的场景是没有问题,也不会出现本文中提及的问题。当外接的USB触摸屏后,出现无法点击WIFI密码框换出输入法进行输入密码操作。从图1开始添加WIFI,并准备输入密码时,外接的USB触摸屏没有办法点击唤起输入法。

ansondroider的博客 1798

Android 10.0 蓝牙遥控器确认键弹不出输入法的解决方法

在做android设备定制化开发时,有使用红外遥控器,也有使用蓝牙遥控器的,所以出现的问题不一定相同,今天遇到个问题就是蓝牙 遥控器弹不出输入法的问题 首选排除输入法的问题,安装其他的输入法,也是同样的问题,这样就确定是系统控件相关的问题了,接下来就从系统输入框控件 来寻找原因了 解决方案: EditText的父类是TextView 所以最终需要从TextView.java中查询问题所在了 路径:framework/base/core/java/android/widget/TextView.java 蓝牙

安卓兼职framework和app工程师的博客 1407

Android TV定制输入法开发指南

本文介绍了Android TV输入法的定制开发方案。核心内容包括:1) 双模式交互设计(输入/非输入模式切换);2) 键盘布局管理和焦点导航系统实现;3) LatinIME源码修改要点(焦点绘制、遥控按键处理);4) 默认输入法语言设置的两种方法(广播动态设置/系统配置修改)。文章还提供了TV输入法开发的最佳实践,强调焦点导航精度、性能优化和多语言支持的重要性。通过这套方案可打造适配TV遥控操作的输入法,提升大屏设备输入体验。

学无止境 9332

Android软键盘上移动焦点&&Android TV定制输入法

下面这个分析是基于安卓 5.0的 ,7.0的目前正在研究。 在Android Latin输入法的基础上进行改写,该输入法不支持中文,处理流程如图: 第一次启动输入法服务时,根据键盘布局文件创建软键盘view,分别是全字母软键盘、数字软键盘以及特殊字符软键盘。在创建软键盘时,把每一个软键盘上的所有按键放到一个HashMap中,使每一个按键都分别与一个String型的数字对应。

wed110的专栏 5272

Android 8.1 9.0 10.0 遥控器点击输入框 弹不出输入法

在做Tv设备开发中,遇到奇怪的现象,就是遥控器操作输入框的时候,始终弹不出输入法,刚开始怀疑是输入法的问题,换输入法发现还是一样 ,这时候又连接鼠标来操作发现可以弹出输入法 ,那么就不是输入法的问题,就要从遥控器焦点入手了 1.首选看EditText有没获取到焦点 edittext.setOnFocusChangeListener(new View.OnFocusChangeListener() { @Override public void onFocusC

安卓兼职framework和app工程师的博客 2601

自定义软键盘(Android)

自定义键盘,应用于电视盒子,遥控器可控制。Android,支持输入字母和符号

Wing的专栏 734

【信息科学与工程学】计算机科学与自动化——第六十三篇 人机交互之前端交互参数知识库01

此方案可满足千万级并发需求,同时支持时序数据、知识图谱和文档数据库的高效处理,通过云原生架构实现极致弹性。​:每月约$15-20万(100节点K8s集群+数据库集群+CDN流量)1. 宠物上架/下架流程。

weixin_49199313的博客 1475

Android TV热键系统:实现原理与最佳实践

本文提出了一套完整的Android TV热键系统解决方案,采用分层架构设计,包含应用层、管理层、配置层和执行层。核心实现基于单例模式确保全局访问,通过智能按键缓冲区管理实现快速响应,支持可配置的热键映射系统。系统特点包括:1)线程安全的双检锁单例模式;2)自动超时清除的按键序列检测;3)JSON配置文件支持动态更新;4)权限分级控制机制。该方案已在实际项目中验证,能有效提升调试效率和系统维护性,支持任意长度热键序列和毫秒级响应。

学无止境 4566

Android软键盘的用法总结

Android软键盘的用法总结   1.软键盘的显示原理     软键盘其实是一个Dialog。InputMethodService为我们的输入法创建了一个Dialog,并且对某些参数进行了设置,使之能够在底部或者全屏显示。当我们点击输入框时,系统会对当前的主窗口进行调整,以便留出相应的空间来显示该Dialog在底部,或者全屏。 2.活动主窗口调整     Android定义了一个属性wi

donggeAndroid的专栏 717

Android 11.0 12.0蓝牙遥控器确认键弹不出输入法的解决方法

在android11.0 12.0设备定制化开发时,遥控器是使用红外遥控器,也有使用蓝牙遥控器的,所以出现的问题不一定相同,今天遇到个问题就是蓝牙遥控器在输入数据时弹不出输入法的问题首选排除输入法的问题,安装其他的输入法,也是同样的问题,这样就确定是系统控件相关的问题了,接下来就从系统输入框控件来寻找原因了。

安卓兼职framework和app工程师的博客 980

android tv 无线键盘,Android-TV-Frame

Android TV 开发框架使用说明:键盘使用说明:项目导入说明:欢迎进入 TV开发,希望大家不断的分享代码,一起进步,谢谢. (hailongqiu 356752238@qq.com)天天加班加点,欢迎支持##Tab 测试DEMO图片.当ListView中有一些抢焦点的控件的时候,请使用 setDescendantFocusability ... ... 比如 Button,EditText【...

weixin_29867767的博客 418

千兆以太网PHY设计:PCB原理图完整示例

深入解析千兆以太网PHY电路设计要点,提供完整的PCB原理图设计实例,帮助工程师掌握高速信号布局与电源去耦等关键技术,提升设计稳定性与信号完整性。

weixin_30633869的博客 628

【智能体评测】BrowserUse:一款超越 Anthropic Computer Use 的开源智能体

本文将全面介绍 BrowserUse 的核心功能、配置与使用方法,以及通过多场景测试评估其性能。

surfirst的博客 4096

TV中一款自定义的软键盘(覆盖了系统原生的键盘)

自定义Android软键盘,数字键盘,字母键盘(包括大小写),阻止了Android原生软键盘的弹出,外观上也比较好看~ 核心代码如下: private void showKeyboard(EditText etContent) { this.inputContent = etContent; View content = View.inflate(this

海豚的成长日记 3032

关于Oxford Radar RobotCar Dataset的学习笔记

https://oxford-robotics-institute.github.io/radar-robotcar-dataset/documentation 简介 雷达是 Navtech CTS350-X 调频连续波 (FMCW) 扫描雷达,在所使用的配置中提供 4.38 cm 的距离分辨率和 0.9 度的旋转分辨率,范围高达 163 m,同时提供对天气条件的稳健性这可能会给其他传感器模式带来麻烦。在其他配置中,Navtech CTS350-X 可以提供超过 650 m 的范围和更高的旋转速度。然而,对

禾烁的博客 5295

android tv 按键

@Override public boolean onKeyDown(int keyCode, KeyEvent event) { switch (keyCode) { case KeyEvent.KEYCODE_0: Toast.toastInfo(this, "你按下数字键0"); break; case

u012123938的专栏 2199

海康工业相机SDK+OpenCV实战:图像采集与Mat格式转换优化指南

本文深入探讨了如何高效利用海康工业相机SDK与OpenCV进行图像采集与处理。重点解析了从相机RawData到OpenCV Mat格式转换的核心优化技巧,包括像素格式匹配、内存零拷贝管理以及彩色图像BGR/RGB转换,旨在解决工业应用中常见的性能瓶颈与内存问题,构建稳定高效的图像处理流程。

weixin_29192211的博客 107

电子产品设计中EFT防护的关键技术与实践

本文深入探讨了电子产品设计中EFT(快速瞬变脉冲群)防护的关键技术与实践。文章从EFT干扰的原理入手,系统阐述了通过优化PCB布局与地平面设计、构建电源与信号端口滤波防护电路、精选核心器件以及实施软件容错策略,来构建多层次、系统性的抗干扰防线,助力产品稳定通过严苛的电磁兼容测试。

e4f5g6h的博客 786

Android TV 开发跑坑系列(不断更新中)

Android TV中的各种坑

qq_35083125的博客 847

YOLOv8 Neck改进:BiFPN双向特征金字塔网络解析与实践

本文详细介绍了如何在YOLOv8中集成BiFPN双向特征金字塔网络,包括原理解析、代码实现、配置文件修改和性能分析。BiFPN通过双向特征融合和加权特征机制,显著提升了多尺度目标检测的性能。希望通过本文的讲解,大家能够深入理解BiFPN的工作原理,并成功将其应用到自己的目标检测项目中。如果你有任何问题或建议,欢迎在评论区留言讨论!在下一篇文章中,我们将探讨YOLOv8的其他改进技术,包括注意力机制、新的损失函数等,敬请期待!

QQ_778132974的博客 988

android 键盘回车按钮事件,Android中ENTER键(确认键)点击响应

背景:在机顶盒中通过遥控器操作,与传统手机交互方式不同。手机点击是发送两个TouchEvent(Down和Up),机顶盒是发送KeyEvent。所产生的效果看似相同,其实是两种不同的机制。先看两段代码1.目录android.view.View调度按键事件public boolean dispatchKeyEvent(KeyEvent event) {if (mInputEventConsisten...

weixin_33321740的博客 1176

Autosar配置——导入DBC后配置SecOC同步报文和同步请求报文

在Autosar中,安全性是一个重要的考虑因素,而SecOC(Secure On-Board Communication)是一种用于保护通信数据完整性和安全性的安全机制。在上述示例中,我们配置了同步报文和同步请求报文的属性。接下来,我们需要在Autosar中配置同步报文和同步请求报文。同步报文用于在通信双方之间同步SecOC状态,而同步请求报文用于请求SecOC的状态信息。通过以上配置,我们成功地导入了DBC文件,并在Autosar系统中配置了SecOC同步报文和同步请求报文。希望以上信息对您有所帮助!

CyberSphinx的博客 649

【项目实战】使用Python - Mediapipe、OpenCV进行手部面部检测(Python源码)

本文介绍了使用MediaPipe和OpenCV库进行实时面部和手部关键点检测的方法。通过MediaPipe的Holistic模型,可以获取468个面部特征点及每只手21个特征点。文章详细说明了环境配置、模型初始化参数设置,并提供了完整的代码实现,包括视频流处理、关键点绘制和FPS计算等功能。这套方案可应用于手语识别、疲劳检测等计算机视觉场景,为开发者提供了一套高效的开箱即用解决方案。

梦想起飞的地方 480
上一篇: 浅谈"指向二维数组的指针"
下一篇: 【Android TV】Android 8.0下 ,TV系统通知音失效
长门_Pefect
博客等级 码龄11年 38粉丝 28原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值