Android 藍芽連線

2021-09-16 22:31:21 字數 3574 閱讀 2566

一、概述

藍芽是一種無線技術標準,可實現固定裝置、移動裝置和樓宇個人域網之間的短距離資料交換。最多可以同時和7個其它藍芽裝置建立連線,進行通訊。藍芽可分為兩大類:傳統藍芽(藍芽3.0規範之前),低功耗藍芽(藍芽4.0規範之後)。

android 從4.3版本(api level 18)開始支援低功耗藍芽bluetooth low energy(ble)通訊。android提供了相應的 api, 應用程式通過這些 api 可以實現 藍芽裝置掃瞄、配對、連線、傳輸資料等功能。

二、android ble api幾個重要類

1、bluetoothadapter

本地的藍芽介面卡。是所有藍芽互動操作的入口點。通過這個類可以發現其他藍芽裝置,查詢已配對的裝置列表,使用乙個已知的mac位址來例項化乙個bluetoothdevice,以及建立乙個bluetoothserversocket來為監聽與其他裝置的通訊。

2、bluetoothdevice

遠端藍芽裝置。使用這個類來請求乙個與遠端裝置的bluetoothsocket連線,或者查詢關於裝置名稱、位址、類和連線狀態等裝置資訊。

3、bluetoothsocket

代表乙個藍芽socket的介面(和tcp socket類似)。這是乙個連線點,它允許乙個應用與其他藍芽裝置通過inputstream和outputstream交換資料。

4、bluetoothserversocket

代表乙個開放的伺服器socket,它監聽接受的請求(與tcp serversocket類似)。為了連線兩台android裝置,乙個裝置必須使用這個類開啟乙個伺服器socket。當乙個遠端藍芽裝置開始乙個和該裝置的連線請求,bluetoothserversocket將會返回乙個已連線的bluetoothsocket,接受該連線。

三、藍芽開發

1、流程

2、開啟許可權

//開啟藍芽時,mbluetoothadapter.enable()需要以下許可權

3、開啟藍芽

public void isbluetoothenable() else}	}

4、搜尋附近藍芽裝置

/**

* 註冊搜尋藍芽裝置的廣播

*/private void startdiscovery()

private void startscanbluetooth()

// 開始搜尋

bluetoothadapter.startdiscovery();

}/**

* 藍芽廣播接收

*/private final broadcastreceiver receiver = new broadcastreceiver() else if (action.equals(bluetoothdevice.action_bond_state_changed)) else if (bluetoothadapter.action_discovery_finished.equals(action)) }};

關於藍芽連線狀態:

bluetoothdevice.bond_bonded:已配對

bluetoothdevice.bond_bonding:配對中

bluetoothdevice.bond_none:未配對或取消配對

關於藍芽強度rssi:

單位是dbm,藍芽訊號的強度rssi = 10*log p,p代表接收到的訊號功率。藍芽會傳送廣播,距離大小會影響訊號功率強弱。假設發射功率取最大值為1mw,那麼rssi的值為0,也就是說你的距離離藍芽最近時在理想狀態下所獲取的rssi的值為0,但在實際中基本不會存在這個理想狀態,因此rssi的值基本都為負數。

一般說來,在ble中,假設訊號強度按強、中、弱、差4個等級劃分,rssi範圍依次是:-60 ~ 0 、-70 ~ -60、-80 ~ -70、

5、配對

//獲取已配對裝置資訊

public listgetpairedbluetoothdevices()

} return devicelist;

}

//若已配對裝置數為0,跳轉到手機系統藍芽設定介面

intent enablebtintent = new intent(settings.action_bluetooth_settings);

mcontext.startactivity(enablebtintent);

//手動配對,完成配對後重新掃瞄即可

method method = bluetoothdevice.class.getmethod("createbond");

method.invoke(itemlist.get(position).getdevice());

6、連線

藍芽連線需要在子執行緒中完成

public class bluetoothconnectthread extends thread  catch (exception e) 

}@override

public void run()

}new thread() }}

}.start();

}public void connect()

} catch (exception connectexception) );

bluetoothsocket = (bluetoothsocket) m.invoke(bluetoothdevice, integer.valueof(1));

bluetoothsocket.connect();

connected = true;

} catch (exception ex) }}

}public void cancel()

}} catch (ioexception e)

}public void cancel2()

} catch (ioexception e) }}

public inte***ce bluetoothconnectcallback
注意以上,bluetoothuuid一般為固定的,connect()放在子執行緒中可以提高連線成功率(不明所以),注意connect失敗需要通過反射createrfcommsocket該方法完成,自驗目前連線成功率較高。

7、傳輸資料

//獲取bluetoothsocket輸出流

outputstream outputstream = bluesocket.getoutputstream();

//之後將資料寫入輸出流完成傳輸

outputstream.write(data);

outputstream.flush();

Android 藍芽連線

今天要做乙個藍芽4.0的通訊,先做個小test,之後再看看具體的api override public void onclick view v 3,掃瞄附近的裝置 list devicelist new arraylist if bluetoothadapter.isdiscovering else...

Android 自動連線藍芽

藍芽是手機和智慧型硬體通訊常用的方式,藍芽通訊可分為傳統藍芽和低功耗藍芽 ble 其中ble的連線斷開等操作可以通過android sdk中提供的api進行操作,而傳統藍芽部分sdk並沒有提供相關的api進行連線斷開,只能使用者自己通過手機的設定介面連線藍芽。那麼我們如何做到在 中自動連線傳統藍芽呢...

Android藍芽串列埠連線總結

這裡重點說下藍芽連線 在做android藍芽串列埠連線的時候一般會使用 bluetoothsocket tmp null get a bluetoothsocket for a connection with the given bluetoothdevice try catch ioexcepti...