在好例子网,分享、交流、成长!
您当前所在位置:首页Java 开发实例Android平台开发 → android 远程控制实例(基于Socket通信)

android 远程控制实例(基于Socket通信)

Android平台开发

下载此实例
  • 开发语言:Java
  • 实例大小:0.83M
  • 下载次数:29
  • 浏览次数:279
  • 发布时间:2020-08-21
  • 实例类别:Android平台开发
  • 发 布 人:lienyuan
  • 文件格式:.rar
  • 所需积分:12
 相关标签: 控制 远程 实例

实例介绍

【实例简介】通过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();
			}
		}
}

标签: 控制 远程 实例

实例下载地址

android 远程控制实例(基于Socket通信)

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

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

网友评论

发表评论

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

查看所有0条评论>>

小贴士

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

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

关于好例子网

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

;
报警