小编接着上一篇博客接着说咱们的空调遥控器,上一篇讲了基本的发送一个指令,这次小编给大家带来了,android基于红外的空调遥控器的完整版,基本实现了对格力空调的完全控制,(源代码已经,在我的资源处给出了大家可以点击链接下载http://download.csdn.net/detail/gywuhengy/9865590)不说了 上图:
这是第一张 关闭状态:
第二张:开机
第三张:简单的切换模式 调整温度:
2.原理 ,实现已经在代码里面说的很清楚了,大家自己看一下吧(主要贴出功能代码,布局自己在源码里面看吧)
空调遥控器 主fragment
package com.gaoyu.smarttools.fragment;
import android.content.Context;
import android.graphics.Typeface;
import android.hardware.ConsumerIrManager;
import android.os.Build;
import android.os.Bundle;
import android.support.annotation.RequiresApi;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
import com.gaoyu.smarttools.R;
import com.gaoyu.smarttools.bean.AirBean;
import com.gaoyu.smarttools.date.CodeCommand;
import static android.content.Context.CONSUMER_IR_SERVICE;
/**
* Created by ${高宇} on 17/6/5.
*/
//需要api大于19与下面if判断用途类似
@RequiresApi(api = Build.VERSION_CODES.KITKAT)
public class AirConditionerFragment extends Basefragment implements View.OnClickListener {
//获取红外控制类
private ConsumerIrManager IR;
//判断是否有红外功能
boolean IRBack;
private View view;
private TextView tempShow, airWindDir, windDirAuto, windSpeed, modeShow;
private ImageView modeCold, modeWatted, modeAuto, modeSupply, modeHeating;
//开关、度数、模式、自动手动、风向、风量
private AirBean airBean = new AirBean(0, 25, 0, 0, 0, 0);
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
view = inflater.inflate(R.layout.fragment_air, container, false);
inItEvent();
inItUI();
return view;
}
//初始化事务
private void inItEvent() {
//获取ConsumerIrManager实例
IR = (ConsumerIrManager)getActivity().getSystemService(CONSUMER_IR_SERVICE);
//如果sdk版本大于4.4才进行是否有红外的功能(手机的android版本)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
IRBack = IR.hasIrEmitter();
if (!IRBack) {
showToast("对不起,该设备上没有红外功能!");
} else {
showToast("红外设备就绪");//可进行下一步操作
}
}
}
//初始化UI
private void inItUI() {
//按钮设置
DisplayMetrics dm = getResources().getDisplayMetrics();
int screenWidth = dm.widthPixels / 4;
int screenHeight = dm.heightPixels / 10;
Log.e("gaoyu", "宽高" + screenWidth + screenHeight);
Button air_power = (Button) view.findViewById(R.id.btn_air_power);
air_power.setOnClickListener(this);
air_power.setWidth(screenWidth);
air_power.setHeight(screenHeight);
Button air_mode = (Button) view.findViewById(R.id.btn_air_mode);
air_mode.setOnClickListener(this);
air_mode.setWidth(screenWidth);
air_mode.setHeight(screenHeight);
Button air_tempadd = (Button) view.findViewById(R.id.btn_air_up);
air_tempadd.setOnClickListener(this);
air_tempadd.setWidth(screenWidth);
air_tempadd.setHeight(screenHeight);
Button air_tempsub = (Button) view.findViewById(R.id.btn_air_down);
air_tempsub.setOnClickListener(this);
air_tempsub.setWidth(screenWidth);
air_tempsub.setHeight(screenHeight);
Button air_wind_auto_dir = (Button) view.findViewById(R.id.btn_air_auto);
air_wind_auto_dir.setOnClickListener(this);
air_wind_auto_dir.setWidth(screenWidth);
air_wind_auto_dir.setHeight(screenHeight);
Button air_wind_count = (Button) view.findViewById(R.id.btn_air_count);
air_wind_count.setOnClickListener(this);
air_wind_count.setWidth(screenWidth);
air_wind_count.setHeight(screenHeight);
Button air_wind_dir = (Button) view.findViewById(R.id.btn_air_direction);
air_wind_dir.setOnClickListener(this);
air_wind_dir.setWidth(screenWidth);
air_wind_dir.setHeight(screenHeight);
//显示设置
Context context = getContext();
Typeface type = Typeface.createFromAsset(context.getAssets(), "fonts/lcd.TTF");
tempShow = (TextView) view.findViewById(R.id.temp_show);
tempShow.setTypeface(type);
modeShow = (TextView) view.findViewById(R.id.text_mode);
windSpeed = ((TextView) view.findViewById(R.id.text_wind_speed));
airWindDir = ((TextView) view.findViewById(R.id.wind_dir));
windDirAuto = ((TextView) view.findViewById(R.id.wind_dir_auto));
modeCold = (ImageView) view.findViewById(R.id.image_cold);
modeWatted = (ImageView) view.findViewById(R.id.image_watted);
modeAuto = (ImageView) view.findViewById(R.id.image_auto);
modeSupply = (ImageView) view.findViewById(R.id.image_supply);
modeHeating = (ImageView) view.findViewById(R.id.image_heating);
}
/**
* 点击处理
*
* @param v
*/
@Override
public void onClick(View v) {
//五中模式
int data;
//关机状态
if(IRBack == false){
showToast("无红外设备!");
return;
}
if (airBean.getmPower() == 0x00 && v.getId() != R.id.btn_air_power) {
return;
}
switch (v.getId()) {
case R.id.btn_air_mode:
data = airBean.getmMode();
data++;
if (data > 4) {
data = 0;
}
airBean.setmMode(data);
SendMsg(airBean);
break;
case R.id.btn_air_power:
if (airBean.getmPower() == 0) {
airBean.setmPower(1);
} else {
airBean.setmPower(0);
}
//发送消息
SendMsg(airBean);
break;
case R.id.btn_air_up:
data = airBean.getmTmp();
data++;
if (data > 30) {
data = 16