Android藍芽通訊 .

來源:互聯網
上載者:User

這裡使用的是RFCOMM協議,RFCOMM是一個簡單的串列線性模擬協議,此協議提供RS232控制和狀態訊號。

也就是一個串口(COM)傳輸協議,傳輸速率為9600,8位元據。所以手機藍芽可以與另外的藍牙裝置進行通訊。

兩個裝置進行通訊,需要建立一個服務端和一個服務端,用戶端串連上服務端之後,就可以收發資料。

原始碼:http://download.csdn.net/detail/menghnhhuan/3901081

 

[html] view plaincopyprint?
  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();//藍芽適配器  
/* 一些常量,代表格服務器的名稱 */public static final String PROTOCOL_SCHEME_L2CAP = "btl2cap";public static final String PROTOCOL_SCHEME_RFCOMM = "btspp";public static final String PROTOCOL_SCHEME_BT_OBEX = "btgoep";public static final String PROTOCOL_SCHEME_TCP_OBEX = "tcpobex";private BluetoothServerSocket mserverSocket = null;private ServerThread startServerThread = null;//開啟服務線程private clientThread clientConnectThread = null;//用戶端連接線程private BluetoothSocket socket = null;private BluetoothDevice device = null;private readThread mreadThread = null;//讀取資料線程private BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();//藍芽適配器

 

開啟服務端代碼

[html] view plaincopyprint?
  1. startServerThread = new ServerThread();  
  2. startServerThread.start();  
startServerThread = new ServerThread();startServerThread.start();

開啟用戶端

[html] view plaincopyprint?
  1. device = mBluetoothAdapter.getRemoteDevice(address);      
  2. clientConnectThread = new clientThread();  
  3. clientConnectThread.start();  
device = mBluetoothAdapter.getRemoteDevice(address);clientConnectThread = new clientThread();clientConnectThread.start();

服務端代碼

[html] view plaincopyprint?
  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. };  
//開啟伺服器private class ServerThread extends Thread { public void run() {try {/* 建立一個藍芽伺服器  * 參數分別:伺服器名稱、UUID */mserverSocket = mBluetoothAdapter.listenUsingRfcommWithServiceRecord(PROTOCOL_SCHEME_RFCOMM,UUID.fromString("00001101-0000-1000-8000-00805F9B34FB"));Log.d("server", "wait cilent connect...");/* 接受用戶端的串連請求 */socket = mserverSocket.accept();Log.d("server", "accept success !");//啟動接受資料mreadThread = new readThread();mreadThread.start();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}};

用戶端代碼:

[html] view plaincopyprint?
  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. };  
//開啟用戶端private class clientThread extends Thread { public void run() {try {//建立一個Socket串連:只需要伺服器在註冊時的UUID號// socket = device.createRfcommSocketToServiceRecord(BluetoothProtocols.OBEX_OBJECT_PUSH_PROTOCOL_UUID);socket = device.createRfcommSocketToServiceRecord(UUID.fromString("00001101-0000-1000-8000-00805F9B34FB"));//串連socket.connect();//啟動接受資料mreadThread = new readThread();mreadThread.start();} catch (IOException e) {Log.e("connect", "", e);Message msg = new Message();msg.obj = "串連服務端異常!中斷連線重新試一試。";msg.what = 0;LinkDetectedHandler.sendMessage(msg);} }};

發送和接收資料代碼

[html] view plaincopyprint?
  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

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.