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热键(快捷键、组合键)实现相关推荐

  1. Android:TV设置遥控器组合键

    这个其实很简单,就是获取用户的按键操作,按一次,我放到ArrayList,点击菜单的时候,我比对一下顺序是否正确 以下组合键顺序,上  -->  下  -->   左  -->  右 ...

  2. windows快捷键+组合键+搜索命令

    大佬不用鼠标飞速的操控着计算机 心里羡慕嫉妒又捉急,静下心来看一看 原来也就这样办: 这次狠下心整理了网上及日常使用率较高的    快捷键  和   组合键   ,供大家参考:           电 ...

  3. 在Android系统中添加组合键快捷启动功能

    启动系统特定功能的组合键的判断应该在系统分发按键消息前处理, 这样从系统运行 的角度来说成本最低. 添加组合键处理需要先搞清楚按键消息在framework中采集 和分发子系统的工作流程, 虽然有and ...

  4. Delphi 热键 使用WIN作为热键的组合键 给程序增加快捷键

    Delphi THotkey使用WIN键作为组合热键 高清视频 Delphi 热键 | Delphi 使用WIN键作为组合热键_Kim的博客-CSDN博客

  5. Android 组合键

    电源键 + 音量上键 长按实现关机功能 Android 9.0 1 组合键关机实现 1.1 添加必要参数 1.1 添加 handler 信息 1.3 电源键 DOWN处理 1.4 电源键 UP 处理 ...

  6. Autohotkey 组合键与序列键的定义

    [热键]组合键与序列键 https://zhuanlan.zhihu.com/autohotkey/19716319 [热键]组合键与序列键 胡杨 4 年前 作者:amnesiac 首发:官方论坛之中 ...

  7. iMac快捷键组合功能列表

    imac快捷键是通过按下键盘上的组合键来调用 Mac OS X 功能的一种方式.        要使用快捷键或组合键,您可以同时按修饰键和字符键.例如,同时按下 Command 键(标有  符号的按键 ...

  8. 按下组合键 可以迅速锁定计算机,电脑快速锁屏快捷键

    一.电脑锁屏快捷键 在windows xp时工作时,们经常要锁定计算机,当计算机被锁定后,只有重新登录才能够使用计算机,从而保证了计算机的安全. 但是,一般情况下我们需要锁定计算机操作时,都是按下ct ...

  9. 游戏使用的组合键(热键)被占用的一种解决方案

    最新学习Unity的Animator,做了一个简单的控制人物待机.走跑和跳跃动作的study project.其中一个控制规则是按下W走,按下Shift+W跑,按着Shift+W的同时按空格键则播放跳 ...

最新文章

  1. DIV+CSS笔记(一)
  2. administrator没有管理员权限_网络安全 之 NTFS安全权限
  3. 自定义Excel下拉菜单
  4. mybatis报错Type interface xxx.Dao is not...
  5. express与express-art-template两者相结合使用方法
  6. 1472: C语言实验题――逆置正整数
  7. 【Sonarqube】编程规范-Sonarqube安装与IDEA下使用
  8. 吓skr人!BATJ六大男神来了,还说......
  9. 使用Quartz.Net定时删除Log
  10. 如何下载Visual C++ 2010 学习版(即 Visual C++ 2010 Express)
  11. 【毕设笔记】轴承振动数据故障诊断软件系统
  12. 常用学术文献数据库界面及导出参考文献方法
  13. 两个经纬度偏角_转载:经纬度和方位角之间的关系
  14. 推荐给DBA的Oracle书籍
  15. 2022年化工自动化控制仪表考试及化工自动化控制仪表考试内容
  16. 永恒之蓝(MS17-010)
  17. Android uiautomatorviewer无法启动
  18. ng-bind、ng-value和ng-model
  19. excel输入公式不计算结果
  20. 文本编辑--程序员专属技能

热门文章

  1. Revit模型导出fbx带标准材质
  2. Linux下查看SSD4K对齐EXT4分区开启Trim及验证的方法
  3. IHE基础技术框架集成规范
  4. 如何做好网站建设,网站设计的方法技巧分享!
  5. IOS真机调试包 iOS15.0
  6. 区块链专业术语通俗解读
  7. 写作如何挣钱?【转】
  8. 计算机文档排版软件,正式文档排版格式计算机软件及应用IT计算机专业资料-正式文档排.pdf...
  9. 【数据库】第三章 关系数据库标准语言—SQL 笔记
  10. 卫星观测中的大气吸收、散射-大气效应描述