Android Socket 线程连接openwrt与arduino单片机串口双向通信的实例解析
废话不多说了,直接给大家贴代码了,具体代码如下所示:
packagezcd.netanything; importjava.io.BufferedReader; importjava.io.InputStreamReader; importjava.io.PrintWriter; importjava.net.Socket; importandroid.app.Fragment; importandroid.content.BroadcastReceiver; importandroid.content.Context; importandroid.content.Intent; importandroid.os.Bundle; importandroid.os.Handler; importandroid.os.Message; importandroid.view.LayoutInflater; importandroid.view.View; importandroid.view.View.OnClickListener; importandroid.view.ViewGroup; importandroid.widget.Toast; publicclassMyCarextendsFragmentimplementsOnClickListener{ privatestaticStringwifiurl; privatestaticStringwificom; privatestaticStringwificamera; privateThreadmThreadClient=null; privateSocketmSocketClient=null; //视频线程 privateThreadmThreadvideo=null; privateStringrecvMessageClient; //MySurfaceViewr; privatebooleanisConnect=false; //指令发出数据缓存 staticPrintWritermPrintWriterClient=null; staticBufferedReadermBufferedReaderClient=null; publicViewonCreateView(LayoutInflaterinflater,ViewGroupcontainer, BundlesavedInstanceState){ //TODOAuto-generatedmethodstub Viewview=inflater.inflate(R.layout.mycar,container,false); view.findViewById(R.id.button1).setOnClickListener(this); view.findViewById(R.id.button2).setOnClickListener(this); view.findViewById(R.id.button3).setOnClickListener(this); view.findViewById(R.id.button4).setOnClickListener(this); view.findViewById(R.id.button5).setOnClickListener(this); returnview; } publicvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); } //内部类广播接收 publicstaticclassmyReceiverextendsBroadcastReceiver{ @Override publicvoidonReceive(Contextcontext,Intentintent){ //TODOAuto-generatedmethodstub wifiurl=intent.getStringExtra("wifiurl"); wificom=intent.getStringExtra("wificom"); wificamera=intent.getStringExtra("wificamera"); Toast.makeText(context,"广播已经接收",Toast.LENGTH_SHORT).show(); } } //来源http://www.cnblogs.com/xiaobo-Linux/赵存档QQ463431476 //线程mRunnable启动 privateRunnablemRunnable=newRunnable() { publicvoidrun() { try { //连接服务器 mSocketClient=newSocket(wifiurl,Integer.parseInt(wificom)); //取得输入、输出流 mBufferedReaderClient=newBufferedReader(newInputStreamReader(mSocketClient.getInputStream())); mPrintWriterClient=newPrintWriter(mSocketClient.getOutputStream(),true); recvMessageClient="wifi成功连接";//消息换行 Messagemsg=newMessage(); msg.what=1; mHandler.sendMessage(msg); } catch(Exceptione) { recvMessageClient="连接错误!";//消息换行 Messagemsg=newMessage(); msg.what=1; mHandler.sendMessage(msg); return; } setRecvMessage(); } }; publicvoidsetRecvMessage(){ char[]buffer=newchar[256]; intcount=0; while(true) { try { if((count=mBufferedReaderClient.read(buffer))>0) { recvMessageClient=getInfoBuff(buffer,count);//消息换行 //Thread.sleep(500); Messagemsg=newMessage(); msg.what=1; mHandler.sendMessage(msg); //Toast.makeText(getActivity(),recvMessageClient,Toast.LENGTH_SHORT).show(); } } catch(Exceptione) { recvMessageClient="接收异常:"+e.getMessage()+"\n";//消息换行 Messagemsg=newMessage(); msg.what=0; mHandler.sendMessage(msg); } } } HandlermHandler=newHandler() { publicvoidhandleMessage(Messagemsg) { super.handleMessage(msg); if(msg.what==0) { Toast.makeText(getActivity(),recvMessageClient,Toast.LENGTH_SHORT).show();//刷新消息机制 } elseif(msg.what==1) { try { Stringresult=recvMessageClient; Toast.makeText(getActivity(),result,Toast.LENGTH_SHORT).show(); }catch(Exceptione) { //Toast.makeText(getActivity(),"无法获取数据,检查网络是否连接!",Toast.LENGTH_SHORT).show();//刷新消息机制 } } } }; //接收处理 privateStringgetInfoBuff(char[]buff,intcount) { char[]temp=newchar[count]; for(inti=0;i<count;i++) { temp[i]=buff[i]; } returnnewString(temp); } /*publicvoidonDestroy(){ super.onDestroy(); if(isConnect) { isConnect=false; try{ if(mSocketClient!=null) { mSocketClient.close(); mSocketClient=null; //mThreadvideo.destroy(); mPrintWriterClient.close(); mPrintWriterClient=null; recvMessageClient="网络端口成功";//消息换行 Messagemsg=newMessage(); msg.what=0; mHandler.sendMessage(msg); } }catch(IOExceptione){ e.printStackTrace(); } mThreadClient.interrupt(); } } */ publicvoidonClick(Viewv){ //TODOAuto-generatedmethodstub switch(v.getId()){ caseR.id.button1: mPrintWriterClient.print("f"); mPrintWriterClient.flush();//清空 Toast.makeText(getActivity(),"前进",Toast.LENGTH_SHORT).show(); break; caseR.id.button2: mPrintWriterClient.print("b"); mPrintWriterClient.flush(); Toast.makeText(getActivity(),"后退",Toast.LENGTH_SHORT).show(); break; caseR.id.button3: mPrintWriterClient.print("l"); mPrintWriterClient.flush(); Toast.makeText(getActivity(),"向左",Toast.LENGTH_SHORT).show(); break; caseR.id.button4: mPrintWriterClient.print("r"); mPrintWriterClient.flush(); Toast.makeText(getActivity(),"向右",Toast.LENGTH_SHORT).show(); break; caseR.id.button5: if(!isConnect) { //开启mThreadClient线程 mThreadClient=newThread(mRunnable); mThreadClient.start(); Toast.makeText(getActivity(),"尝试连接网络",500).show(); } else{ onDestroy(); isConnect=false; //Btn_openwifi.setBackgroundResource(R.drawable.disconnect); } //开启mThreadvideo线程 //mThreadvideo=newThread(mRunvideo); //mThreadvideo.start();//开启视频监听 break; //caseR.id.button6: //关闭wifi /*if(isConnect) { isConnect=false; try{ if(mSocketClient!=null) { mSocketClient.close(); mSocketClient=null; //mThreadvideo.destroy(); mPrintWriterClient.close(); mPrintWriterClient=null; recvMessageClient="网络端口成功";//消息换行 Messagemsg=newMessage(); msg.what=0; mHandler.sendMessage(msg); } }catch(IOExceptione){ e.printStackTrace(); } mThreadClient.interrupt(); } */ //break; } } }
以上所述是小编给大家介绍的AndroidSocket线程连接openwrt与arduino单片机串口双向通信,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!