Android红外遥控ConsumerIrManager

目录

一、申请权限

二、ConsumerIrManager(消费者红外管理器)

三、判断是否有红外功能

四、发射红外信号

1.准备用于发射的信息

2.消费者红外管理器发射信息

五、案例代码一览


红外遥控是一种近红外光线(频率为几万赫兹)作为遥控光源的遥控方式。

Android4.4后提供了红外遥控功能,部分手机未提供该功能,该功能由ConsumerIrManager(消费者红外管理器)控制。

一、申请权限

需要申请发射红外权限,该权限无需动态申请,仅在清单文件中声明即可。

<!--发射红外权限,无需动态申请-->
<uses-permission android:name="android.permission.TRANSMIT_IR"/>

二、ConsumerIrManager(消费者红外管理器)

ConsumerIrManager(消费者红外管理器)通过getSystemService()方法获取,用于控制红外发射功能。

常用方法如下:

  • hasIrEmitter(发射器):检查设备是否拥有红外发射器。有返回true,没有返回false。
  • getCarrierFrequencies(载体频率):获取可用的载波频率范围。手机的载波频率比较固定,大都处在30kHz到56kHz之间
  • transmit:发射红外信号。第一个参数为信号频率,单位赫兹(Hz),家用电器的红外频率通常使用38000Hz;第二个参数为整型数组形式的信号格式。

三、判断是否有红外功能

使用ConsumerIrManager的hasIrEmitter方法判断设备是否有红外功能。

//获取消费者红外管理器
ConsumerIrManager consumerIrManager= (ConsumerIrManager) getSystemService(CONSUMER_IR_SERVICE);
//判断是否有红外发射器
if(consumerIrManager.hasIrEmitter()){textView.setText("该设备有红外发射器");
}
else {textView.setText("该设备无红外发射器");
}

四、发射红外信号

使用ConsumerIrManager的transmit方法发射红外信息。

1.准备用于发射的信息

红外信号由三部分组成,分别是用户码数据码电路其中用户码表示厂商代号,每个厂家都有自己的唯一代号;数据码表示按键的编号,不同的数据码代表不同的按键;电路格式表示红外信号的编码协议,每种协议都有专门的指令格式。比如说电路61212对应的是NEC6121协议,该协议的红外信号编码格式为:引导码+用户码+数据码+数据反码+结束码其中引导码和结束码都是固定的,数据反码由数据码按位取反得来真正变化的只有用户码和数据码

然而解码仪获得的用户码和数据码并不能直接写在代码中,因为液晶屏上的编码其实是十六进制数,需要转换为二进制数才行。例如用户码4055,对应的二进制数为0100 0000 01010101;数据码44,对应的二进制数为0100 0100,按位取反得到数据反码的二进制数为1011 1011。可是transmit方法,参数要传递整型数组形式的信号,并不是二进制数,这意味着二进制数还得转换成整型数组。那么整型数组里面存放的到底是些什么数据呢?这就要从数字电路中的电平说起了。电平是“电压平台”的简称,指的是电路中某一点电压的高低状态,在数字电路中常用高电平表示“1”,用低电平表示“0”。遥控器发射红外信号之时,通过“560微秒低电平+1680微秒高电平”代表“1”,通过“560微秒低电平+560微秒低电平”代表“0”。于是编写Android代码的时候,使用“560,1680”表示二进制的1使用“560,560”表示二进制的0此处的560和1680只是大概的数值,也可使用580、600替换560,或者使用1600、1650替换1680

//准备发射信息
int pattern[]={//开头两数字代表引导码9000,4500,//下面两行表示用户码560,560,560,1680,560,560,560,560,560,560,560,560,560,560,560,560,560,560,560,1680,560,560,560,1680,560,560,560,1680,560,560,560,1680,//下面一行表示数据码560,560,560,1680,560,560,560,560,560,560,560,1680,560,560,560,560,//下面一行表示数据反码560,1680,560,560,560,1680,560,1680,560,1680,560,560,560,1680,560,1680,//末尾两个数字表示结束码560,20000
};

2.消费者红外管理器发射信息

//发射,普通家电红外频率一般为38kHz
consumerIrManager.transmit(38000,pattern);

五、案例代码一览

该界面由一个TextView与一个Button组成,使用前请在清单文件申请发射红外权限。

