关于安卓红外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好像也有)。



然后申请一个实例
上面说了,要获得一个红外发射的实例得用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高电平

详细点这里

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

你可能感兴趣的:(安卓)