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

一、篇头

最近实现热键想功能,简单总结了下全志平台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
    @Overridepublic 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;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_focus);mJniMotor = new JniMotor();}@Overridepublic boolean onKeyDown(int keyCode, KeyEvent event) {switch (keyCode){case KeyEvent.KEYCODE_ZOOM_IN:{//rightLog.d(TAG, "KEYCODE_ZOOM_IN + 5" + mJniMotor.ioctl(1, 5));}break;case KeyEvent.KEYCODE_ZOOM_OUT:{//leftLog.d(TAG, "KEYCODE_ZOOM_OUT -5 " + mJniMotor.ioctl(2, 5));}break;default:return super.onKeyDown(keyCode, event);}return true;}
}

4.3 调试打印

  • Andorid 打印如下

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spring Boot集成antlr实现词法和语法分析

1.什么是antlr? Antlr4 是一款强大的语法生成器工具,可用于读取、处理、执行和翻译结构化的文本或二进制文件。基本上是当前 Java 语言中使用最为广泛的语法生成器工具。Twitter搜索使用ANTLR进行语法分析,每天处理超过20亿次查询&#xff1…

离线安装zabbix-agent,自制yum源方式安装

文章目录 1,机器准备大致思路 2,在机器A上操作2.1 执行完后会在/etc/yum.repos.d/下面自动生成yum文件(zabbix.repo)2.2 将官方源改为国内源2.3 修改zabbix.repo文件的[zabbix-frontend]的参数项2.4 清除缓存即可2.5 下载所需zabb…

Semantic Kernel 直接调用本地大模型与阿里云灵积 DashScope

本文主要介绍如何在无需网关,无需配置 HttpClient 的情况下,使用 Semantic Kernel 直接调用本地大模型与阿里云灵积 DashScope 等 OpenAI 接口兼容的大模型服务。 1. 背景 一直以来,我们都在探索如何更好地利用大型语言模型(LLM&…

AI 已经在污染互联网了。。赛博喂屎成为现实

大家好,我是程序员鱼皮。这两年 AI 发展势头迅猛,更好的性能、更低的成本、更优的效果,让 AI 这一曾经高高在上的技术也走入大众的视野,能够被我们大多数普通人轻松使用,无需理解复杂的技术和原理。 其中,…

2024: 有效使用OKR的10个技巧

2023年是许多前所未有的一年。从真正意义上讲,这一年让我们为不可预测的事情做好了准备,也为不确定的事情提供了训练。在我们身边发生了这么多事情,而下一步的行动却依然不甚明朗的情况下,领导者们更应该开始制定战略,…

wvp-GB28181-pro 源码分析-查询设备信息和通道流程(二)

文章目录 一、SIP通信方法介绍1.1 核心方法(Core Methods)1.2 扩展方法(Extension Methods)二、源码分析2.1 SIP协议处理过程2.2 查询设备信息的sip过程(CmdType=DeviceInfo)2.2.1 摄像机注册成功后,wvp会发命令查询设备信息2.2.2 查询信令发出2.2.3 处理设备查询返回的XML2…

还在为Android开发找不到图片测试资源发愁吗? DummyImage来助你加速开发

使用 DummyImage 模拟电影应用数据 在开发和测试过程中,模拟数据是不可或缺的工具。它可以帮助我们在没有真实数据的情况下测试应用程序的功能和性能。本文将介绍如何使用 [DummyImage]https://dummyimage.com生成占位符图像来模拟电影应用的数据,并深入…

蓝牙技术|蓝牙耳机将成钥匙,佩戴时靠近设备即解锁

微软公司于今年 6 月 13 日获批一项技术专利,探索耳机验证技术,未来用户不仅可以拿耳机来听歌、通话,而且可以变身钥匙,配合其它计算设备进行身份验证。 微软在专利中概述称用户佩戴这款耳机之后,可以发出超声波信号…

国产数据库也开始堆砌功能了?试图在行业中炫技!

作者:IT邦德 中国DBA联盟(ACDU)成员,10余年DBA工作经验, Oracle、PostgreSQL ACE CSDN博客专家及B站知名UP主,全网粉丝10万 擅长主流Oracle、MySQL、PG、高斯及Greenplum备份恢复, 安装迁移,性能优化、故障…

每日一练:攻防世界:ewm

这道题我尝试了使用montagegaps解题,但是没有解出来,图片数量不是很多,可以尝试用PS直接拼图,但是这样学不到东西,我也就没尝试,直接看的官方WP 这段代码应该是改变工作目录到small,并且变量当…

【DevOps】Nginx配置文件详解与实战部署PHP站点

目录 引言 Nginx配置文件概述 基本结构 关键指令 Nginx配置文件实战 全局指令配置 HTTP指令配置 服务器指令配置 位置指令配置 实战部署PHP站点 步骤1:安装Nginx和PHP 步骤2:创建网站目录和文件 步骤3:配置Nginx服务器块 步骤4…

家具市场规模超7660亿美元,赛盈分销这些卧室家具在海外大卖!

今年,全球家具市场似乎表现都十分乐观。 根据海关出口总署的相关数据,我国的家具出口额1-5月份达到了2121.5亿元,同比增长20.5%。国内家具出口增速显著,换句话说,就是老外对家具又有更多的消费能力了。 在Statista的…

阿里云PAI大模型评测最佳实践

作者:施晨、之用、南茵、求伯、一耘、临在 背景信息 内容简介 在大模型时代,随着模型效果的显著提升,模型评测的重要性日益凸显。科学、高效的模型评测,不仅能帮助开发者有效地衡量和对比不同模型的性能,更能指导他…

深入浅出Git原理与Gitflow流程

1 Git原理 版本控制系统在软件开发和团队协作中扮演着至关重要的角色。它们帮助开发人员跟踪和管理代码的变化,协调多人同时编辑同一代码库,回溯历史版本,并解决代码冲突等问题。Git作为当今最流行的分布式版本控制系统,为开发人…

刷代码随想录有感(109):动态规划——01背包问题|一和零

题干&#xff1a; 代码 : class Solution { public:int findMaxForm(vector<string>& strs, int m, int n) {vector<vector<int>>dp(m 1, vector<int>(n 1, 0));dp[0][0] 0;for(string i : strs){int oneNum 0;int zeroNum 0;for(char c : i…

Web渗透:XSS-反射型存储型

跨站脚本攻击&#xff08;Cross-Site Scripting&#xff0c;XSS&#xff09;是一种常见的网络安全漏洞&#xff0c;它允许攻击者将恶意脚本注入到网页中&#xff0c;其他用户在浏览这些页面时&#xff0c;可能会执行这些恶意脚本&#xff0c;从而导致各种安全问题&#xff0c;如…

innovus:如何设置timing报告格式

我正在「拾陆楼」和朋友们讨论有趣的话题&#xff0c;你⼀起来吧&#xff1f; 拾陆楼知识星球入口 在flow中添加如下设置即可设置好timing report的格式。 set report_timing_format [list timing_point arc net cell fanout load slew incr_delay delay arrival total_derate…

示例:WPF中应用MarkupExtention自定义IValueConverter

一、目的&#xff1a;应用MarkupExtention定义IValueConverter&#xff0c;使得应用起来更简单和高效 二、实现 public abstract class MarkupValueConverterBase : MarkupExtension, IValueConverter{public abstract object Convert(object value, Type targetType, object …

高考志愿选专业,文科生如何分析选择专业?

每到高考时节&#xff0c;学生们最关注的就是专业选择&#xff0c;以及未来职业发展问题&#xff0c;对于文科生来说&#xff0c;面对文科专业的众多选择&#xff0c;很多人都有些不知所措&#xff0c;如何选择适合自己兴趣爱好&#xff0c;又有良好就业前景的工作。从哪些方面…

Tailwind CSS 响应式设计实战指南

title: Tailwind CSS 响应式设计实战指南 date: 2024/6/13 updated: 2024/6/13 author: cmdragon excerpt: 这篇文章介绍了如何运用Tailwind CSS框架创建响应式网页设计&#xff0c;涵盖博客、电商网站及企业官网的布局实例&#xff0c;包括头部导航、内容区域、侧边栏、页脚…