友情提示:本文共有 2714 个字,阅读大概需要 6 分钟。
ConsumerIrManager类是安卓系统中用于红外通信的API之一。它允许开发者控制设备上的红外发射器,用于发送红外信号。通过ConsumerIrManager类,开发者可以调用红外发射器发送预定义的红外指令,如控制电视、空调等设备。该类提供了发送红外信号的接口,包括频率和红外数据等参数的设置。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中声明权限,并且你的手机有红外发射器(我是LGG2,有红外。其他的我就不知道了,还就知道小米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高电平
详细点这里
也就是说偶数位对应的是低电平,奇数位对应的是高电平。然后只要你能找到对应遥控器的编码基本上就能够做到用手机遥控了。(我找了半天也只找到这个格力的空调遥控器)
本文如果对你有帮助,请点赞收藏《探索安卓红外API: ConsumerIrManager类功能和应用实践》,同时在此感谢原作者。