关于安卓红外API:ConsumerIrManager类
2015-12-10 01:06
295 查看
之前没怎么接触过安卓编程,学校实验室要搞个小项目,本来想搞个类似小米遥控板那种的小应用。结果发现百度一下 安卓红外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. |
<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高电平
详细点这里
也就是说偶数位对应的是低电平,奇数位对应的是高电平。然后只要你能找到对应遥控器的编码基本上就能够做到用手机遥控了。(我找了半天也只找到这个格力的空调遥控器)
相关文章推荐
- AsyncTask使用范例
- 【Html】段落排版--行间距(行高)
- 写着玩
- (解题报告)HDU2021---发工资咯:)
- leetcode之Binary Tree Level Order Traversal II
- UpnpDemo_调用服务
- UpnpDemo_搜索设备和服务
- 常用的机器学习&数据挖掘知识(点)总结
- UpnpDemo_发布设备和服务
- (解题报告)HDU2020---绝对值排序
- kobject和uevent的一点想法--待续
- Android中网络通信方式的简单汇总(HttpURLConnection、HttpClient、Socket等)
- UpnpDemo_定义服务
- Java poi Excel 文字缩进处理
- Java学习—— for循环
- C++ 11 Template ... 与Decltype 测试
- github基础命令
- leetcode之Binary Tree Level Order Traversal
- 【CentOS】make cc Command not found,make: *** [adlist.o] Error 127”
- 【Html】段落排版--缩进