实例介绍
【实例简介】
登录的用户名密码均为 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(); } } } }
网友评论
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明
支持(0) 盖楼(回复)
支持(0) 盖楼(回复)
支持(0) 盖楼(回复)