全志 Android 11:实现响应全局按键

news2024/11/28 20:48:16

一、篇头

最近实现热键想功能,简单总结了下全志平台Android 11 的响应全局热键的方法。


调焦界面


二、需求

实现全局热键,响应F-、AF、F+三个按键,AF只用于启动调焦界面,F-和F+除了可以启动调焦界面外,还用于调整镜头的焦距(控制步进电机进退)。

遥控器局部图

三、按键配置

配置方法略,可参考本人红外或蓝牙的按键配置的相文章。

  • 如下在kl文件中添加3个按键
  • ZOOM_IN和ZOOM_OUT用于控制调焦电机的进和退,也用于启动调焦界面
  • APP_SWITCH 暂用于启动调焦界面
key 53   ZOOM_IN  //对应遥控器的F-
key 52   ZOOM_OUT //对应遥控器的F+
key 64   APP_SWITCH //对应遥控器的AF

四、代码实现

4.1 全局按键响应:TvWindowManager.java

  • 位置:android\frameworks\base\services\core\java\com\android\server\policy\TvWindowManager.java
    @Override
    public int interceptKeyBeforeQueueing(KeyEvent event, int policyFlags) {
        int keyCode = event.getKeyCode();
        final boolean down = event.getAction() == KeyEvent.ACTION_DOWN;
		Log.d(TAG,"key event key = " + KeyEvent.keyCodeToString(keyCode));

…… 略…… 
        if (down) {

…… 略…… 

                case KeyEvent.KEYCODE_APP_SWITCH:
                case KeyEvent.KEYCODE_ZOOM_IN:
                case KeyEvent.KEYCODE_ZOOM_OUT:
					 //(1)判断当前topActivity,如果已经打开了调焦界面,则不再启动
                     if (mActivityManager == null)
                         mActivityManager = (ActivityManager)mContext.getSystemService(Context.ACTIVITY_SERVICE);
                     ComponentName cn = mActivityManager.getRunningTasks(1).get(0).topActivity;
                     String ActivityName = cn.getClassName();
                     Log.d(TAG, "current activity is " + ActivityName);
                     if (ActivityName.contains("cictech.projector.FocusActivity")) {
                         Log.d(TAG, " do NOT start FocusActivity ");
                         break;
                     }
					//(2)启动调焦界面
                    Log.d(TAG, " Key down to start FocusActivity ");
                    Intent focusIntent = new Intent();
                    focusIntent.setComponent(new ComponentName("com.android.tv.settings", "com.android.tv.settings.szhou.projector.FocusActivity"));
                    focusIntent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
                    focusIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                    mContext.startActivity(focusIntent);
                    break;

4.2 调焦界面:FocusActivity.java

public class FocusActivity extends Activity {

    private final String TAG = "FocusActivity";
    private JniMotor mJniMotor;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_focus);
        mJniMotor = new JniMotor();
    }

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {

        switch (keyCode){
            case KeyEvent.KEYCODE_ZOOM_IN:
            {
                //right
                Log.d(TAG, "KEYCODE_ZOOM_IN + 5" + mJniMotor.ioctl(1, 5));
            }
            break;
            case KeyEvent.KEYCODE_ZOOM_OUT:
            {
                //left
                Log.d(TAG, "KEYCODE_ZOOM_OUT -5 " + mJniMotor.ioctl(2, 5));
            }
            break;
            default:
                return super.onKeyDown(keyCode, event);
        }
        return true;
    }
}

4.3 调试打印

  • Andorid 打印如下

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1851309.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

RN组件库 - Button 组件

从零构建 React Native 组件库,作为一个前端er~谁不想拥有一个自己的组件库呢 1、定义 Button 基本类型 type.ts import type {StyleProp, TextStyle, ViewProps} from react-native; import type {TouchableOpacityProps} from ../TouchableOpacity/type; import…

【活动】TSRC反爬虫专项正式启动!

活动时间 即日起 ~ 2024年7月5日 18:00 测试范围:微信公众号、腾讯新闻等 测试域名:mp.weixin.qq.com 微信公众号相关接口 1. 微信公众号文章列表 2. 历史文章 3. 文章详细内容 注:详情报名后公布。反爬虫专项将不定期上线新业务&#xf…

Java比较运算符

关系运算符和比较运算符适用于条件判断类型。 相当于布尔值,只有True和False两个 符号 说明ab,判断a的值是否等于b的值,条件成立为true,不成立为false ! a!b,判断a和b的值是否不相等,条件成立为true,不成立为false > …

【字符串 状态机动态规划】1320. 二指输入的的最小距离

本文涉及知识点 动态规划汇总 字符串 状态机动态规划 LeetCode1320. 二指输入的的最小距离 二指输入法定制键盘在 X-Y 平面上的布局如上图所示,其中每个大写英文字母都位于某个坐标处。 例如字母 A 位于坐标 (0,0),字母 B 位于坐标 (0,1)&#xff0…

java之url任意跳转漏洞

1 漏洞介绍 URLRedirect url重定向漏洞也称url任意跳转漏洞,网站信任了用户的输入导致恶意攻击,url重定向主要用来钓鱼,比如url跳转中最常见的跳转在登陆口,支付口,也就是一旦登陆将会跳转任意自己构造的网站&#xf…

