Android红外遥控ConsumerIrManager

目录

一、申请权限

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

三、判断是否有红外功能

四、发射红外信号

1.准备用于发射的信息

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

五、案例代码一览


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

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

一、申请权限

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

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

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

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

常用方法如下:

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

三、判断是否有红外功能

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

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

四、发射红外信号

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

//准备发射信息
int pattern[]={
    //开头两数字代表引导码
    9000,4500,
    //下面两行表示用户码
    560,560,560,1680,560,560,560,560,560,560,560,560,560,560,560,560,
    560,560,560,1680,560,560,560,1680,560,560,560,1680,560,560,560,1680,
    //下面一行表示数据码
    560,560,560,1680,560,560,560,560,560,560,560,1680,560,560,560,560,
    //下面一行表示数据反码
    560,1680,560,560,560,1680,560,1680,560,1680,560,560,560,1680,560,1680,
    //末尾两个数字表示结束码
    560,20000
};

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

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

五、案例代码一览

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

public class MainActivity extends AppCompatActivity {
    private TextView textView=null;
    private Button button=null;
    private ConsumerIrManager consumerIrManager=null;
    //设备是否有红外发射器-标志
    private boolean hasIrEmitter=false;
    @SuppressLint("MissingInflatedId")
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //获取控件
        textView=findViewById(R.id.textView);
        button=findViewById(R.id.button);
        //获取消费者红外管理器
        consumerIrManager= (ConsumerIrManager) getSystemService(CONSUMER_IR_SERVICE);
        //判断是否有红外发射器
        if(consumerIrManager.hasIrEmitter()){
            textView.setText("该设备有红外发射器");
            hasIrEmitter=true;
        }
        else {
            textView.setText("该设备无红外发射器");
        }
        setIrEmitter();
    }

    /**
     * 设置button能发射数据
     */
    private void setIrEmitter(){
        //准备发射信息
        int pattern[]={
                //开头两数字代表引导码
                9000,4500,
                //下面两行表示用户码
                560,560,560,1680,560,560,560,560,560,560,560,560,560,560,560,560,
                560,560,560,1680,560,560,560,1680,560,560,560,1680,560,560,560,1680,
                //下面一行表示数据码
                560,560,560,1680,560,560,560,560,560,560,560,1680,560,560,560,560,
                //下面一行表示数据反码
                560,1680,560,560,560,1680,560,1680,560,1680,560,560,560,1680,560,1680,
                //末尾两个数字表示结束码
                560,20000
        };

        //设置发射按钮监听器
        button.setOnClickListener(new View.OnClickListener() {
            public void onClick(View view) {

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

            }
        });
    }
}

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

  • 17
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

在下嗷呜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值