打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
关于安卓红外API:ConsumerIrManager类

之前没怎么接触过安卓编程,学校实验室要搞个小项目,本来想搞个类似小米遥控板那种的小应用。结果发现百度一下 安卓红外API 找不到有用的东西。自己摸索了半天给大家分享分享

后来在Android开发者文档里面找到了一个叫ConsumerIrManager的类。
先看看文档里面怎么写的:

public final class
ConsumerIrManager
extends Object
Java.lang.Object
android.hardware.ConsumerIrManager
Class Overview
Class that operates consumer infrared on the device.

To obtain an instance of the system infrared transmitter, call Context.getSystemService() with CONSUMER_IR_SERVICE as the argument.

Summary
Nested Classes

class ConsumerIrManager.CarrierFrequencyRange Represents a range of carrier frequencies (inclusive) on which the infrared transmitter can transmit
Public Methods
CarrierFrequencyRange[] getCarrierFrequencies() Query the infrared transmitter’s supported carrier frequencies
boolean hasIrEmitter() Check whether the device has an infrared emitter.
void transmit(int carrierFrequency, int[] pattern) Tansmit and infrared patternThis method is synchronous; when it returns the pattern has been transmitted.

当然,要使用红外首先得在AndroidManifest.xml中声明权限,并且你的手机有红外发射器(我是LG G2,有红外。其他的我就不知道了,还就知道小米4好像也有)。

<uses-permission android:name="android.permission.TRANSMIT_IR"/><uses-feature android:name="android.hardware.ConsumerIrManager"/>

然后申请一个实例
上面说了,要获得一个红外发射的实例得用Context.getSystemService()。
这个getSystemService是Android很重要的一个API,它是Activity的一个方法,根据传入的NAME来取得对应的Object,然后转换成相应的服务对象。具体的可以参考别人博客上的android中getSystemService详解
比如在MainActivity.java里面

 import android.hardware.ConsumerIrManager; ..... @Override protected void onCreate(Bundle savedInstanceState) { ..... ConsumerIrManager IR=(ConsumerIrManager)getSystemService(CONSUMER_IR_SERVICE);

这样就得到了一个ConsumerIrManager 的实例。
如果你不是在Activity类里面创建实例的话。需要传入一个context参数。

然后具体看看这个类。
CarrierFrequencyRange
这个我没用到。应该是获取传输频率范围的一个子类。
hasIrEmitter()
hasIrEmitter可以检查当前设备是否有红外。
transmit(int carrierFrequency, int[] pattern)

public void transmit (int carrierFrequency, int[] pattern)
Tansmit and infrared pattern

This method is synchronous; when it returns the pattern has been transmitted. Only patterns shorter than 2 seconds will be transmitted.

Parameters
carrierFrequency The IR carrier frequency in Hertz.
pattern The alternating on/off pattern in microseconds to transmit.

这个就是我们关注的最重要的方法了。它有两个参数,carrierFrequency代表红外传输的频率,一般的遥控板都是38KHz。pattern就是指以微妙为单位的红外开和关的交替时间。
比如说

pattern={9000,4500,600,1600};

代表红外先打开9000微秒再关闭4500微秒再打开1600微秒……..依次类推。但是要注意,整个数组的时间之和不能超过两秒。还有就是这里的开对应的是示波器上的低电平,关对应的高电平。比如网上找到的格力遥控器的编码是:

格力空调遥控器(YB0F2)红外码组成如下,按解码顺序排列
起始码(S)+35位数据码+连接码(C)+32位数据码
1、各种编码的电平宽度:
数据码由“0”“1”组成:
0的电平宽度为:600us低电平+600us高电平,
1的电平宽度为:600us低电平+1600us高电平
起始码S电平宽度为:9000us低电平+4500us高电平
连接码C电平宽度为:600us低电平+20000us高电平

详细点这里

也就是说偶数位对应的是低电平,奇数位对应的是高电平。然后只要你能找到对应遥控器的编码基本上就能够做到用手机遥控了。(我找了半天也只找到这个格力的空调遥控器)

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
红外摄影 Infrared photography
555红外线自动水阀控制器电路图
4通道红外遥控继电器电路,4 channel infrare
IRDye 800CW NHS酯,IRDye 800CW NHS Ester
TCRT5000红外测试电路
红外感应灯方案
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服