当前位置:   article > 正文

Android红外遥控ConsumerIrManager

Android红外遥控ConsumerIrManager

目录

一、申请权限

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

三、判断是否有红外功能

四、发射红外信号

1.准备用于发射的信息

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

五、案例代码一览


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

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

一、申请权限

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

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

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

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

常用方法如下:

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

三、判断是否有红外功能

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

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

四、发射红外信号

使用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

  1. //准备发射信息
  2. int pattern[]={
  3. //开头两数字代表引导码
  4. 9000,4500,
  5. //下面两行表示用户码
  6. 560,560,560,1680,560,560,560,560,560,560,560,560,560,560,560,560,
  7. 560,560,560,1680,560,560,560,1680,560,560,560,1680,560,560,560,1680,
  8. //下面一行表示数据码
  9. 560,560,560,1680,560,560,560,560,560,560,560,1680,560,560,560,560,
  10. //下面一行表示数据反码
  11. 560,1680,560,560,560,1680,560,1680,560,1680,560,560,560,1680,560,1680,
  12. //末尾两个数字表示结束码
  13. 560,20000
  14. };

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

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

五、案例代码一览

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

  1. public class MainActivity extends AppCompatActivity {
  2. private TextView textView=null;
  3. private Button button=null;
  4. private ConsumerIrManager consumerIrManager=null;
  5. //设备是否有红外发射器-标志
  6. private boolean hasIrEmitter=false;
  7. @SuppressLint("MissingInflatedId")
  8. protected void onCreate(Bundle savedInstanceState) {
  9. super.onCreate(savedInstanceState);
  10. setContentView(R.layout.activity_main);
  11. //获取控件
  12. textView=findViewById(R.id.textView);
  13. button=findViewById(R.id.button);
  14. //获取消费者红外管理器
  15. consumerIrManager= (ConsumerIrManager) getSystemService(CONSUMER_IR_SERVICE);
  16. //判断是否有红外发射器
  17. if(consumerIrManager.hasIrEmitter()){
  18. textView.setText("该设备有红外发射器");
  19. hasIrEmitter=true;
  20. }
  21. else {
  22. textView.setText("该设备无红外发射器");
  23. }
  24. setIrEmitter();
  25. }
  26. /**
  27. * 设置button能发射数据
  28. */
  29. private void setIrEmitter(){
  30. //准备发射信息
  31. int pattern[]={
  32. //开头两数字代表引导码
  33. 9000,4500,
  34. //下面两行表示用户码
  35. 560,560,560,1680,560,560,560,560,560,560,560,560,560,560,560,560,
  36. 560,560,560,1680,560,560,560,1680,560,560,560,1680,560,560,560,1680,
  37. //下面一行表示数据码
  38. 560,560,560,1680,560,560,560,560,560,560,560,1680,560,560,560,560,
  39. //下面一行表示数据反码
  40. 560,1680,560,560,560,1680,560,1680,560,1680,560,560,560,1680,560,1680,
  41. //末尾两个数字表示结束码
  42. 560,20000
  43. };
  44. //设置发射按钮监听器
  45. button.setOnClickListener(new View.OnClickListener() {
  46. public void onClick(View view) {
  47. if(hasIrEmitter){
  48. //发射,普通家电红外频率一般为38kHz
  49. consumerIrManager.transmit(38000,pattern);
  50. }
  51. }
  52. });
  53. }
  54. }

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/247808?site
推荐阅读
相关标签
  

闽ICP备14008679号