开发android机顶盒应用 事件,焦点处理

Android STB/IPTV (海思/Amlogic/Mstar)遥控器适配 在目前的机顶盒市场中,海思和Amlogic(之前还有Mstar)是主流的芯片方案。因此,在这几种芯片上适配红外和蓝牙遥控器也就成为了机顶盒厂家的常见工作,本篇文章简单介绍下遥控器的适配方式。使用"以上内容表示适配了四套遥控器,名称分别为"YYYKQ"、“qwerty”、“Hi mouse”、“Hi keyboard”,目前使用的遥控器为"YYYKQ"遥控器。下面的六行内容意思为:前三行代表Usage ID为0x51的按键被按下,后面的三行代表Usage ID为0x51的按键弹起。 阅读详情

于是就探索了keyevent.总结后,得出结论.需要覆盖Activity的public boolean dispatchKeyEvent(KeyEvent event) 方法.
然后可以依据些方法进行相应处理,可以解决绝大多数问题,(极少部分,我也无语.)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
一个按键有两个触发点,一是up,一是down,如果需要指定焦点,使用view.requestFocus(),而且需要在down上执行,因为up时,
系统已经定位新的焦点了.再执行就未必是想要的结果.

int keyCode=event.getKeyCode();
if (event.getAction()==KeyEvent.ACTION_UP) {
up事件,这里多数情况不需要处理.
} else {down事件
或许可以直接覆盖onKeyDown方法,而不是这个.

if(keyCode==KeyEvent.KEYCODE_DPAD_UP){
 } else if (keyCode==KeyEvent.KEYCODE_DPAD_LEFT) {
} else if (keyCode==KeyEvent.KEYCODE_DPAD_RIGHT) {
} else if (keyCode==KeyEvent.KEYCODE_DPAD_DOWN) {
} else if (keyCode==KeyEvent.KEYCODE_DPAD_CENTER||keyCode==KeyEvent.KEYCODE_ENTER) {
}
这是主要处理的遥控器的几个方向,最后一个,有些机顶盒太恶劣了,你自己看着办吧.

方向不是研究重点.
这个程序涉及的内容较多,ui使用Fragment构造,所以还更恶心一些.
比如在一个Fragment中的焦点,先得到Fragment,Fragment top=getFragmentManager().findFragmentById(R.id.content);
然后如果需要直接定位到某一个焦点,需要调用top中的一些方法,比如可以类型转换为xxFragment,然后调用.但是针对每一个Fragment都这样处理上一个,下一个焦点,累死人了.
而且系统会变慢.

多数情况需要依赖系统的定位,然后针对一些特殊的情况,
系统定位失败的再进行定向处理.

出现问题的多数是GridView,这样的ViewGroup控件,
比如现在有两行,焦点在第一行,然后向下按键KeyEvent.KEYCODE_DPAD_DOWN.在event.getAction()==KeyEvent.ACTION_DOWN中判断,
会出现不想要的结果,比如它不会定位下一个焦点还是GridView,也不是它的下一行,因为它把整个GridView当成一个控件,
下一个:final View downView=currentFocus.focusSearch(View.FOCUS_DOWN);搜索得到的downView有可能是空的,有可能是另一个控件,
比如Button,然而在焦点出现异常时,不能在这里return true;
这样是无法到它第二行的.在ACTION_UP中,
如果之前的down不返回true,会得到下一行焦点.

这里提供另一种方法:还是在down中处理:
if (currentFocus instanceof GridView) {
     GridView gridView=(GridView) currentFocus.getParent();
     int column=gridView.getNumColumns();
     int selPos=gridView.getSelectedItemPosition();
     int count=gridView.getAdapter().getCount();
     Log.d(TAG, "selPos:"+selPos+" count:"+count+" column:"+column);
     if (selPos>=column*2) {   //如果是GridView的最下边,再向下,需要翻页.
         if (fragment.pageDown()) {
         Log.d(TAG, "向下翻页了.");
         }
         return true;
     } else {
         if (count<=column||(count>column&&count<=column*2&&selPos>=column)) {
             if (fragment.pageDown()) {
                 Log.d(TAG, "品牌向下翻页了,已经是最后一页.");
                   }
                                        return true;
                                    }
                                }
}
这样可以判断当GridView的焦点在第一行时,如果选中项的位置也是第一行,可以依据系统定位,它会移动到第二行,依次类推.
如果是最后一行,其实也可以依据系统定位,如果没有特殊要求.

}

