【藍牙】BluetoothAdapter詳解

BluetoothAdapter簡介

  • BluetoothAdapter代表本地藍牙設備適配器。BluetoothAdapter可以讓我們執行基本的藍牙任務,如發現藍牙,查詢藍牙已配對列表,通過已知的MAC地址初始化一個BluetoothDevice實例,並且創建一個BluetoothServerSocket來監聽其它設備的請求,啓動藍牙低功耗設備掃描等。
  • 要獲取代表本地藍牙適配器BluetoothAdapter,可以調用BluetoothManager上的BluetoothManager#getAdapter函數。在api17(JELLY_BEAN_MR1)及更低版本上,可以通過靜態方法getDefaultAdapter()來獲取BluetoothAdapter對象。
  • 從根本上來說,它是所有藍牙活動的起點。一旦你獲得了本地適配器對象,你就可以通過getBondedDevices()方法獲取一系列已配對的藍牙設備對象;通過startDiscovery()方法發現藍牙設備;或者創建一個BluetoothServerSocket來監聽通過 listenUsingRfcommWithServiceRecord(java.lang.String, java.util.UUID)進入的射頻通信連接請求;或者通過startLeScan(android.bluetooth.BluetoothAdapter.LeScanCallback)來掃描低功耗藍牙設備。
  • 這個類是線程安全的

摘要