public class MainActivity extends AppCompatActivity {private TextView textView=null;private Button button=null;private ConsumerIrManager consumerIrManager=null;//设备是否有红外发射器-标志private boolean hasIrEmitter=false;@SuppressLint("MissingInflatedId")protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//获取控件textView=findViewById(R.id.textView);button=findViewById(R.id.button);//获取消费者红外管理器consumerIrManager= (ConsumerIrManager) getSystemService(CONSUMER_IR_SERVICE);//判断是否有红外发射器if(consumerIrManager.hasIrEmitter()){textView.setText("该设备有红外发射器");hasIrEmitter=true;}else {textView.setText("该设备无红外发射器");}setIrEmitter();}/*** 设置button能发射数据*/private void setIrEmitter(){//准备发射信息int pattern[]={//开头两数字代表引导码9000,4500,//下面两行表示用户码560,560,560,1680,560,560,560,560,560,560,560,560,560,560,560,560,560,560,560,1680,560,560,560,1680,560,560,560,1680,560,560,560,1680,//下面一行表示数据码560,560,560,1680,560,560,560,560,560,560,560,1680,560,560,560,560,//下面一行表示数据反码560,1680,560,560,560,1680,560,1680,560,1680,560,560,560,1680,560,1680,//末尾两个数字表示结束码560,20000};//设置发射按钮监听器button.setOnClickListener(new View.OnClickListener() {public void onClick(View view) {if(hasIrEmitter){//发射,普通家电红外频率一般为38kHzconsumerIrManager.transmit(38000,pattern);}}});}
}

tag:红外线,红外光源,红外遥控,红外信号,红外信息,ConsumerIrManager

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

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

相关文章

腾讯云4核8G服务器支持多少人在线?CPU性能如何?

腾讯云轻量4核8G12M服务器配置446元一年&#xff0c;646元12个月&#xff0c;腾讯云轻量应用服务器具有100%CPU性能&#xff0c;系统盘为180GB SSD盘&#xff0c;12M带宽下载速度1536KB/秒&#xff0c;月流量2000GB&#xff0c;折合每天66.6GB流量&#xff0c;超出月流量包的流…

uniapp-vue3 项目初始化集成配置【开箱即用】

地址 https://gitee.com/charrie/vue3-uniapp-init 部分截图展示 技术说明 采用vue3viteuniapp技术栈&#xff0c;setup语法糖编码方式使用完全免费的sard-uniapp组件库引入unocss量子化样式引擎&#xff0c;动态css不用自己写样式&#xff0c;引用class即可&#xff0c;降低…

【SQL注入】Sqlmap使用指南(手把手保姆版)持续更新

文章目录 一、sqlmap介绍二、sqlmap命令行参数用法讲解2.1常用用法-u--batch--flush-session--dbms--level--random-agent--user-agent--tamper--technique-p--skip基础用法查询列表2.2 高阶用法-v高阶用法查询列表 一、sqlmap介绍 官网下载地址&#xff1a;https://github.co…

【LeetCode热题100】138. 随机链表的复制(链表)

一.题目要求 给你一个长度为 n 的链表&#xff0c;每个节点包含一个额外增加的随机指针 random &#xff0c;该指针可以指向链表中的任何节点或空节点。 构造这个链表的 深拷贝。 深拷贝应该正好由 n 个 全新 节点组成&#xff0c;其中每个新节点的值都设为其对应的原节点的值…

微信小程序H5设置全局弹窗

