1. 程式人生 > >3.Android藍芽通訊

3.Android藍芽通訊

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

也就是一個串列埠(COM)傳輸協議,波特率為9600,8位資料。所以手機藍芽可以與另外的藍芽裝置進行通訊。

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

 

[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.     private BluetoothServerSocket mserverSocket = null;  
  7.     private ServerThread startServerThread = null;//開啟服務執行緒  
  8.     private clientThread clientConnectThread
     = null;//客戶端連線執行緒  
  9.     private BluetoothSocket socket = null;  
  10.     private BluetoothDevice device = null;  
  11.     private readThread mreadThread = null;//讀取資料執行緒    
  12.     private BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();//藍芽介面卡  

開啟服務端程式碼

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


開啟客戶端

[html] view plaincopyprint?
  1. device = mBluetoothAdapter.getRemoteDevice(address);      
  2. clientConnectThread = new clientThread();  
  3. 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.             socket = mserverSocket.accept();  
  12.             Log.d("server", "accept success !");  
  13.             //啟動接受資料  
  14.             mreadThread = new readThread();  
  15.             mreadThread.start();  
  16.         } catch (IOException e) {  
  17.             // TODO Auto-generated catch block  
  18.             e.printStackTrace();  
  19.         }  
  20.     }  
  21. };  


客戶端程式碼:

[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. };  

傳送和接收資料程式碼

[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.            byte[] buffer = new byte[1024];  
  21.            int bytes;  
  22.            InputStream mmInStream = null;  
  23.         try {  
  24.             mmInStream = socket.getInputStream();  
  25.         } catch (IOException e1) {  
  26.             // TODO Auto-generated catch block  
  27.             e1.printStackTrace();  
  28.         }     
  29.            while (true) {  
  30.                try {  
  31.                    // Read from the InputStream  
  32.                    if( (bytes = mmInStream.read(buffer)) > 0 )  
  33.                    {  
  34.                     byte[] buf_data = new byte[bytes];  
  35.                     for(int i=0; i<bytes; i++)  
  36.                     {  
  37.                         buf_data[i] = buffer[i];  
  38.                     }  
  39.                     String s = new String(buf_data);  
  40.                     Message msg = new Message();  
  41.                     msg.obj = s;  
  42.                     msg.what = 1;  
  43.                     LinkDetectedHandler.sendMessage(msg);  
  44.                    }  
  45.                } catch (IOException e) {  
  46.                 try {  
  47.                     mmInStream.close();  
  48.                 } catch (IOException e1) {  
  49.                     // TODO Auto-generated catch block  
  50.                     e1.printStackTrace();  
  51.                 }  
  52.                    break;  
  53.                }  
  54.            }  
  55.        }  
  56.    }  

相關推薦

3.Android通訊

這裡使用的是RFCOMM協議,RFCOMM是一個簡單的序列線性模擬協議,此協議提供RS232控制和狀態訊號。 也就是一個串列埠(COM)傳輸協議,波特率為9600,8位資料。所以手機藍芽可以與另外的藍芽裝置進行通訊。 兩個裝置進行通訊,需要建立一個服務端和一個服務端,

Android通訊中在Activity間傳遞BluetoothSocket物件

