android设备终端与蓝牙模块(HC-06)的通讯编程思路

浏览:
字体:
发布时间:2013-12-17 09:37:37
来源:

蓝牙模块(HC-06):

vcC20cDEo7/pyc+ho7b4vdPK3MC20cDEo7/pt6K5/cC0tcTQxc+itcTKsbryo6zKx8O709Cx2NKq1Nm0tL2ot/7O8cb3tsu1xKOsztLDx9a70qrSu7j2sru2z7zgzP221Le9z/vPorXE0a27t77N0NChozwvcD4KPHA+IDwvcD4KPHA+16LS4qO61Npzb2NrZXQuY29ubmVjdCgpo7vWrsewo6zO0sPH0OjSqta00NBibHVldG9vdGhhZGFwdGVyLmNhbmNlbGRpc2NvdmVyeSgpO6Os1eLKx86qwcvNo7X0y9HL98nosbijrLfx1PLBrL3Tv8nE3LvhseS1w7fHs6PC/aOssqLH0sjd0tfKp7DcoaM8L3A+CjxwPiA8L3A+CjxwPsC20cC/qrei1tC1xLy4uPa52Lz8sr3W6KO6PC9wPgo8cD4xoaK/qsb0yta7+snPtcTAttHAuabE3KGjPC9wPgo8cD4yoaLL0cv3uL29/LTm1Nq1xMC20cDJ6LG4oaM8L3A+CjxwPjOhorS0vajAttHAc29ja2V0o6zTyXNvY2tldLvxyKFkZXZpY2WhozwvcD4KPHA+NKGit6LLzbrNtsHIocr9vt2hozwvcD4KPHA+NaGix+WzoaOots+/qrj31tbP37PMo6zXos/6ueOypb3TytXG97XIo6k8L3A+CjxwPiA8L3A+CjxwPi8v1vfP38z1PC9wPgo8cD5BZGFwdGVyICAtLS0tPiAgIGRldmljZSAgLS0tLS0+ICBzb2NrZXQ8L3A+CjxwPiA8L3A+Cgo8cD4vKiBzdGVwMTrIobXDxKzIz7XEwLbRwMrKxeTG9yAqLzwvcD4KPHByZSBjbGFzcz0="brush:java;">private BluetoothAdapter mBtAdapter = BluetoothAdapter.getDefaultAdapter();

//step2:强制开启蓝牙设备

if(!mBtAdapter.isEnabled()){mBtAdapter.enable();}


//step3:注册广播接收器,注意:开启step4即搜索设备前,应先注册广播接收器

reg_broadcastreceiver(); private void reg_broadcastreceiver(){ //Register for broadcasts when a device is discovered        IntentFilter discoveryFilter = new IntentFilter(BluetoothDevice.ACTION_FOUND);        this.registerReceiver(mReceiver, discoveryFilter);        //System.out.println("***********" + mBtAddress);        //Register for broadcasts when discovery has finished        IntentFilter foundFilter = new IntentFilter(BluetoothDevice.ACTION_FOUND);        this.registerReceiver(mReceiver, foundFilter);}       // The BroadcastReceiver that listens for discovered devices and    // changes the title when discovery is finished    private final BroadcastReceiver mReceiver = new BroadcastReceiver() {        @Override        public void onReceive(Context context, Intent intent) {            String action = intent.getAction();            // When discovery finds a device            if (BluetoothDevice.ACTION_FOUND.equals(action))             {                // Get the BluetoothDevice object from the Intent                BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);                            	Log.d("BroadcastReceiver", "find device:"+device.getName()+"|"+device.getAddress());                mBtAddress = device.getAddress();                                          	 //step5:根据搜索到的蓝牙设备的MAC地址,得到该设备        	 mBtDevice = mBtAdapter.getRemoteDevice(mBtAddress);        	 //step6:开启客户端线程,线程里面完成了与SPP协议的连接         	 mBtClientConnectThread = new clientThread();        	 mBtClientConnectThread.start();                                       }  // When discovery is finished, change the Activity title            else if (BluetoothAdapter.ACTION_DISCOVERY_FINISHED.equals(action))             {               setTitle("搜索完成");                              Log.d("BroadcastReceiver", "find over");            }                             }    }; 


//step4: 开始搜索附近可以存在的蓝牙设备,之后系统会发送广播给广播接收器

mBtAdapter.startDiscovery();


//附加客户端线程 代码

 //客户端线程 	private class clientThread extends Thread{		public void run(){			Log.d("mBtSocket", "start-->"+mBtSocket);			try {//step7,取消搜索设备的动作,否则接下来的设备连接会失败				mBtAdapter.cancelDiscovery();//step8,根据device获取socket				mBtSocket = mBtDevice.createRfcommSocketToServiceRecord(UUID.fromString("00001101-0000-1000-8000-00805F9B34FB"));//step9,连接socket				mBtSocket.connect();			} catch (IOException e) {				// TODO Auto-generated catch block				e.printStackTrace();				Log.e("connect", "", e);				Log.d("clientThread", "连接失败");							}			Log.d("mBtSocket", "end-->"+mBtSocket);		}	}



//step10,发送数据.

sendMessageHandle(“要发送的数据”);

//step10, 读取数据

(由于接收数据的线程已经打开,所以当有数据到来时,数据就自动赋给变量S了,而此时S就是我们读取的数据 )


//step11,清场(清场动作放在ondestroy里面)

@Override	protected void onDestroy() {		// TODO Auto-generated method stub		super.onDestroy();				//关闭客户端进程,取消广播接收器    	shutdownClient();        // Unregister broadcast listeners        this.unregisterReceiver(mReceiver);        //关闭读线程 		if(mReadThread != null)		{			mReadThread.interrupt();			mReadThread = null;		}					}/* 停止客户端连接 */	private void shutdownClient() {		new Thread() {			public void run() {				if(mBtClientConnectThread!=null)				{					mBtClientConnectThread.interrupt();					mBtClientConnectThread= null;				}				if (mBtSocket != null) {					try {						mBtSocket.close();					} catch (IOException e) {						// TODO Auto-generated catch block						e.printStackTrace();					}					mBtSocket = null;				}			};		}.start();	}	//发送数据	public static void sendMessageHandle(String msg) 	{				if (mBtSocket == null)  		{			Log.d("----------------------", "没有连接");			return;		}				try {			OutputStream os = mBtSocket.getOutputStream(); 			os.write(msg.getBytes()); //发送出去的值为:msg		} catch (IOException e) {			// TODO Auto-generated catch block			e.printStackTrace();		}				}




附:发送数据和读取数据的代码
//发送数据	public static void sendMessageHandle(String msg) 	{				if (mBtSocket == null)  		{			Log.d("----------------------", "没有连接");			return;		}				try {			OutputStream os = mBtSocket.getOutputStream(); 			os.write(msg.getBytes()); //发送出去的值为:msg		} catch (IOException e) {			// TODO Auto-generated catch block			e.printStackTrace();		}				}		//读取数据    private static class readThread extends Thread {         public void run() {        	            byte[] buffer = new byte[1024];            int bytes;            InputStream mmInStream = null;            			try {				mmInStream = mBtSocket.getInputStream();			} catch (IOException e1) {				// TODO Auto-generated catch block				e1.printStackTrace();			}	            while (true) {                try {                    // Read from the InputStream                    if( (bytes = mmInStream.read(buffer)) > 0 )                    {	                    byte[] buf_data = new byte[bytes];				    	for(int i=0; i

>更多相关文章
24小时热门资讯
24小时回复排行
Copyright © 2007 - 2024 Vm888.Com. All Rights Reserved
');})();