操作系统实验一:实验环境搭建与系统调用(在VMWare中安装xv6)

目录 一、实验目的 二、具体任务安排 1.实验环境搭建 2.系统调用 近来有空闲,把前几个学期做的实验上传上来。如有错误的地方欢迎大佬批评指正,有更好的方法也期待您的分享~ 一、实验目的 在Windows中安装VMWare虚拟机、在虚拟机中编译安装Qemu、最终…

【软件工程】【22.04】p1

关键字: 软件需求规约基本性质、数据字典构成、内聚程度最高功能内聚、公有属性、RUP实体类、评审、测试序列、软件确认过程、CMMI能力等级 软件需求分类、DFD数据流图组成(实体)、经典详细设计、数据耦合、关联多重性、状态图、黑盒测试、…

常见的Wi-Fi蓝牙模组

在嵌入式领域,常见的Wi-Fi蓝牙模组确实包括多个知名品牌,如乐鑫、安信可和移远等,以前可能你听的最多的是ESP8266,不过今天讨论的是Wi-Fi蓝牙模组,而8266本身并不内置蓝牙功能,不在介绍范围。而拿到模块之后…

4、MFC:菜单栏、工具栏与状态栏

菜单栏、工具栏与状态栏 1、菜单栏1.1 简介1.2 创建属性设置菜单消息成员函数 1.3 实例 2、工具栏2.1 简介工具栏属性2.2 创建消息CToolBar类的主要成员函数 2.3 实例 3、状态栏3.1 简介3.2 创建CStatusBar类状态栏创建 3.3 实例 1、菜单栏 1.1 简介 菜单在界面设计中是经常使…

高斯算法的原理及其与常规求和方法的区别

高斯算法的原理 高斯算法的原理源于数学家卡尔弗里德里希高斯在他少年时期发现的一种求和方法。当时老师让学生们计算1到100的和,高斯发现了一种快速计算的方法。 高斯注意到,如果将序列的首尾两数相加,结果总是相同的。例如: …

GPT-4o一夜被赶超,Claude 3.5一夜封王|快手可灵大模型推出图生视频功能|“纯血”鸿蒙大战苹果AI|智谱AI“钱途”黯淡|月之暗面被曝进军美国

快手可灵大模型推出图生视频功能“纯血”鸿蒙大战苹果AI,华为成败在此一举大模型低价火拼间,智谱AI“钱途”黯淡手握新“王者”,腾讯又跟渠道干上了“美食荒漠”杭州,走出一个餐饮IPOGPT-4o一夜被赶超,Anthropic推出Cl…

关于Windows系统下redis的闪退问题。

一、问题分析 首先,有这个问题的一般是如下操作: 1、在运行项目时发现无法连接到redis服务器, 2、进入Redis安装目录(如图)——>鼠标双击打开redis-server.exe,然后闪退, 3、运行redis-cli时提示:“由…

【招聘贴】JAVA后端·唯品会·BASE新加坡

作者|老夏(题图:公司业务介绍页) “ 请注意,这两个岗是BASE新加坡的,欢迎推荐给身边需要的朋友(特别是在新加坡的)。” VIP海外业务-产品技术团队,这两个岗位属于后端工程组的岗&…

STM32之二:时钟树

目录 1. 时钟 2. STM3时钟源(哪些可以作为时钟信号) 2.1 HSE时钟 2.1.1 高速外部时钟信号(HSE)来源 2.1.2 HSE外部晶体电路配置 2.2 HSI时钟 2.3 PLL时钟 2.4 LSE时钟 2.5 LSI时钟 3. STM32时钟(哪些系统使用时…

机器学习课程复习——逻辑回归

1. 激活函数 Q:激活函数有哪些? SigmoidS型函数Tanh 双曲正切函数

【技巧】Leetcode 201. 数字范围按位与【中等】

数字范围按位与 给你两个整数 left 和 right ,表示区间 [left, right] ,返回此区间内所有数字 按位与 的结果(包含 left 、right 端点)。 示例 1: 输入:left 5, right 7 输出:4 解题思路 …

外部存储器

外部存储器是主存的后援设备,也叫做辅助存储器,简称外存或辅存。 它的特点是容量大、速度慢、价格低,可以脱机保存信息,属于非易失性存储器。 外存主要有:光盘、磁带、磁盘;磁盘和磁带都属于磁表面存储器…

three.js 第八节 - gltf加载器、解码器

// ts-nocheck // 引入three.js import * as THREE from three // 导入轨道控制器 import { OrbitControls } from three/examples/jsm/controls/OrbitControls // 导入hdr加载器(专门加载hdr的) import { RGBELoader } from three/examples/jsm/loaders…

工业web4.0UI风格令人惊艳

工业web4.0UI风格令人惊艳

6月27日云技术研讨会 | 中央集中架构新车型功能和网络测试解决方案

会议摘要 “软件定义汽车”新时代下,整车电气电气架构向中央-区域集中式发展已成为行业共识,车型架构的变革带来更复杂的整车功能定义、更多的新技术的应用(如SOA服务化、TSN等)和更短的车型研发周期,对整车和新产品研…