Android红外遥控器编码

美的红外遥控编码

1.声明权限:AndroidManifest.xml


android:name="android.permission.TRANSMIT_IR" />

android:name="android.hardware.ConsumerIrManager" />

2.新建布局文infrared_layout.xml件如下,

这里添加了四个Button,一个TextView

send_button_1——3:用于发射不同的红外信号

get_freqs_button:获取红外频率范围

freqs_text:显示文本内容

xml version="1.0" encoding="utf-8"?>
xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">


    

注:界面如下图

Android红外遥控器编码_第1张图片

3.新建空的Acticity,命名为MyInfrared,代码如下,附带注释:

package com.example.myinfraredtest1;

import android.annotation.SuppressLint;
import android.annotation.TargetApi;
import android.content.Context;
import android.hardware.ConsumerIrManager;
import android.os.Build;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;

public class MyInfrared extends AppCompatActivity {

    private TextView MyFreqsText;

    private ConsumerIrManager mCIR;//获取红外控制类
    Boolean IRBack;// //判断是否有红外功能

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.infrared_layout);
        //获取红外管理器,调用系统API
        //CONSUMER_IR_SERVICE红外的API
        mCIR = (ConsumerIrManager) getSystemService(Context.CONSUMER_IR_SERVICE);
        initInfrared();//初始化
    }

    private void initInfrared(){

        /*
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT)
            或者
            @RequiresApi(api = Build.VERSION_CODES.KITKAT)
         */
        //如果sdk版本大于4.4才进行是否有红外的功能
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT)
            IRBack = mCIR.hasIrEmitter();////判断是否有红外

        findViewById(R.id.send_button_1).setOnClickListener(SendInfrared_Button_1);
        findViewById(R.id.send_button_2).setOnClickListener(SendInfrared_Button_2);
        findViewById(R.id.send_button_3).setOnClickListener(SendInfrared_Button_3);
        findViewById(R.id.get_freqs_button).setOnClickListener(GetFrequency_Button_4);
        MyFreqsText = (TextView) findViewById(R.id.freqs_text);
    }


    View.OnClickListener SendInfrared_Button_1 = new View.OnClickListener() {
        /*屏蔽某一新api中才能使用的方法报的android lint错误,此处屏蔽transmit的错误*/
        @TargetApi(Build.VERSION_CODES.KITKAT)
        @Override
        public void onClick(View v) {
            if (!IRBack){
                Toast.makeText(MyInfrared.this,
                        "无红外功能",Toast.LENGTH_SHORT).show();
            }else{
                Toast.makeText(MyInfrared.this,
                        "Button 1",Toast.LENGTH_SHORT).show();
                /*
                   一种交替的载波序列模式,用于发射红外, pattern要和所用的红外码对应
                   下标偶数:红外开
                   下标奇数:红外关
                   单位:微秒
                   如:打开1000微秒再关闭500微秒再打开1000微秒关闭500微秒。
                   注:1.开对应的是示波器上的低电平,关对应的高电平
                       2.整个数组的时间之和不能超过两秒,且不能太短,否则无法读取用户码数据码
                 */
                int[] pattern = {
                        1000,500,1000,500,
                        1000,500,1000,500,
                        1000,500,1000,500,
                        1000,500,1000,500,
                        1000,500,1000,500 };
                /*
                    transmit(int carrierFrequency, int[] pattern)
                    参数1:代表红外传输的频率,一般是38KHz,参数2:pattern就是指以微妙为单位的红外开和关的交替时间。
                    通过38400赫兹的载波频率发射红外
                 */
                mCIR.transmit(38400,pattern);
            }
        }
    };
    View.OnClickListener SendInfrared_Button_2 = new View.OnClickListener() {
        /*屏蔽某一新api中才能使用的方法报的android lint错误,此处屏蔽transmit的错误*/
        @TargetApi(Build.VERSION_CODES.KITKAT)
        @Override
        public void onClick(View v) {
            if (!IRBack){
                Toast.makeText(MyInfrared.this,
                        "无红外功能",Toast.LENGTH_SHORT).show();
            }else{
                Toast.makeText(MyInfrared.this,
                        "Button 2",Toast.LENGTH_SHORT).show();
                /*
                   一种交替的载波序列模式,用于发射红外, pattern要和所用的红外码对应
                   下标偶数:红外开
                   下标奇数:红外关
                   单位:微秒
                   如:打开1000微秒再关闭500微秒再打开1500微秒关闭1000微秒。
                   注:1.开对应的是示波器上的低电平,关对应的高电平
                       2.整个数组的时间之和不能超过两秒,且不能太短,否则无法读取用户码数据码
                 */
                int[] pattern = {
                        1000,500,1500,1000,
                        1000,500,1500,1000,
                        1000,500,1500,1000,
                        1000,500,1500,1000,
                        1000,500,1500,1000,};
                /*
                    transmit(int carrierFrequency, int[] pattern)
                    参数1:代表红外传输的频率,一般是38KHz,参数2:pattern就是指以微妙为单位的红外开和关的交替时间。
                    通过38400赫兹的载波频率发射红外
                 */
                mCIR.transmit(38400,pattern);
            }
        }
    };
    View.OnClickListener SendInfrared_Button_3 = new View.OnClickListener() {
        /*屏蔽某一新api中才能使用的方法报的android lint错误,此处屏蔽transmit的错误*/
        @TargetApi(Build.VERSION_CODES.KITKAT)
        @Override
        public void onClick(View v) {
            if (!IRBack){
                Toast.makeText(MyInfrared.this,
                        "无红外功能",Toast.LENGTH_SHORT).show();
            }else{
                Toast.makeText(MyInfrared.this,
                        "Button 3",Toast.LENGTH_SHORT).show();
                /*
                   一种交替的载波序列模式,用于发射红外, pattern要和所用的红外码对应
                   下标偶数:红外开
                   下标奇数:红外关
                   单位:微秒
                   如:打开1500微秒再关闭2000微秒再打开1500微秒关闭2000微秒。
                   注:1.开对应的是示波器上的低电平,关对应的高电平
                       2.整个数组的时间之和不能超过两秒,且不能太短,否则无法读取用户码数据码
                 */
                int[] pattern = {
                        1500,2000,1500,2000,
                        1500,2000,1500,2000,
                        1500,2000,1500,2000,
                        1500,2000,1500,2000,
                        1500,2000,1500,2000 };
                /*
                    transmit(int carrierFrequency, int[] pattern)
                    参数1:代表红外传输的频率,一般是38KHz,参数2:pattern就是指以微妙为单位的红外开和关的交替时间。
                    通过38400赫兹的载波频率发射红外
                 */
                mCIR.transmit(38400,pattern);
            }
        }
    };

    /*屏蔽一切新api中才能使用的方法报的android lint错误,此处屏蔽getCarrierFrequencies()的错误*/
    @SuppressLint("NewApi")
    View.OnClickListener GetFrequency_Button_4 = new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (!IRBack){
                Toast.makeText(MyInfrared.this,
                        "无红外功能",Toast.LENGTH_SHORT).show();
            }else{
                Toast.makeText(MyInfrared.this,
                        "Button 4",Toast.LENGTH_SHORT).show();
                MyFreqsText.setText("");
                //内容显示
                StringBuilder content = new StringBuilder();
                //获取红外载波频率
                ConsumerIrManager.CarrierFrequencyRange[] frequencyRanges = mCIR.getCarrierFrequencies();
                content.append("Infrared frquence:");
                for (ConsumerIrManager.CarrierFrequencyRange range:frequencyRanges){
                    content.append(String.format("  %d - %d\n",
                            range.getMinFrequency(),range.getMaxFrequency()));
                }
                MyFreqsText.setText(content.toString());
            }
        }
    };
}

你可能感兴趣的:(android,传感器,Android开发)