还有些针对GridView,比如移动边缘,左边缘,再向左,
焦点保持不变的位置,就可以依据这个选中的位置与它的列数判断了,然后return true;
消耗这次事件,就可以了.

其它单个控件,几乎都可以直接判断View right=currentFocus.focusSearch(View.FOCUS_RIGHT); 这四个方向的情况 就可以了.因为不存在控件内部的定位.
Android TV按键焦点原理浅谈 Android源码讲解TV的按键事件分发原理和焦点查找原理 阅读详情

相关推荐

android tv开发基础知识焦点处理

android tv开发基础知识焦点处理

zhouguizhi 3037

Android TV的事件传递与焦点处理

  1、概述 上节介绍了android tv app 与android mobile app 的一些表现形式的不同。在实际编程中需要很多的焦点处理,而焦点处理有经常是在事件传递函数内处理的。所以本节做个android 事件传递与焦点处理的小结。另既然描述到android事件传递不可避免就涉及到了android手势拦截。这也是对原有知识认识的一个补充,因为之前涉及到安卓事件传递就是为了做手势拦截...

简不闪的博客 1088

第 4-2 课:开发一个 Flutter TV 应用

之前一直在讲 Flutter 在移动端的应用尝试,今天这节内容,我们将拓展到 TV 应用的开发上来。 我们知道目前的智能电视和机顶盒都是基于 Android 系统的,所以一般的 TV 应用开发都是采用 Android 原生进行开发,Google 对 Android TV 的开发也进行了一些规范和库的制定。当然也有的是采用的 B/S 架构进行设计的。这里我们将尝试 Flutter 开发 TV 应用。...

持续学习中 2832

总结过去

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34261739的博客 127

深耕智能大屏:机顶盒 Android 应用开发工程师的核心能力与面试指南

摘要:深圳市九洲电器有限公司招聘Android应用工程师,负责机顶盒应用开发与维护。职位要求本科及以上学历,40周岁以下,1年以上Android开发经验,熟练掌握Java/Kotlin及Android开发框架。工作内容包括应用设计开发、性能优化、硬件适配、测试及文档编写。该岗位需具备TV大屏交互设计能力,熟悉Leanback库及视频播放优化,重视内存管理和性能调优。职位强调学习能力、问题解决能力和团队协作精神,需适应机顶盒开发特有的硬件限制和交互要求。

郑伟强dev的专栏 242

Android TV 上使用的RecyclerView和焦点框架,焦点框移动效果,完胜androidTvwidget的MainUpView

在android tv开发中最方便快捷的开发库,一两行代码搞定获取得焦点效果,列表移动框边缘拦截,事件处理

Android 机顶盒TV app开发

adb命令大全 https://github.com/mzlogin/awesome-adb apk正式签名步骤 https://jingyan.baidu.com/article/59703552aeccbf8fc1074075.html 使用adb命令将apk写入机顶盒相关命令 https://www.jianshu.com/p/225fef8c6e67 TV项目开发步骤 公司开发机顶盒app...

Vincent的博客 2234

【SABRE 3D, SABRE 3DxT,LAM设备】2025年9月14日-Clamshell 拆卸与安装

Clamshell 拆卸与安装。

weixin_46735260的博客 1688

安卓机顶盒开发中的焦点

安卓机顶盒焦点Api

程序员阿杰博客 3499

如何用zemax导入solidworks装配体

