• Android蓝牙通信 .[转]


    这里使用的是RFCOMM协议,RFCOMM是一个简单的串行线性仿真协议,此协议提供RS232控制和状态信号。

    也就是一个串口(COM)传输协议,波特率为9600,8位数据。所以手机蓝牙可以与另外的蓝牙设备进行通信。

    两个设备进行通信,需要建立一个服务端和一个服务端,客户端连接上服务端之后,就可以收发数据。

    源代码下载地址:http://download.csdn.net/detail/menghnhhuan/3901081

     

    1. /* 一些常量,代表服务器的名称 */  
    2.     public static final String PROTOCOL_SCHEME_L2CAP = "btl2cap";  
    3.     public static final String PROTOCOL_SCHEME_RFCOMM = "btspp";  
    4.     public static final String PROTOCOL_SCHEME_BT_OBEX = "btgoep";  
    5.     public static final String PROTOCOL_SCHEME_TCP_OBEX = "tcpobex";  
    6.       
    7.     private BluetoothServerSocket mserverSocket = null;  
    8.     private ServerThread startServerThread = null;//开启服务线程  
    9.     private clientThread clientConnectThread = null;//客户端连接线程  
    10.     private BluetoothSocket socket = null;  
    11.     private BluetoothDevice device = null;  
    12.     private readThread mreadThread = null;//读取数据线程    
    13.     private BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();//蓝牙适配器  

    开启服务端代码

    1. startServerThread = new ServerThread();  
    2. startServerThread.start();  


    开启客户端

    1. device = mBluetoothAdapter.getRemoteDevice(address);      
    2. clientConnectThread = new clientThread();  
    3. clientConnectThread.start();  


    服务端代码

    1. //开启服务器  
    2. private class ServerThread extends Thread {   
    3.     public void run() {                   
    4.         try {  
    5.             /* 创建一个蓝牙服务器   
    6.              * 参数分别:服务器名称、UUID   */   
    7.             mserverSocket = mBluetoothAdapter.listenUsingRfcommWithServiceRecord(PROTOCOL_SCHEME_RFCOMM,  
    8.                     UUID.fromString("00001101-0000-1000-8000-00805F9B34FB"));     
    9.             Log.d("server", "wait cilent connect...");  
    10.               
    11.             /* 接受客户端的连接请求 */  
    12.             socket = mserverSocket.accept();  
    13.             Log.d("server", "accept success !");  
    14.               
    15.             //启动接受数据  
    16.             mreadThread = new readThread();  
    17.             mreadThread.start();  
    18.         } catch (IOException e) {  
    19.             // TODO Auto-generated catch block  
    20.             e.printStackTrace();  
    21.         }  
    22.     }  
    23. };  


    客户端代码:

    1. //开启客户端  
    2. private class clientThread extends Thread {           
    3.     public void run() {  
    4.         try {  
    5.             //创建一个Socket连接:只需要服务器在注册时的UUID号  
    6.             // socket = device.createRfcommSocketToServiceRecord(BluetoothProtocols.OBEX_OBJECT_PUSH_PROTOCOL_UUID);  
    7.             socket = device.createRfcommSocketToServiceRecord(UUID.fromString("00001101-0000-1000-8000-00805F9B34FB"));  
    8.             //连接                  
    9.             socket.connect();  
    10.             //启动接受数据  
    11.             mreadThread = new readThread();  
    12.             mreadThread.start();  
    13.         }   
    14.         catch (IOException e)   
    15.         {  
    16.             Log.e("connect", "", e);  
    17.             Message msg = new Message();  
    18.             msg.obj = "连接服务端异常!断开连接重新试一试。";  
    19.             msg.what = 0;  
    20.             LinkDetectedHandler.sendMessage(msg);  
    21.         }   
    22.     }  
    23. };  

    发送和接收数据代码

    1. //发送数据  
    2. private void sendMessageHandle(String msg)   
    3. {         
    4.     if (socket == null)   
    5.     {  
    6.         Toast.makeText(mContext, "没有连接", Toast.LENGTH_SHORT).show();  
    7.         return;  
    8.     }  
    9.     try {                 
    10.         OutputStream os = socket.getOutputStream();   
    11.         os.write(msg.getBytes());  
    12.     } catch (IOException e) {  
    13.         // TODO Auto-generated catch block  
    14.         e.printStackTrace();  
    15.     }             
    16. }  
    17. //读取数据  
    18.    private class readThread extends Thread {   
    19.        public void run() {  
    20.           
    21.            byte[] buffer = new byte[1024];  
    22.            int bytes;  
    23.            InputStream mmInStream = null;  
    24.              
    25.         try {  
    26.             mmInStream = socket.getInputStream();  
    27.         } catch (IOException e1) {  
    28.             // TODO Auto-generated catch block  
    29.             e1.printStackTrace();  
    30.         }     
    31.            while (true) {  
    32.                try {  
    33.                    // Read from the InputStream  
    34.                    if( (bytes = mmInStream.read(buffer)) > 0 )  
    35.                    {  
    36.                     byte[] buf_data = new byte[bytes];  
    37.                     for(int i=0; i<bytes; i++)  
    38.                     {  
    39.                         buf_data[i] = buffer[i];  
    40.                     }  
    41.                     String s = new String(buf_data);  
    42.                     Message msg = new Message();  
    43.                     msg.obj = s;  
    44.                     msg.what = 1;  
    45.                     LinkDetectedHandler.sendMessage(msg);  
    46.                    }  
    47.                } catch (IOException e) {  
    48.                 try {  
    49.                     mmInStream.close();  
    50.                 } catch (IOException e1) {  
    51.                     // TODO Auto-generated catch block  
    52.                     e1.printStackTrace();  
    53.                 }  
    54.                    break;  
    55.                }  
    56.            }  
    57.        }  
    58.    } 

    来源:http://blog.csdn.net/menghnhhuan/article/details/7057484

  • 相关阅读:
    Linux文档目录结构
    Git
    Scrapy爬虫框架(架构图与解析)
    爬虫(总目录)
    Django模型(Meta Optins)
    Django模型(字段关系)
    Django模型(模型类)
    Django模型(索引)
    Django模型(字段选项)
    Django模型(字段类型)
  • 原文地址:https://www.cnblogs.com/ziyan22/p/2776726.html
Copyright © 2020-2023  润新知