android设备终端与蓝牙模块(HC-06)的通讯编程思路
蓝牙模块(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:强制开启蓝牙设备 //step3:注册广播接收器,注意:开启step4即搜索设备前,应先注册广播接收器 //step4: 开始搜索附近可以存在的蓝牙设备,之后系统会发送广播给广播接收器 //附加客户端线程 代码if(!mBtAdapter.isEnabled()){mBtAdapter.enable();}
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"); } } };
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
- 01-11全球最受赞誉公司揭晓:苹果连续九年第一
- 12-09罗伯特·莫里斯:让黑客真正变黑
- 12-09谁闯入了中国网络?揭秘美国绝密黑客小组TA
- 12-09警示:iOS6 惊现“闪退”BUG
- 05-06TCL科技:预计大尺寸面板价格上涨动能有望延
- 05-06新加坡电信Optus任命新首席执行官以重建品牌
- 05-06微软宣布为消费级用户账户提供安全密钥支持
- 05-06当好大数据产业“守门员”(筑梦现代化 共绘
- 04-29通用智能人“通通”亮相中关村论坛