在zemax使用中,常常需要导入各种零件。如果光机结构较为复杂,那么手工一个一个加载零件,还需要在zmx文件中调整object的位置,非常麻烦。如果能将solidworks的装配体模型直接导入,则可以大幅减小工作量。具体过程为(非序列模式下): 1、新建或打开一个zemax空文件 2、在元件编辑器中,找到一个空文件,双击或直接展开三角符,在类型中找到zemax里的solidworks装配体,如图。...

wojiaoyyy的博客 1万+

机械设计师必看:如何用Autodesk Inventor高效完成钣金设计(附实战案例)

本文为机械设计师详细解析了如何利用Autodesk Inventor Professional高效完成钣金设计。文章通过一个钣金防护罩的实战案例,系统介绍了从核心设计逻辑、建模流程、参数化技巧到工程图输出的完整工作流,旨在帮助设计师掌握智能化的设计方法,显著提升从概念到制造的设计效率与准确性。

honey的博客 1181

android 机顶盒 view 焦点,AndroidTV/机顶盒 ListView获取焦点与点击事件问题处理方案...

AndroidTV/机顶盒 ListView获取焦点与点击事件问题处理方案本人大二,最近在写一个Android机顶盒的小项目,遇到了这样一个问题。由于App的布局复杂,导致ListView用遥控器获取其Item焦点时变得很卡很慢。需要不断点击上下键才能移动焦点。看了下Logcat,发现焦点每移到最后一个时,总是”can’t find view with Id 1/2/3/4”,试了网上无数种解决方...

weixin_31621945的博客 603

1分钟了解LangChain是什么?

是一个基于大型语言模型(LLM)开发应用程序的框架, 它旨在简化语言模型应用的开发流程,特别是在构建对话系统和其他基于语言的AI解决方案时.目标是将复杂的语言模型技术转化为可通过简单API调用实现的功能,从而使开发者能够更加专注于创造性的解决方案设计。高效地解决了开发大语言模型应用的痛点问题。Langchain 最主要的特色是可以将 LLM 应用研发过程中的交互 Prompt、LLM 模型调用、语言模型与环境互动的自适应等方式融为一体。

gorgor在码农 2630

AndroidTV/机顶盒 ListView获取焦点与点击事件问题处理方案

AndroidTV/机顶盒 ListView获取焦点与点击事件问题处理方案,非常适用于AndroidTV开发新人

Nowornever的专栏 4562

24届数字IC验证——SV+UVM基础知识汇总(一)

汇总整理在面试过程中常见的问题,如果都能回答下来,那么面试肯定不成问题的分别构建不同抽象级的transaction,来实现复杂的激励。(以前是单一层次的sequence,对激励复用、上层复用不塌友好)不同层级之间的sequence没有继承关系,相互之间进行转换低层次的sequence从高层次的sequencer中获取高层次的sequence,并将其转换为低层次的sequence,再通过低层次的sequencer发送出去如何连接:低层次的sequencer包含高层次sequencer的句柄。

qq_42135020的博客 3148

060、模型蒸馏:把扩散模型压进单步的魔法

《端侧文生图模型蒸馏实战:从32步到1步的优化之道》摘要:针对边缘设备部署难题,本文分享了扩散模型蒸馏的核心经验。通过重构损失函数(感知损失+对抗训练+KL散度)、优化采样轨迹截取策略和改造学生模型架构,成功将Stable Diffusion压缩至单步推理。关键发现包括:小批量训练更有效、标签平滑保障生成多样性、双模型策略平衡质量与速度。在Cortex-A53芯片上实现300ms内生成,内存占用控制在200MB以下。特别强调工业部署需权衡压缩率与稳定性,建议保留迭代模式开关以适配不同场景需求。

2601_95651806的博客 150

安卓电视机顶盒桌面源码设计分享教程

