实例介绍
【实例简介】通过android实现远程控制,主要用于智能家具控制。
【实例截图】
【核心代码】
package com.example.sarthome; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; import android.app.Activity; import android.app.AlertDialog; import android.content.Context; import android.content.DialogInterface; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.os.StrictMode; import android.text.method.ScrollingMovementMethod; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; import android.widget.Toast; public class LoginActivity extends Activity implements OnClickListener { /** Called when the activity is first created. */ private Button startButton,curtainOnOffButton,curtainAddButtonClient,curtainSubButtonClient,autoButtonClient; private Button fanOnOffButton,fanAddButtonClient,fanSubButtonClient,lampOnOffButton,lampAddButtonClient,lampSubButtonClient; private TextView recvDamp,recvTamp,recPm25,airLevel; private Context mContext; private boolean isConnecting = false; private int mport; private String ip; private Thread mThreadClient = null; private Thread mThreadServer = null; private Socket mSocketServer = null; private Socket mSocketClient = null; static BufferedReader mBufferedReaderServer = null; static PrintWriter mPrintWriterServer = null; static BufferedReader mBufferedReaderClient = null; static PrintWriter mPrintWriterClient = null; private String recvMessageClient = ""; private String mistakeMessage = ""; private String[] fanOnOff=new String[] { "*", "**"};//风扇数组长度为2 private String[] lampOnOff=new String[] { "!", "!!"};//大灯数组长度为2 private String[] curtainOnOff=new String[] { "@", "@@"};//窗帘数组长度为2 private String[] autoArray=new String[] { "$", "$$"};//窗帘数组长度为2 private String[] fanAdd=new String[] { "*0", "*1", "*2", "*3", "*4", "*5", "*6", "*7", "*8", "*9", "*10"};//风扇加数组长度为11 private String[] fanSub=new String[] { "*0", "*1", "*2", "*3", "*4", "*5", "*6", "*7", "*8", "*9", "*10"};//风扇减数组长度为11 private String[] lampSub=new String[] { "!0", "!1", "!2", "!3", "!4", "!5", "!6", "!7", "!8", "!9", "!10"};//大灯减数组长度为11 private String[] lampAdd=new String[] { "!0", "!1", "!2", "!3", "!4", "!5", "!6", "!7", "!8", "!9", "!10"};//大灯加数组长度为11 private String[] curtainSub=new String[] { "@0", "@1", "@2", "@3", "@4", "@5", "@6", "@7", "@8", "@9", "@10"};//窗帘减数组长度为11 private String[] curtainAdd=new String[] { "@0", "@1", "@2", "@3", "@4", "@5", "@6", "@7", "@8", "@9", "@10"};//窗帘加数组长度为11 private EditText dialog_ip; private EditText dialog_port; private int mFlag=-1,mFlagOnOff=-1; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_login); mContext = this; StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder() .detectDiskReads() .detectDiskWrites() .detectNetwork() // or .detectAll() for all detectable problems .penaltyLog() .build()); StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder() .detectLeakedSqlLiteObjects() .penaltyLog() .penaltyDeath() .build()); InitView();//初始化个组件 startButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View arg0) { // TODO Auto-generated method stub Connection();//连接服务器 } }); } public void InitView(){ startButton= (Button)findViewById(R.id.StartConnect); fanOnOffButton= (Button)findViewById(R.id.fan_on_off); fanAddButtonClient=(Button)findViewById(R.id.fanadd); fanSubButtonClient=(Button)findViewById(R.id.fansub); lampOnOffButton=(Button)findViewById(R.id.lamp_on_off); lampAddButtonClient=(Button)findViewById(R.id.lampadd); lampSubButtonClient=(Button)findViewById(R.id.lampsub); curtainOnOffButton=(Button)findViewById(R.id.curtain_on_off); curtainAddButtonClient=(Button)findViewById(R.id.curtainadd); curtainSubButtonClient=(Button)findViewById(R.id.curtainsub); autoButtonClient=(Button)findViewById(R.id.auto); fanOnOffButton.setOnClickListener(this); fanAddButtonClient.setOnClickListener(this); fanSubButtonClient.setOnClickListener(this); lampOnOffButton.setOnClickListener(this); lampAddButtonClient.setOnClickListener(this); lampSubButtonClient.setOnClickListener(this); curtainOnOffButton.setOnClickListener(this); curtainAddButtonClient.setOnClickListener(this); curtainSubButtonClient.setOnClickListener(this); autoButtonClient.setOnClickListener(this); airLevel=(TextView)findViewById(R.id.airlevel); recvDamp= (TextView)findViewById(R.id.Recdamp); recvDamp.setMovementMethod(ScrollingMovementMethod.getInstance()); recvTamp= (TextView)findViewById(R.id.Rectemp); recvTamp.setMovementMethod(ScrollingMovementMethod.getInstance()); recPm25= (TextView)findViewById(R.id.Recpm25); recPm25.setMovementMethod(ScrollingMovementMethod.getInstance()); } /* * 连接服务我 */ public void Connection(){ try { if (isConnecting) { isConnecting = false; try { if(mSocketClient!=null) { mSocketClient.close(); mSocketClient = null; mPrintWriterClient.close(); mPrintWriterClient = null; } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } mThreadClient.interrupt(); startButton.setText("连接"); } else { isConnecting = true; DialogIpPort(); } }catch(Exception e) { Toast.makeText(mContext, "网络连接异常:" e.getMessage(), Toast.LENGTH_SHORT).show(); } } //事件监听 public void onClick(View v) { if(isConnecting&&mSocketClient!=null){ try{ switch(v.getId()){ case R.id.fan_on_off: mFlagOnOff(); mPrintWriterClient.print(fanOnOff[mFlagOnOff]);//发送给服务器 mPrintWriterClient.flush(); //清除缓存,并释放数据 break; case R.id.fanadd: mFlagAdd(); mPrintWriterClient.print(fanAdd[mFlag]);//发送给服务器 mPrintWriterClient.flush(); break; case R.id.fansub: mFlagSub(); mPrintWriterClient.print(fanSub[mFlag]);//发送给服务器 mPrintWriterClient.flush(); break; case R.id.lamp_on_off: mFlagOnOff(); mPrintWriterClient.print(lampOnOff[mFlagOnOff]);//发送给服务器 mPrintWriterClient.flush(); break; case R.id.lampadd: mFlagAdd(); mPrintWriterClient.print(lampAdd[mFlag]); mPrintWriterClient.flush(); break; case R.id.lampsub: mFlagSub(); mPrintWriterClient.print(lampSub[mFlag]); mPrintWriterClient.flush(); break; case R.id.curtain_on_off: mFlagOnOff(); mPrintWriterClient.print(curtainOnOff[mFlagOnOff]); mPrintWriterClient.flush(); break; case R.id.curtainadd: mFlagAdd(); mPrintWriterClient.print(curtainAdd[mFlag]); mPrintWriterClient.flush(); break; case R.id.curtainsub: mFlagSub(); mPrintWriterClient.print(curtainSub[mFlag]); mPrintWriterClient.flush(); break; case R.id.auto: mFlagOnOff(); mPrintWriterClient.print(autoArray[mFlagOnOff]);//发送给服务器 mPrintWriterClient.flush(); default: break; } }catch(Exception e){ Toast.makeText(mContext, "发送异常:" e.getMessage(), Toast.LENGTH_SHORT).show(); } }else{ Toast.makeText(mContext, "没有连接相应的服务器", Toast.LENGTH_SHORT).show(); } } /* * 减标志 */ protected void mFlagSub(){ if(mFlag>=0){ mFlag=-1 mFlag; } if(mFlag==10){ mFlag=-2 mFlag; } if(mFlag<0){ mFlag=0; } } /* * 加标志 */ protected void mFlagAdd(){ if(mFlag<10){ mFlag=1 mFlag; } } /* * 开关标志 */ protected void mFlagOnOff(){ if(mFlagOnOff<1){ mFlagOnOff=1 mFlagOnOff; } else { mFlagOnOff=0; } } /* * 端口和IP地址输入对话框 */ public void DialogIpPort(){ LayoutInflater inflater=getLayoutInflater(); View login_dialog = inflater.inflate(R.layout.dialog,(ViewGroup)findViewById(R.id.dialog)); dialog_ip=(EditText)login_dialog.findViewById(R.id.dialog_ip); dialog_port=(EditText)login_dialog.findViewById(R.id.dialog_port); new AlertDialog.Builder(this).setTitle("请输入正确的IP地址和端口号").setView(login_dialog). setPositiveButton("连接",new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface arg0, int arg1) { // TODO Auto-generated method stub try{ ip=dialog_ip.getText().toString(); mport=Integer.parseInt(dialog_port.getText().toString()); mThreadClient = new Thread(mRunnable); mThreadClient.start(); startButton.setText("断开"); }catch(Exception e){ Toast.makeText(mContext, "网络连接异常:" e.getMessage(), Toast.LENGTH_SHORT).show(); } } }).setNegativeButton("取消",new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface arg0, int arg1) { // TODO Auto-generated method stub startButton.setText("连接"); } }).show(); } //线程:监听服务器发来的消息 private Runnable mRunnable = new Runnable() { public void run() { try { //连接服务器 mSocketClient = new Socket(ip, mport); //portnum //取得输入、输出流 mBufferedReaderClient = new BufferedReader(new InputStreamReader(mSocketClient.getInputStream())); mPrintWriterClient = new PrintWriter(mSocketClient.getOutputStream(), true); mistakeMessage = "已经连接server!";//消息换行 Message msg = new Message(); msg.what = 0; mHandler.sendMessage(msg); //break; } catch (Exception e) { mistakeMessage = "连接IP异常:" e.toString() e.getMessage() "\n";//消息换行 Message msg = new Message(); msg.what = 1; mHandler.sendMessage(msg); return; } setRecvMessage(); } }; /* * 接受消息机制 */ public void setRecvMessage(){ char[] buffer = new char[256]; int count = 0; while (isConnecting) { try { if((count = mBufferedReaderClient.read(buffer))>0) { recvMessageClient = getInfoBuff(buffer, count);//将接受的数据存入数组 Message msg = new Message(); msg.what = 1; mHandler.sendMessage(msg); } } catch (Exception e) { mistakeMessage = "接收异常:" e.getMessage() "\n";//消息换行 Message msg = new Message(); msg.what = 0; mHandler.sendMessage(msg); } } } Handler mHandler = new Handler() { public void handleMessage(Message msg) { String[] string={"优","良","差"}; super.handleMessage(msg); if(msg.what == 0) { Toast.makeText(LoginActivity.this,mistakeMessage,Toast.LENGTH_SHORT).show();//刷新消息机制 } else if(msg.what == 1) { try { String[] result = recvMessageClient.split("\\*"); recvTamp.setText(result[0]); recvDamp.setText(result[1]); // 刷新 recPm25.setText(result[2]); if((0<=Integer.parseInt(result[2]))&&(35>=Integer.parseInt(result[2]))){ airLevel.setTextColor(android.graphics.Color.GREEN);//设置text的颜色 airLevel.setText(string[0]); }else if((36<=Integer.parseInt(result[2]))&&(75>=Integer.parseInt(result[2]))){ airLevel.setTextColor(0xff99cc33); airLevel.setText(string[1]); }else{ airLevel.setTextColor(0xff663300); airLevel.setText(string[2]); } }catch(Exception e) { Toast.makeText(LoginActivity.this,"无法获取数据,检查网络是否连接!",Toast.LENGTH_SHORT).show();//刷新消息机制 } } } }; //创建服务端ServerSocket对象 private ServerSocket serverSocket = null; private boolean serverRuning = false; private String getInfoBuff(char[] buff, int count) { char[] temp = new char[count]; for(int i=0; i<count; i ) { temp[i] = buff[i]; } return new String(temp); } public void onDestroy() { super.onDestroy(); if (isConnecting) { isConnecting = false; try { if(mSocketClient!=null) { mSocketClient.close(); mSocketClient = null; mPrintWriterClient.close(); mPrintWriterClient = null; } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } mThreadClient.interrupt(); } if (serverRuning) { serverRuning = false; try { if(serverSocket!=null) { serverSocket.close(); serverSocket = null; } if(mSocketServer!=null) { mSocketServer.close(); mSocketServer = null; } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } mThreadServer.interrupt(); } } }
好例子网口号:伸出你的我的手 — 分享!
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明
网友评论
我要评论