一、前言 最近在做手機端藍芽與微控制器 HC—05 模組通訊的部分,需求是在一個Activity中連線藍芽列表中的裝置,連線成功後喚起另一個Activity,並在另一個Activity中實現與微控制器的藍芽模組的資料傳輸。實現裝置的連線需要呼叫 mBluetoothSocket(Bluetoot

Android 通訊開發(一) 搜尋裝置

藍芽通訊是我們日常生活中比較方便的一種通訊技術,Android從2.0版本的SDK就開始支援藍芽。對開發人員來說,應用程式中藍芽還是一種用來建立點對點連線通訊的簡單而高效的方式。 藍芽通訊功能的實現的基本流程大致分為藍芽裝置搜尋、藍芽裝置連線和藍芽通訊

android 通訊實現手機的開啟,並掃描附近可見的裝置

藍芽是一種重要的短距離無線通訊協議,廣泛應用於各種裝置(手機,醫療,汽車等)。藍芽是比較常用的無線通訊裝置,早研究成為手機的標配。現在的安卓手機基本上都有藍芽,所有通過藍芽對資料有很好的硬體基礎 在Android中,與藍芽有關的類和介面在android.bluetooth包

android 通訊(二)

實現功能:藍芽配對 在上篇的基礎上,配對第一個找到的藍芽裝置 1、重寫Handler中找到藍芽裝置後的邏輯 /** 判斷是否是第一個發現的藍芽裝置*/ private boolean hasF

Android通訊(一)————功能的相關許可權

根據sdk中的docs的文件說明,使用Android的藍芽裝置時,只需要申請兩個許可權即可保證藍芽的正常的工作(其實在與藍芽相關的許可權一共有3個,其中BLUETOOTH_PRIVILEGED許可權只有系統應用可以使用,在這裡就不說明了),今天我們需要使用的兩個

Android 通訊及WiFi開發

在我們正常的Android藍芽功能開發步驟中,一般要經過系統許可權和藍芽開關狀態監測、裝置掃描、裝置連線、藍芽資料通訊這幾個過程。 在Android 4.3系統之後,我們可以使用藍芽4.0(低功耗藍芽),它最主要的特點是低功耗,普及率高。現在所說的藍芽裝置,大

Android適配安卓6.0通訊實現過程

實現需要的許可權:由於安卓4.x版以上的版本使用藍芽,需要開啟定位許可權才能搜尋到附近的藍芽裝置 1 2 3 4 五 <uses-permission android:name="android.permission.BLUETOOTH"/>

【車載人體健康檢測器專案】Android例項(和微控制器模組通訊

1、Android藍芽程式設計   藍芽3.0及以下版本程式設計需要使用UUID,UUID是通用唯一識別碼(Universally Unique Identifier),這是一個軟體構建的標準,也是被開源基金會組織應用在分散式計算環境領域的一部分。在藍芽3.0及下一版本中,UUID被用於唯一

Android搜尋連線通訊

  藍芽( Bluetooth® ):是一種無線技術標準,可實現固定裝置、移動裝置和樓宇個人域網之間的短距離資料交換(使用2.4—2.485GHz的ISM波段的UHF無線電波)。藍芽技術最初由電信巨頭愛立信公司於1994年創制,當時是作為RS232資料線的替代方案。

android進階3step2:Android App通訊——經典通訊

  Android經典藍芽案例   - 一、Android中藍芽裝置的使用 - 1.藍芽許可權 - 2.藍芽功能開啟 - 3.搜尋藍芽裝置 - 4.建立RFCOMM通道 - 5.藍芽裝置雙向資料傳輸 1.開啟藍芽許可權:And

ANDROID經典通訊

最近寫了一個關於藍芽的操作類,對藍芽不熟悉的同學可以參考一下 功能包括 發現,搜尋,連線,傳送,接收等/ 直接上程式碼: package com.***.****.BlueToothM; import android.app.Activity; impor

1 android開發---與模組進行通訊

原文地址 http://www.cnblogs.com/wenjiang/p/3200138.html 近半個月來一直在搞android藍芽這方面,主要是專案需要與藍芽模組進行通訊。開頭的進展很順利,但因為藍芽模組不在我這裡,所以只能用手機測試。一開頭就發現手機的藍芽

Android 開發之搜尋、配對、連線、通訊大全

        藍芽( Bluetooth®):是一種無線技術標準,可實現固定裝置、移動裝置和樓宇個人域網之間的短距離資料交換(使用2.4—2.485GHz的ISM波段的UHF無線電波)。藍芽裝置最多可以同時和7個其它藍芽裝置建立連線,進行通訊,當然並不是每一個藍芽都可以達到

android聊天開發(3)四大元件案例

介面如圖:依次點選按鈕,在debug模式下啟動,通過Android studio的console後臺,可以看到system列印的 資訊   先點start new activity-->startService-->sendBroadCast-->se

Android開發之BlueTooth--最簡單的Andorid傳統通訊Demo

又到了Android小白的開發之路上寫筆記的時間了~~ 開篇都不知道說什麼好... ...前兩個月寫了WIFI,後來也想寫一下藍芽的,可惜公司產品不給力,出現了很多BUG,一直在修啊修,最近終於有點空閒時間了。那就來簡單的嘗試一下 關於藍芽開發,優秀部落格一大片,你能來看我

Android低功耗通訊

一、寫在前面的話 一直想寫一篇關於藍芽與ble裝置通訊的部落格,但是一直也不知道從何下手,可能是之前思路不清晰吧,也就一直拖拖拖,拖到現在。最近又做到關於ble裝置的專案了,在此總結一下吧。(如有不到位或者不太對的地方,希望各位多多指教) 二、關於藍芽 藍芽是一種短距的無

Android 通訊講解

一、藍芽介紹: (一)、Bluetooth的由來及現狀 藍芽一詞源於公元十世紀丹麥國王HaraldBlatand名字中的Blatand。Blatand的英文之意就是Blue tooth。這是因為這位讓丹麥人引以為傲的國王酷愛吃藍莓以至於牙齦都被染成藍色。由於Blata

Android遙控器(通過手機模組通訊

          前些天學弟讓我給他整理之前一起做專案時的與下位機通訊的部分程式碼。當時使用藍芽程式設計,Android端通過藍芽傳送指令到藍芽模組,硬體那裡通過藍芽模組讀取到指令,並執行相應操作。由於那段程式碼時在工程裡的,抽取出來很麻煩。所以決定在網上找個例

android開發-與模組通訊

因為我馬上要離職了,在很多官網上看到招聘android基本都要會藍芽開發,wifi的經驗,所以就來學習下藍芽! 於是,我得到了很好的教訓:請確保專案中的最關鍵因素是否在我們的掌握中。像是藍芽模組這種東西,應該今早催促對方拿過來才是,而不是自己一個人在那邊瞎搞。 嘮叨話就先到