微信小程序&H5设置全局弹窗 微信小程序&H5设置全局弹窗效果图1、下载所需库2、创建vue.config.js 文件3、创建全局公告组件头部公告组件弹窗公告组件4、组件注册到全局5、在pages.json文件中配置 insetLoader6、H5需要额外使用render.js7、全局调用(一进入页面就获取弹…

18 OpenCV霍夫变换检测直线

文章目录 HoughLines 算子HoughLinesP 算子示例 HoughLines 算子 cv::HoughLines( InputArray src, // 输入图像&#xff0c;必须8-bit的灰度图像 OutputArray lines, // 输出的极坐标来表示直线 double rho, // 生成极坐标时候的像素扫描步长 double theta, //生成极坐标时候…

Windows中在C#中使用Dapper和Mysql.Data库连接MySQL数据库

Windows中在C#中使用Dapper和Mysql.Data库连接MySQL数据库 在Windows中使用C#连接Mysql数据库比较简单&#xff0c;可以直接使用MySql.Data库&#xff0c;目前最新版本为&#xff1a;8.3.0。 当然也可以结合MySql.Data和Dapper库一起使用&#xff0c;目前Dapper的最新版本为&a…

【黑马程序员】Python面向对象

文章目录 面向对象对象初始对象类的定义和使用语法代码示例 内置方法构造方法字符串方法比较方法__lt__方法__le__方法__eq__方法 封装私有成员使用私有成员 继承单继承多继承重写父类成员方法调用父类同名成员 类型注解变量注解对变量设置类型注解在注释中进行类型注解类型注解…

文本生成解码策略及其在transformers中的代码实现

诸神缄默不语-个人CSDN博文目录 开放式文本生成会偏好采样方法。 由于我要下班了&#xff0c;所以本文主要就写了第五节。别的内容请大家参考第六节给出的参考资料。 文章目录 1. 贪心搜索2. beam search3. top-k sampling4. top-p sampling5. 代码实践&#xff1a;transform…

解决ffmpeg播放摄像头延时的问题(项目案例使用有效)

第一1.目前使用的对接的海康威视的摄像机,并且采用的流媒体服务器NodeMediaServer 进行收数据流并发流数据。但是延时达到了20秒,所以客户看到的效果不是很乐观,没有办法,只能开始优化播放延时的问题,至于对接摄像头的方案有好几种。我这种情况是时间没有延迟只有画面是有…

vue 引用百度地图

address.vue <template><div><!-- 地图 --><el-drawer:visible.sync"type1"direction"rtl"size"50%"append-to-bodyclass"map-drawer":before-close"beforeClose"><div style"width: 100%…

CSS:过渡动画 (Transition)与关键帧动画(Keyfram)

一、过渡动画 (Transition) 1.简单介绍 Transition能为样式的变化提供过渡效果&#xff0c;例如在下面的代码中&#xff1a; .main {width: 300px;height: 100px;background-color: #d26f6f;}.main:hover {width: 300px;height: 200px;background-color: #5e3e3e;transition:…

语义分割前言

1.常见数据集 1.1PASCAL VOC 其标注图片为单通道图像&#xff0c;其0~255像素值为其取值范围&#xff0c;背景为0&#xff0c;目标区域内根据目标的类别索引信息进行填充。 1.2MS COCO 其标注图像的标注文件为坐标信息。 官网有给出一个关于标注文件的格式说明&#xff0…

数字信封

一、概念 数字信封是将对称密钥通过非对称加密&#xff08;即&#xff1a;有公钥和私钥两个&#xff09;的结果分发对称密钥的方法。数字信封是实现信息保密性验证的技术。 二、过程描述 在数字信封中&#xff0c;信息发送方采用对称密钥来加密信息内容&#xff0c;然后将此…

考虑源荷随机特征的热电联供微网优化(含matlab程序)

目录 一、前言 二、含可再生能源的CHP型微网系统 三、CCP理论 四、具体模型 五、不含随机变量分析的matlab程序设计 1.粒子群寻优功能代码段 2.目标函数子程序 3.其他代码段 六、基于CCP的粒子群优化程序 1.含随机变量的约束条件处理 2.随机变量生成 3.置信水平检验部…

知识点回顾梳理之Linux常用指令

文章目录 &#x1f412;个人主页&#xff1a;信计2102罗铠威&#x1f3c5;JavaEE系列专栏&#x1f4d6;前言&#xff1a; &#x1f380;点击这里&#xff1a;Linux命令大全入口&#x1f380;Linux的目录结构&#x1f415;文件作用&#x1fa80;Linux常用命令&#x1f380;关机 …

在IDE中配置tomcat服务器

目录 一、新建一个java项目二、添加web框架三、配置tomcat服务器四、运行访问发布的项目 前言&#xff1a;在 IntelliJ IDEA 中配置 Tomcat 服务器是 Java Web 开发的基础步骤&#xff0c;以下是如何在 IDEA 中设置 Tomcat 并部署 Web 项目的简要指南。 一、新建一个java项目 新…

用两个栈实现简单的四则运算

题目要求&#xff1a;给定一个字符串如“12*3”,没有括号&#xff0c;要求利用栈的知识来处理结果算出答案 我的思路&#xff1a;建立两个栈&#xff0c;一个存放数据&#xff0c;一个存放符号&#xff0c;再定义一个结构体做为操作的主体&#xff0c;然后制作几个函数&#x…