• Android红外遥控ConsumerIrManager


    目录

    一、申请权限

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

    三、判断是否有红外功能

    四、发射红外信号

    1.准备用于发射的信息

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

    五、案例代码一览


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

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

    一、申请权限

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

    1. <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

  • 相关阅读:
    汇编语言指令
    懒羊羊闲话4 - 献给那些苦于学习无法入门的同学
    【Robotframework+python】实现http接口自动化测试
    红黑树的模拟实现
    QT基础教程(QDebug和QString)
    C4BUILDER—用于构建C4模型图的Web项目
    国内食用油行业数据浅析
    【Rust】快速教程——一直在单行显示打印、输入、文件读写
    服务运营 |文章精选:运筹学视角下的众包竞赛
    富格林:应用正规技巧阻挠被骗
  • 原文地址:https://blog.csdn.net/m0_57150356/article/details/136708798