android手機藍牙
⑴ Android 手機可以通過 BLE 被掃描到嗎
Android手機的藍牙功能可以通過BLE(Bluetooth Low Energy)被其他設備掃描到,前提是手機的系統版本API level >= 18,且手機支持藍牙4.0。如果手機系統版本API level < 18,那麼藍牙4.0功能將無法使用。
首先,我們可以查看官方提供的BLE指南,以了解如何開發支持BLE的應用程序:[官方BLE指南](http://developer.android.com/guide/topics/connectivity/bluetooth-le.html)。此外,還可以下載官方的示例代碼,以了解如何實現藍牙4.0設備的搜索、配對、連接、發現服務和特徵值,以及斷開連接等功能:[示例代碼下載地址](http://download.csdn.net/detail/lqw770737185/8116019)。
接下來,我們了解一下Android藍牙開發中涉及的一些關鍵API和概念:
1.1 `BluetoothGatt`:繼承自`BluetoothProfile`,通過`BluetoothGatt`可以實現設備的連接、發現服務,並將屬性數據回調至`BluetoothGattCallback`。
1.2 `BluetoothGattCharacteristic`:相當於一種數據類型,包括一個`value`和0到多個`value`的描述(`BluetoothGattDescriptor`)。
1.3 `BluetoothGattDescriptor`:描述符,對`Characteristic`的描述,包括范圍、計量單位等。
1.4 `BluetoothGattService`:服務,是`Characteristic`的集合。
1.5 `BluetoothProfile`:一個通用規范,按照此規范進行數據的收發。
1.6 `BluetoothManager`:通過`BluetoothManager`獲取`BluetoothAdapter`。
```java
BluetoothManager bluetoothManager = (BluetoothManager) getSystemService(Context.BLUETOOTH_SERVICE);
```
1.7 `BluetoothAdapter`:Android系統中只有一個`BluetoothAdapter`,通過`BluetoothManager`獲取。
```java
BluetoothAdapter mBluetoothAdapter = bluetoothManager.getAdapter();
```
1.8 `BluetoothGattCallback`:回調對象,用於處理連接狀態變化、特徵值寫入、讀取等操作的結果。
```java
private BluetoothGattCallback GattCallback = new BluetoothGattCallback() {
// 實現9個必須方法,根據需要實現
};
```
1.9 `BluetoothDevice`:掃描後發現的可連接設備,以及獲取已連接的設備。
開啟藍牙許可權需要在AndroidManifest.xml中聲明硬體許可權:
```xml
```
在代碼中檢查設備是否支持藍牙4.0:
```java
if (!getPackageManager().hasSystemFeature(PackageManager.FEATURE_BLUETOOTH_LE)) {
Toast.makeText(this, "設備不支持藍牙4.0", Toast.LENGTH_SHORT).show();
finish();
}
```
對藍牙的啟動關閉操作包括:
1. 利用系統默認的藍牙開啟對話框。
```java
if (mBluetoothAdapter == null || !mBluetoothAdapter.isEnabled()) {
Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT);
}
```
2. 後台打開藍牙,不顯示任何提示。
```java
mBluetoothAdapter.enable();
```
3. 後台關閉藍牙。
```java
mBluetoothAdapter.disable();
```
最後,掃描設備、連接設備、獲取設備信息、斷開連接設備的詳細操作可以參考官方示例代碼,以獲得更清晰的指導。
⑵ Android開發之藍牙(Bluetooth)
在上一篇中有介紹了Wifi與網路連接處理
Android開發之WiFi與網路連接處理
下面,來繼續說說Android中藍牙的基本使用。
Bluetooth是目前使用的最廣泛的無線通訊協議之一,主要針對短距離設備通訊(10米),常用於連接耳機、滑鼠和移動通訊設備等。
值得一提的是:
android4.2新增了部分新功能,但是對於Bluetooth熟悉的人或許開始頭疼了,那就是Android4.2引入了一個新的藍牙協議棧針BLE。谷歌和Broadcom之間的合作,開發新的藍牙協議棧,取代了基於堆棧的Bluez。因此市場上出現了老設備的兼容問題,很多藍牙設備在android4.2手機上不能正常使用。
BluetoothAdapter簡單點來說就是代表了本設備(手機、電腦等)的藍牙適配器對象。
first:we need permission
要操作藍牙,先要在AndroidManifest.xml里加入許可權
**下面來看看如何使用藍牙。 **↓↓↓****
Demo已就緒:
返回值:如果設備具備藍牙功能,返回BluetoothAdapter 實例;否則,返回null對象。
打開藍牙設備的方式:
1.直接調用函數enable()去打開藍牙設備 ;
2.系統API去打開藍牙設備,該方式會彈出一個對話框樣式的Activity供用戶選擇是否打開藍牙設備。
注意: 1.如果藍牙已經開啟,不會彈出該Activity界面。2.在目前大多數Android手機中,是不支持在飛行模式下開啟藍牙的。如果藍牙已經開啟,那麼藍牙的開關 ,狀態會隨著飛行模式的狀態而發生改變。
1. 搜索藍牙設備
使用BluetoothAdapter的startDiscovery()方法來搜索藍牙設備
startDiscovery()方法是一個非同步方法,調用後會立即返回。該方法會進行對其他藍牙設備的搜索,該過程會持續12秒。該方法調用後,搜索過程實際上是在一個System Service中進行的,所以可以調用cancelDiscovery()方法來停止搜索(該方法可以在未執行discovery請求時調用)。
系統開始搜索藍牙設備
^( *  ̄(oo) ̄ ) ^ 系統會發送以下三個廣播:
2.掃描設備
3.定義廣播接收器接收搜索結果
4.注冊廣播
獲取附近的藍牙設備
第一步建立連接:首先Android sdk(2.0以上版本)支持的藍牙連接是通過BluetoothSocket建立連接,服務端BluetoothServerSocket和客戶端(BluetoothSocket)需指定同樣的UUID,才能建立連接,因為建立連接的方法會阻塞線程,所以伺服器端和客戶端都應啟動新線程連接。
(這里的服務端和客戶端是相對來說的)
兩個藍牙設備之間的連接,則必須實現服務端與客戶端的機制。
當兩個設備在同一個RFCOMM channel下分別擁有一個連接的BluetoothSocket,這兩個設備才可以說是建立了連接。
服務端設備與客戶端設備獲取BluetoothSocket的途徑是不同的。
1,服務端設備是通過accepted一個incoming connection來獲取的,
2,客戶端設備則是通過打開一個到服務端的RFCOMM channel來獲取的。
服務端
通過調用BluetoothAdapter的(String, UUID)方法來獲取BluetoothServerSocket(UUID用於客戶端與服務端之間的配對)
客戶端
調用BluetoothService的(UUID)方法獲取BluetoothSocket(該UUID應該同於服務端的UUID)。
調用BluetoothSocket的connect()方法(該方法為block方法),如果UUID同服務端的UUID匹配,並且連接被服務端accept,則connect()方法返回。
數據傳遞,通過以上操作,就已經建立的BluetoothSocket連接了,數據傳遞無非是通過流的形式
獲取流
該類就是關於遠程藍牙設備的一個描述。通過它可以和本地藍牙設備---BluetoothAdapter連接通信。
好多東西我也不知道怎麼描述,下面給出Demo:
剛好有剛學習的小夥伴問我ListView怎麼用,那我就用ListView。
源碼:
RairDemo
GitHub: https://github.com/Rairmmd/android-demo
Coding: https://coding.net/u/Rair/p/RairDemo/git
⑶ android如何實現一台手機通過藍牙連另一台
手機之間通過藍牙連接傳送文件,請參考以下步驟:
1、雙方手機開啟藍牙開關,路徑:設置--常規--藍牙--開啟開關;
2、開啟開放檢測開關,開啟後才可以被附近所有藍牙設備檢測到;
3、掃描到需連接的藍牙設備,點擊連接;
4、雙方手機提示藍牙配對請求和配對型號,雙方手機點擊配對;
5、配對成功,已配對的設備裡面會顯示連接成功的藍牙設備;
6、打開文件,選擇藍牙發送和需發送到的藍牙設備,接收文件即可。