最近在桌电视机开发,发现电视机开发与普通手机的开发差异还是蛮大: 主要的差异就是:机顶盒是遥控器操作。 由于这个差异,那么对我们要求就比较高。 第一点,要处理焦点,以前我们做手机开发只用处理点击事件。现在要响应按钮,并处理按钮被按下以及被选中的时候样子。 第二点,要适配分辨率, 电视机分辨率与手机不同,主要是电视机一般是1080输出。dp比较低。最好要在里面放置一个sw600dp 或者 直接1080px 的文件夹,直接适配里面的 数值。 这2两点的差异,主要是第一点涉及的面非常广。工作量也加重非.

u013223936的专栏 3293

宇树科技嵌入式面试题及参考答案(春晚机器人的公司)

内存对齐是指在内存中为数据对象分配存储空间时,按照一定的规则将数据存储在特定的地址上,以提高内存访问效率。不同的数据类型在内存中都有其特定的对齐要求,例如,int类型通常要求 4 字节对齐,double类型通常要求 8 字节对齐。这意味着数据的存储地址必须是其对齐字节数的整数倍。如果不进行内存对齐,处理器在访问数据时可能需要进行多次内存访问,从而降低了访问效率。指令可以用于控制结构体内存布局,它允许程序员指定结构体成员的对齐方式。其基本用法是在结构体定义之前使用来指定对齐字节数n,其中n。

大模型大数据攻城狮的专栏 3225

机顶盒直播点播源码方案开发

机顶盒直播点播源码方案开发心得体会。 现在用到盒子基本都是安卓的,如果您要找源码的盒子直播的源码 可以参考我最近做的这个项目。 先说说电视机与手机开发的差异。 主要的差异就是:机顶盒是遥控器操作。 由于这个差异,那么对我们要求就比较高。 第一点,要处理焦点,以前我们做手机开发只用处理点击事件。现在要响应按钮,并处理按钮被按下以及被选中的时候样子。 第二点,要适配分辨率, 电视机分辨率与手机不同,主要是电视机一般是1080输出。dp比较低。最好要在里面放置一个sw600dp 或者 直接10..

u013223936的专栏 1731

PCL 模型滤波器【2025最新版】

根据给定的模型系数在点云中提取对应于模型的点云数据。博客长期更新,本文最新更新时间为:2025年6月17日。

点云侠的博客 4384

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

android 机顶盒开发-----GridView

简单描述一下要实现的:遥控器控制GridView右键到第一横最后一个item再次右键跳转到第二横的问题 正常情况下,机顶盒GridView中的Item中的控件获取不到焦点,焦点都是在Item上 当GridView中的子Item里面的控件需要获取焦点时,设置GridView的属性android:descendantFocusability="afterDescendants" 这样GridVI

cheweilol的专栏 1218

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

android 手机开发和机顶盒开发的区别

对事件处理不同,手机开发主要处理onTouch事件和onClick事件,而机顶盒主要是onKey事件和onClick事件 屏幕设配不同,手机有灵活的屏幕旋转和多种分辨率需要设配,机顶盒固定横屏和极少的分辨率,主要看cpu支持,一般主要是720dp 机顶盒非常关注当前的焦点在哪里,要有明显的提示。而手机可以不关注焦点问题。

lytton2009的博客 551

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

AndroidTV开发知识总结(机顶盒端 )

前言 金三银四之际被离职,入职了一家TV开发的公司。入职一月,简单总结下TV开发需要注意的一些东西。 知识点 适配 试用了一下sw 即最小宽度适配(推荐此适配方法) 1280*720 对应的分辨率 mdpi 具体这方面分析的文章有很多 也很全面,不多哔哔。 推荐一个文章:https://blog.youkuaiyun.com/hejjunlin/article/details/52886107 屏幕方向: ...

a940659387的博客 2532
上一篇: Android电视机(机顶盒)初次开发的一些经验分享
下一篇: Android app 部署至机顶盒
xiaoxiandroid
博客等级 码龄12年 12粉丝 3原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值