類型 方法或接口 說明
interface BluetoothAdapter.LeScanCallback 用於傳遞低功耗藍牙掃描結果的回調接口
String ACTION_CONNECTION_STATE_CHANGED 用於廣播本地藍牙適配器與遠端同種配置文件的藍牙設備之間的連接狀態改變
String ACTION_DISCOVERY_FINISHED 廣播Action:發現結束的廣播
String ACTION_DISCOVERY_STARTED 廣播Action:發現開始的廣播
String ACTION_LOCAL_NAME_CHANGED 廣播Action:本地藍牙適配器更改與其配對的藍牙設備名稱
String ACTION_REQUEST_DISCOVERABLE Activity Action:顯示一個activity來請求發現模式
String ACTION_REQUEST_ENABLE Activity Action:顯示一個activity來允許用戶打開藍牙
String ACTION_SCAN_MODE_CHANGED 廣播Action:表示本地適配器藍牙掃描模式已經改變
String ACTION_STATE_CHANGED 廣播Action:本地藍牙適配器已經改變的狀態
int ERROR 這個類的哨兵錯誤值
String EXTRA_CONNECTION_STATE 被ACTION_CONNECTION_STATE_CHANGED使用的額外內容,此額外內容表示當前的連接狀態。
String EXTRA_DISCOVERABLE_DURATION 在ACTION_REQUEST_DISCOVERABLE的intent中用作可選的int額外字段,以請求特定的持續時間以秒爲單位。
String EXTRA_LOCAL_NAME 在ACTION_LOCAL_NAME_CHANGED的intent中用作字符串額外字段以請求本地藍牙名稱。
String EXTRA_PREVIOUS_CONNECTION_STATE ACTION_CONNECTION_STATE_CHANGED使用的額外內容,此額外內容表示以前的連接狀態。
String EXTRA_PREVIOUS_SCAN_MODE 在ACTION_SCAN_MODE_CHANGED的intent中用作int extra字段,以請求先前的掃描模式。
String EXTRA_PREVIOUS_STATE 在ACTION_STATE_CHANGED的intent中用作int額外字段,以請求先前的電源狀態。
String EXTRA_SCAN_MODE 在ACTION_SCAN_MODE_CHANGED的intent中用作int額外字段,以請求當前的掃描模式。
String EXTRA_STATE 在ACTION_STATE_CHANGED的intent中用作int額外字段,以請求當前電源狀態。
int SCAN_MODE_CONNECTABLE 表示已禁用查詢掃描,但是在本地Bluetooth適配器上啓用了頁面掃描。
int SCAN_MODE_CONNECTABLE_DISCOVERABLE 表示在本地藍牙適配器上啓用了查詢掃描和頁面掃描。
int SCAN_MODE_NONE 表示在本地藍牙適配器上禁用了查詢掃描和頁面掃描。
int STATE_CONNECTED 配置文件處於連接狀態
int STATE_CONNECTING 配置文件處於正在連接狀態
int STATE_DISCONNECTED 配置文件處於斷開連接狀態
int STATE_DISCONNECTING 配置文件處於正在斷開連接狀態
int STATE_OFF 表示本地藍牙適配器處於關閉狀態
int STATE_ON 表示本地藍牙適配器處於開啓狀態,準備使用
int STATE_TURNING_OFF 表示本地藍牙適配器正在關閉
int STATE_TURNING_ON 表示本地藍牙適配器正在開啓
boolean cancelDiscovery() 取消當前設備藍牙掃描進程
static boolean checkBluetoothAddress(String address) 驗證藍牙字符串地址,如: “00:43:A8:23:10:F0”,字符字母必須大寫纔有效
void closeProfileProxy(int profile, BluetoothProfile proxy) 關閉配置文件代理與服務的連接
boolean disable() 關閉本地藍牙適配器-請勿在沒有明確的用戶操作的情況下關閉藍牙。
boolean enable() 打開本地藍牙適配器-未經明確的用戶操作請勿使用以打開藍牙。
String getAddress() 獲取本地藍牙適配器的硬件地址
BluetoothLeAdvertiser getBluetoothLeAdvertiser() 獲取低功耗藍牙的BluetoothAdvertiser對象
BluetoothLeScanner getBluetoothLeScanner() 獲取低功耗藍牙的BluetoothLeScanner對象
Set getBondedDevices() 獲取已配對的藍牙設備集合
static BluetoothAdapter getDefaultAdapter() 獲取BluetoothAdapter對象
int getLeMaximumAdvertisingDataLength() 獲取低功耗最大公告數據長度,以字節位單位
String getName() 獲取本地藍牙適配器的藍牙名稱
int getProfileConnectionState(int profile) 根據配置文件獲取當前連接狀態
boolean getProfileProxy(Context context, BluetoothProfile.ServiceListener listener, int profile) 獲取與配置文件關聯的配置文件代理對象
BluetoothDevice getRemoteDevice(byte[] address) 根據給定的藍牙字節地址獲取BluetoothDevice對象
BluetoothDevice getRemoteDevice(String address) 根據給定的字符串地址獲取BluetoothDevice對象
int getScanMode() 獲取掃描模式
int getState() 獲取本地藍牙適配器當前狀態
boolean isDiscovering() 如果本地藍牙適配器當前正在進行掃描,則返回true
boolean isEnabled() 如果當前藍牙已打開且準備使用則返回true
boolean isLe2MPhySupported() 判斷是否支持LE 2M PHY特性
boolean isLeCodedPhySupported() 判斷是否支持LE Coded PHY特性
boolean isLeExtendedAdvertisingSupported() 判斷是否支持LE Extended Advertising特性
boolean isLePeriodicAdvertisingSupported() 判斷是否支持LE Periodic Advertising特性
boolean isMultipleAdvertisementSupported() 判斷芯片組是否支持多個advertisement
boolean isOffloadedFilteringSupported() 判斷是否支持分載過濾器
boolean isOffloadedScanBatchingSupported() 判斷是否支持分載掃描批處理
BluetoothServerSocket listenUsingInsecureL2capChannel() 創建一個不安全的面向L2CAP的連接信道BluetoothServerSocket對象
BluetoothServerSocket listenUsingL2capChannel() 創建一個安全的面向L2CAP的連接信道BluetoothServerSocket對象
BluetoothServerSocket listenUsingRfcommWithServiceRecord(String name, UUID uuid) 創建一個監聽器和一個攜帶服務數據的安全的RFCOMM藍牙Socket
boolean setName(String name) 設置藍牙適配器名稱(可能調用這個方法後,你手機的藍牙名稱並沒改變,可能是緩存問題)
boolean startDiscovery() 開始藍牙掃描
boolean startLeScan(UUID[] serviceUuids, BluetoothAdapter.LeScanCallback callback) 這個方法將在api21中被遺棄,之後會用BluetoothLeScanner#startScan(List, ScanSettings, ScanCallback)來代替
boolean startLeScan(BluetoothAdapter.LeScanCallback callback) 這個方法將在api21中遺棄,將使用BluetoothLeScanner#startScan(List, ScanSettings, ScanCallback)來代替
void stopLeScan(BluetoothAdapter.LeScanCallback callback) 這個方法將在api21中遺棄,將會使用BluetoothLeScanner#stopScan(ScanCallback)來代替

常量

  • ACTION_CONNECTION_STATE_CHANGED
@SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION) 
public static final String ACTION_CONNECTION_STATE_CHANGED = "android.bluetooth.adapter.action.CONNECTION_STATE_CHANGED";

未完待續

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章