Android TV热键(快捷键、组合键)实现
TV上一些特殊的功能入口、串口打印开关、adb调试开关、部分菜单的显示隐藏等都可以通过热键来控制。
一般组合键选用某个功能键+一串数字即可,我们可以将其封装成工具类,这里快捷键,我使用F1和几个数字键组合。
public class SpecialKey implements Constants {private static SpecialKey instance = null;private Context mContext;private SpecialKeyCallBack mSpecialKeyCallBack;private StringBuffer strBuffer;private boolean hasSpecialKeyCode = true;private SpecialKey(Context context) {mContext = context;initData();}public synchronized static SpecialKey getInstance(Context context) {if (instance == null) {instance = new SpecialKey(context);}return instance;}private void initData() {strBuffer = new StringBuffer();strBuffer.setLength(0);}public void setInputKeyNumber(int keyCode, KeyEvent event) {int iDigital;switch (keyCode) {case KEY_0:iDigital = 0;break;case KEY_1:iDigital = 1;break;case KEY_2:iDigital = 2;break;case KEY_3:iDigital = 3;break;case KEY_4:iDigital = 4;break;case KEY_5:iDigital = 5;break;case KEY_6:iDigital = 6;break;case KEY_7:iDigital = 7;break;case KEY_8:iDigital = 8;break;case KEY_9:iDigital = 9;break;default:iDigital = -1;break;}if (iDigital != -1) {strBuffer.append(String.valueOf(iDigital));setSpecialMenu(strBuffer);}}private void setSpecialMenu(StringBuffer strBuffer) {int iNumber = Integer.parseInt(strBuffer.toString());switch (iNumber) {case 000:// patch_enablebreak;case 111:// show uartbreak;case 222:// show SDSMenubreak;case 333:// ChangeLauncher();break;case 987:// updateNetUpdateEnableStatus();break;case 135:break;case 789:// PowerRebootbreak;case 8280:break;case 12500:// adb switcherbreak;case 12459:// print switcherbreak;case 8281:// PatchMenubreak;case 234:// sendPVRRecTP();break;default:hasSpecialKeyCode = false;break;}setDataClear();}public void setDataClear() {strBuffer.setLength(0);if (mSpecialKeyCallBack != null) {mSpecialKeyCallBack.onChangeSpecialKeyStatus(false);mSpecialKeyCallBack.dismissNoChannelDLG(hasSpecialKeyCode);hasSpecialKeyCode = true;}}public void setSpecialKeyListener(SpecialKeyCallBack finish) {this.mSpecialKeyCallBack = finish;}public interface SpecialKeyCallBack {void onChangeSpecialKeyStatus(boolean status);void dismissNoChannelDLG(boolean isDismiss);}
}
如何使用呢?一般,我们在电视应用主界面调用上面的工具类
步骤1:重写主界面Activity的onKeyDown()方法,将数字按键事件封装成一个方法,如果是F1按键,则实例化上述的热键工具类,并使用Handler发送一个热键消息。
@Overridepublic boolean onKeyDown(int keyCode, KeyEvent event) {if (onChangePIPKey(keyCode, event)) {return true;}if (onChangePVRKey(keyCode, event)) {return true;}if (isNumberKeyDown(keyCode, event)) {return true;}switch (keyCode) {case KEY_F1:Log.d(CLASS_NAME, "bSpecialKey = " + bSpecialKey);if (!bSpecialKey) {bSpecialKey = true;mSpecialKey = SpecialKey.getInstance(HomeActivity.this);mSpecialKey.setSpecialKeyListener(this);if (handler.hasMessages(RESPONSE_SPECIAL_KEY_DOWN)) {handler.removeMessages(RESPONSE_SPECIAL_KEY_DOWN);}handler.sendEmptyMessageDelayed(RESPONSE_SPECIAL_KEY_DOWN, 5000);} else {}break;default:break;}Log.d(CLASS_NAME, " " + event.getAction());return super.onKeyDown(keyCode, event);}
步骤二:在数字按键处理函数中,如果需要处理热键,则将数字按键事件交给热键工具类的setInputKeyNumber()方法处理,否则将该事件还给主界面。
private boolean isNumberKeyDown(int keyCode, KeyEvent event) {switch (keyCode) {case KEY_0:case KEY_1:case KEY_2:case KEY_3:case KEY_4:case KEY_5:case KEY_6:case KEY_7:case KEY_8:case KEY_9:if (bSpecialKey) {mSpecialKey.setInputKeyNumber(keyCode, event);} else {numberKeyDown(keyCode, event);}return true;default:break;}return false;}
步骤3:处理热键消息,实现Handler.Callback的handleMessage()方法。
@Overridepublic boolean handleMessage(Message msg) {switch (msg.what) {case RESPONSE_POWER_ACTION:// handle power keybreak;case RESPONSE_SPECIAL_KEY_DOWN:if (bSpecialKey) {bSpecialKey = false;mSpecialKey.setDataClear();}break;default:break;}return false;}
步骤4:主界面实现SpecialKeyCallBack两个回调方法。
@Overridepublic void onChangeSpecialKeyStatus(boolean status) {bSpecialKey = status;}@Overridepublic void dismissNoChannelDLG(boolean isDismiss) {if (isDismiss) {dismissDialogInner(NO_CHANNEL_DLG);isNoChannelDLGDismiss = isDismiss;}}
bSpecialKey这个变量用于判断是否需要处理热键,初始化置为false.
Android TV热键(快捷键、组合键)实现相关推荐
- Android:TV设置遥控器组合键
这个其实很简单,就是获取用户的按键操作,按一次,我放到ArrayList,点击菜单的时候,我比对一下顺序是否正确 以下组合键顺序,上 --> 下 --> 左 --> 右 ...
- windows快捷键+组合键+搜索命令
大佬不用鼠标飞速的操控着计算机 心里羡慕嫉妒又捉急,静下心来看一看 原来也就这样办: 这次狠下心整理了网上及日常使用率较高的 快捷键 和 组合键 ,供大家参考: 电 ...
- 在Android系统中添加组合键快捷启动功能
启动系统特定功能的组合键的判断应该在系统分发按键消息前处理, 这样从系统运行 的角度来说成本最低. 添加组合键处理需要先搞清楚按键消息在framework中采集 和分发子系统的工作流程, 虽然有and ...
- Delphi 热键 使用WIN作为热键的组合键 给程序增加快捷键
Delphi THotkey使用WIN键作为组合热键 高清视频 Delphi 热键 | Delphi 使用WIN键作为组合热键_Kim的博客-CSDN博客
- Android 组合键
电源键 + 音量上键 长按实现关机功能 Android 9.0 1 组合键关机实现 1.1 添加必要参数 1.1 添加 handler 信息 1.3 电源键 DOWN处理 1.4 电源键 UP 处理 ...
- Autohotkey 组合键与序列键的定义
[热键]组合键与序列键 https://zhuanlan.zhihu.com/autohotkey/19716319 [热键]组合键与序列键 胡杨 4 年前 作者:amnesiac 首发:官方论坛之中 ...
- iMac快捷键组合功能列表
imac快捷键是通过按下键盘上的组合键来调用 Mac OS X 功能的一种方式. 要使用快捷键或组合键,您可以同时按修饰键和字符键.例如,同时按下 Command 键(标有 符号的按键 ...
- 按下组合键 可以迅速锁定计算机,电脑快速锁屏快捷键
一.电脑锁屏快捷键 在windows xp时工作时,们经常要锁定计算机,当计算机被锁定后,只有重新登录才能够使用计算机,从而保证了计算机的安全. 但是,一般情况下我们需要锁定计算机操作时,都是按下ct ...
- 游戏使用的组合键(热键)被占用的一种解决方案
最新学习Unity的Animator,做了一个简单的控制人物待机.走跑和跳跃动作的study project.其中一个控制规则是按下W走,按下Shift+W跑,按着Shift+W的同时按空格键则播放跳 ...
最新文章
- DIV+CSS笔记(一)
- administrator没有管理员权限_网络安全 之 NTFS安全权限
- 自定义Excel下拉菜单
- mybatis报错Type interface xxx.Dao is not...
- express与express-art-template两者相结合使用方法
- 1472: C语言实验题――逆置正整数
- 【Sonarqube】编程规范-Sonarqube安装与IDEA下使用
- 吓skr人!BATJ六大男神来了,还说......
- 使用Quartz.Net定时删除Log
- 如何下载Visual C++ 2010 学习版(即 Visual C++ 2010 Express)
- 【毕设笔记】轴承振动数据故障诊断软件系统
- 常用学术文献数据库界面及导出参考文献方法
- 两个经纬度偏角_转载:经纬度和方位角之间的关系
- 推荐给DBA的Oracle书籍
- 2022年化工自动化控制仪表考试及化工自动化控制仪表考试内容
- 永恒之蓝(MS17-010)
- Android uiautomatorviewer无法启动
- ng-bind、ng-value和ng-model
- excel输入公式不计算结果
- 文本编辑--程序员专属技能