BluetoothAdapter是所有Android內(nèi)對藍牙操作的入口
- 首先需要聲明BluetoothAdapter類型的變量
BluetoothAdapter mbluetoothAdapter;
- 在對本地藍牙進行操作之前安券,需要先判斷本地藍牙是否已經(jīng)打開
mbluetoothAdapter.isEnabled();
- 當判斷藍牙為打開之后,調(diào)用適配器的方法來打開藍牙
mbluetoothAdapter.enable();
注意,enable方法返回的是一個布爾值,如果為true則代表打開成功,如果為false,則代表打開失敗,所有后面的操作還需要通過if判斷來進行
通過適配器來打開藍牙還需要在XML文件里面對本應用賦予兩個權(quán)限
打開藍牙還可以調(diào)用Android的API爷狈,即通過intent來與藍牙進行通訊,通過此方法是會對用戶詢問裳擎,是否賦予打開藍牙的權(quán)限涎永。
打開藍牙之后,對藍牙的操作:
- getname()獲取藍牙的名字
- getaddress()獲取藍牙的mac地址
- getState()獲取藍牙的狀態(tài),有四種(打開羡微,關(guān)閉谷饿,正在打開,正在關(guān)閉)
BluetoothSocket
一. 簡介
客戶端與服務端 :
BluetoothSocket 和 BluetoothServerSocket 類似于Java中的套接字的 Socket 和 ServerSocket;
在服務器端和客戶端進行數(shù)據(jù)傳輸?shù)臅r候都要使用這個類;
服務器端 : 使用BluetoothServerSocket對象可以創(chuàng)建一個BluetoothSocket對象, 調(diào)用BluetoothServerSocket的accept()方法就可以獲取該對象;
客戶端 : 調(diào)用BluetoothDevice的createRfcommSocketToServiceRecord()可以獲取該對象;
在服務器端BluetoothServerSocket進行accept()阻塞, 在客戶端BluetoothSocket調(diào)用connect()連接服務器, 如果連接成功, 服務器端的accept()方法就會返回BluetoothSocket對象, 同時客戶端的BluetoothSocket也成功連接服務器, 此時服務器端和客戶端的BluetoothSocket對象就可以獲取輸入輸出流, 對數(shù)據(jù)進行操作;
常見的連接 : 最常見的BluetoothSocket連接是RFCOMM連接, 這是一個面向連接的數(shù)據(jù)交互, 先建立連接, 在進行數(shù)據(jù)交互, 類似于打電話.(面向連接對應無連接, 打電話時面向連接的; 網(wǎng)絡上發(fā)送數(shù)據(jù)是無連接的).
線程安全 : BluetoothSocket是線程安全的, close()方法會終止BluetoothSocket進行的一切操作, 并且同時會關(guān)閉連接;
二. API詳解
常用方法介紹 :
(1)關(guān)閉連接
public void close ()
作用 : 關(guān)閉這個套接字, 并且釋放該對象占用的所有的系統(tǒng)資源; 這個方法可以調(diào)用多次, 但是只有第一次會生效, 多次調(diào)用, 作用的對象都是一個對象;
(2)嘗試連接
public void connect ()
作用 : 嘗試去連接一個遠程設備, 這個方法會一直阻塞, 知道連接成功或者失敗, 如果沒有出現(xiàn)異常就說明連接成功;
注意 : 執(zhí)行這個方法的時候, 不能與藍牙掃描同時進行, 在執(zhí)行該方法前, 要先停止藍牙掃描, 調(diào)用BluetoothAdapter的cancelDiscovery()方法;
(3)獲取輸入流
public InputStream getInputStream ()
作用 : 獲取輸入流
(4)獲取輸出流
public OutputStream getOutputStream ()
作用 : 獲取輸出流
(5)獲取遠程設備
public BluetoothDevice getRemoteDevice ()
作用 : 如果BluetoothSocket處于連接中, 那么返回連接的遠程設備, 如果沒有連接, 那么返回null;
(6)是否連接
public boolean isConnected ()
作用 : 獲取這個BluetoothSocket是否連接;