Android紅外遙控器編碼
阿新 • • 發佈:2019-02-02
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());
}
}
};
}