Android红外遥控器编码
来源:互联网 发布:丁香园insight数据库 编辑:程序博客网 时间:2024/04/27 17:18
1.声明权限:AndroidManifest.xml
<!-- 调用红外设备权限声明 --><uses-permission android:name="android.permission.TRANSMIT_IR" /><!-- Android Market会根据uses-feature过滤所有你设备不支持的应用,即无红外功能的设备看不到此应用 --><uses-feature 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"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <Button android:id="@+id/send_button_1" android:text="Send_Button_1" android:layout_width="match_parent" android:layout_height="wrap_content" android:textAllCaps="false"/> <Button android:id="@+id/send_button_2" android:text="Send_Button_2" android:layout_width="match_parent" android:layout_height="wrap_content" android:textAllCaps="false"/> <Button android:id="@+id/send_button_3" android:text="Send_Button_3" android:layout_width="match_parent" android:layout_height="wrap_content" android:textAllCaps="false"/> <Button android:id="@+id/get_freqs_button" android:text="Get_Frequecy" android:layout_width="match_parent" android:layout_height="wrap_content" android:textAllCaps="false"/> <ScrollView android:id="@+id/freqs_text_scroll" android:layout_width="wrap_content" android:layout_height="0dp" android:layout_weight="1"> <TextView android:id="@+id/freqs_text" android:layout_width="wrap_content" android:layout_height="wrap_content" android:paddingLeft="3dp" android:paddingRight="3dp"/> <!-- padding是控件的内容相对控件的边缘的边距. margin是控件边缘相对父空间的边距. --> </ScrollView></LinearLayout>
注:界面如下图
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()); } } };}
阅读全文
1 0
- Android红外遥控器编码
- Android 红外遥控器实现
- android 手机红外遥控器
- Android 手机红外遥控器实现
- 学习型红外遥控器设计(4) 红外遥控编码还原
- 红外遥控器
- 格力空调遥控器红外编码透析(长码)
- 格力空调遥控器红外编码透析(长码)
- A20红外遥控器与Android功能的适配
- 全志A20[android教程]-红外遥控器调试
- A20红外遥控器与Android功能的适配
- android 空调遥控器——红外设备(基础)
- 电脑红外遥控器
- 单片机红外遥控器设计
- 红外遥控器解码
- NEC协议红外遥控器
- 红外遥控器工作原理
- 红外遥控器解码原理
- sphinx增量索引配置
- python 导入MySQLdb模块 出现的问题 并测试
- Android的WebView加载的Html输入框被手机键盘挡住解决
- Python(二)基本数据类型和变量
- java_第二章基础
- Android红外遥控器编码
- 5类系统推荐算法,非常好使,非常全
- java 实现json格式字符串定义
- 7. Networking basics: connectors and acceptors (TCP)
- 03中国开源镜像站点汇总
- Hibernate映射—— 一对多关联映射
- GameExit—PC版
- 你是如何自学 Python 的?
- 【工作笔记】微信公众号页面摇一摇+触发音效