在好例子网,分享、交流、成长!
您当前所在位置:首页Java 开发实例Android平台开发 → 智能家居app源码(android)

智能家居app源码(android)

Android平台开发

下载此实例
  • 开发语言:Java
  • 实例大小:4.07M
  • 下载次数:330
  • 浏览次数:5662
  • 发布时间:2017-02-22
  • 实例类别:Android平台开发
  • 发 布 人:xinyuan2020
  • 文件格式:.rar
  • 所需积分:2
 相关标签: 源码 智能家居

实例介绍

【实例简介】

登录的用户名密码均为 a, 有 门禁控制 窗帘控制 空调控制 灯控制


【实例截图】

【核心代码】


package com.geclab.smarthome;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.UnsupportedEncodingException;
import java.net.Socket;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

public class MainPage extends Activity{

	private BrdcstReceiver receiver; 
	private boolean   isOnStart ;  // 用来判断是否更新界面
	private String conIP;	//智能家居控制板网络服务IP地址
	private String conPort;	//智能家居控制板网络服务端口号
	
	private TextView mainDoorState,
					mainAirTemper, 
					mainAirHum,
					mainCurtainState,
					mainLLamp,
					mainRLamp;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		
		initVariables();
		
		connectToServer();
	}
	
	public void initVariables(){
		conIP = "192.168.0.23";//"192.168.1.105";//"192.168.100.103" ;//
		conPort = "1115";//"192.168.1.105";//
		
		mainDoorState = (TextView)findViewById(R.id.tvMainDoor);
		mainAirTemper = (TextView)findViewById(R.id.tvMainAirTemperature);
		mainAirHum = (TextView)findViewById(R.id.tvMainAirHumidity);
		mainCurtainState = (TextView)findViewById(R.id.tvMainCurtain);
		mainLLamp = (TextView)findViewById(R.id.tvMainLivingLamp);	//客厅灯TextView
		mainRLamp = (TextView)findViewById(R.id.tvMainRoomLamp);//房间灯TextView
	}

	public void openChild(String str){
		try {
			Class ourClass = Class.forName("com.geclab.smarthome." str);
			Intent ourIntent = new Intent(MainPage.this, ourClass);
			startActivity(ourIntent);
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	public void onIVDoor(View v){
		openChild("ChildDoor");
	}
	
	public void onIVAir(View v){
		openChild("ChildAir");
	}
	
	//窗帘控制的响应
	public void onIVCurtain(View v){
		openChild("ChildCurtain");
	}
	
	public void onIVLamp(View v){
		openChild("ChildLamp");
	}
	
	public void onIVConfig(View v){

		/**
		 * 在实际开发中LayoutInflater这个类还是非常有用的,
		 * 它的作用类似于findViewById()。
		 * 不同点是LayoutInflater是用来找res/layout/下的xml布局文件,并且实例化;
		 * 而findViewById()是找xml布局文件下的具体widget控件(如 Button、TextView等)。
		 * 具体作用:
		 * 1、对于一个没有被载入或者想要动态载入的界面,都需要使用LayoutInflater.inflate()来载入;
		 * 2、对于一个已经载入的界面,就可以使用Activiyt.findViewById()方法来获得其中的界面元素。
		 */
		LayoutInflater factory = LayoutInflater.from(MainPage.this);
		final View v1=factory.inflate(R.layout.child_config,null);
		AlertDialog.Builder dialog=new AlertDialog.Builder(MainPage.this);
		
		dialog.setTitle("网络连接属性");
		dialog.setView(v1);
		final EditText editTextIp = (EditText)v1.findViewById(R.id.connectionurl);
		final EditText editTextPort = (EditText)v1.findViewById(R.id.controlurl);
		editTextIp.setText(conIP);		//初始值
		editTextPort.setText(conPort);	//初始值
    	
        dialog.setPositiveButton("确定", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int whichButton) {
            	conIP   = editTextIp.getText().toString();
            	conPort = editTextPort.getText().toString();
            	Toast.makeText(MainPage.this, "设置成功!", Toast.LENGTH_SHORT).show(); 
            }
        });
        dialog.setNegativeButton("取消",new DialogInterface.OnClickListener() {
			public void onClick(DialogInterface dialog, int which) {
				
			}
		});
        dialog.show();
	}
	
	public void onIVExit(View v){
		AlertDialog.Builder builder = new AlertDialog.Builder(MainPage.this);
        builder.setMessage("确认退出?")
               .setPositiveButton("确定", new DialogInterface.OnClickListener() {
                   public void onClick(DialogInterface dialog, int id) {
                       // FIRE ZE MISSILES!
                	   finish();
                   }
               })
               .setNegativeButton("取消", new DialogInterface.OnClickListener() {
                   public void onClick(DialogInterface dialog, int id) {
                       // User cancelled the dialog
                	   
                   }
               }).show();		//finish();
	}
	
	/* 开启连接服务器线程, 避免卡死界面*/
	void connectToServer(){
		new Thread() {
            public void run() {
            	/*启动后台service服务, 接受网络数据*/
            	MainPage.this.startService(new Intent(MainPage.this, ServiceSocket.class)); 
            	
            	/*设置接收后台的广播信息*/
        		receiver = new BrdcstReceiver();  
                IntentFilter filter = new IntentFilter();  
                filter.addAction("android.intent.action.MY_RECEIVER");                   
                registerReceiver(receiver, filter); //注册  
            	
                /*连接服务器*/
            	int  port = Integer.parseInt(conPort);        	    
        		try {
        			Socket socket = new Socket(conIP, port);
        			/**
        			 * 设置网络,输入流,输出流
        			 */
        			NetworkUtil.socket = socket;
        			NetworkUtil.out = new PrintWriter(
        					new BufferedWriter(
        							new OutputStreamWriter(socket.getOutputStream(),"UTF-8")), true);
        			NetworkUtil.br = new BufferedReader(
        			new InputStreamReader(socket.getInputStream(), "UTF-8"));
        		} catch (UnsupportedEncodingException e) {
        			// TODO Auto-generated catch block
        			e.printStackTrace();
        		} catch (IOException e) {
        			// TODO Auto-generated catch block
        			e.printStackTrace();
        		}
        		                
            }
		}.start();
	}
	@Override  
    protected void onResume() {  
        super.onResume();  
        isOnStart = true;
        updateUI();  // 更新界面
        Log.e("setting", "start onResume~~~");  
    }  
	
	@Override  
    protected void onStop() {
        isOnStart = false;
        Log.e("mainactivity ", "start onStop~~~");  
        super.onStop();          
    }  
	/*更新界面的各个图标的状态*/
	private void updateUI(){
		if(!isOnStart){
    		return;
    	}
		//更新门禁状态
		if(HomeConfig.RELAY_STATUE){
			mainDoorState.setText("状态:开");
		}else{
			mainDoorState.setText("状态:关");
		}
		//更新窗帘状态
		if(HomeConfig.CURTAIN_STATUE){
			mainCurtainState.setText("状态:开");
		}else{
			mainCurtainState.setText("状态:关");
		}
		//更新房间灯状态
		if(HomeConfig.ROOMLIGHT_STATUE){
			mainRLamp.setText("房:亮");
		}else{
			mainRLamp.setText("房:灭");
		}
		//更新客厅灯状态
		if(HomeConfig.CUSTOMERRIGHT_STATUE){
			mainLLamp.setText("厅:亮");
		}else{
			mainLLamp.setText("厅:灭");
		}
	}

	@Override protected void onDestroy() {  		 
		unregisterReceiver(receiver); //  注销
		this.stopService(new Intent(this, ServiceSocket.class));// 停止service  
		Log.v("mainactivity ", "mainactivity onDestroy" );
		super.onDestroy(); 
    }
    
	/**************广播:接收后台的service发送的广播******************/
    private class BrdcstReceiver extends BroadcastReceiver {  		  
        @Override  
        public void onReceive(Context context, Intent intent) {  
//            Bundle bundle = intent.getExtras();
            String stringValue=intent.getStringExtra("strRecvMsg");            
        	//Log.v("mainactivity", "onReceive"   stringValue);
            //   发送的测试码(windows平台) , 如果是linux平台请去掉前面四个点
        	//....#SERVERSDATA#12C#35%#
        	//....#SERVERSIGN#A1#B1#C0#D0#E1#F0#
        	//....#SERVERSIGN#A0#B0#C0#D0#E1#F0#
            //....#SERVERSIGN#A1#B1#C1#D1#E1#F0#
            //....#SERVERSDATA#42C#41%#
            //....#SERVERSIGN#A0#B0#C0#D0#E0#F0#
            //....#SERVERSIGN#B#ON#
        	if(stringValue.startsWith("#SERVERSDATA#")){// 温湿度
	    		String sub = stringValue.substring(stringValue.indexOf('#'), stringValue.lastIndexOf('#')   1);
				String[] strs = sub.split("#");
    			mainAirTemper.setText("温:"   strs[2]);
    			mainAirHum.setText("湿:"   strs[3]);
        	}else{        		
        		updateUI();        		     		
        	}
        	
        }
    }  
}


标签: 源码 智能家居

实例下载地址

智能家居app源码(android)

不能下载?内容有错? 点击这里报错 + 投诉 + 提问

好例子网口号:伸出你的我的手 — 分享

网友评论

第 1 楼 ZCYYY 发表于: 2020-05-18 16:53 47
你好 我想问下这个例子怎么才能连接网络,并且用手机进行控制呢

支持(0) 盖楼(回复)

第 2 楼 catcat 发表于: 2021-03-16 21:28 15
你这怎么打不开

支持(0) 盖楼(回复)

第 3 楼 rrt 发表于: 2021-07-06 16:53 39
有文档吗?

支持(0) 盖楼(回复)

发表评论

(您的评论需要经过审核才能显示)

查看所有5条评论>>

小贴士

感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。

  • 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
  • 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
  • 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
  • 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。

关于好例子网

本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明

;
报警