1. 程式人生 > >Android紅外遙控器編碼

Android紅外遙控器編碼

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()); } } }; }