這是一個適用於經典藍牙通信的快速開發框架。html
本框架只適用於支持藍牙3.0協議的設備進行數據鏈接傳輸,也就是一般說的經典藍牙,一般手機與手機之間的鏈接都屬於經典藍牙模式範疇,而通常鏈接外設耳機等設備,大多 屬於BLE藍牙(低功耗藍牙),這兩種藍牙除了名字有相同以外,通訊方式、原理、協議徹底不同。android
allprojects {
repositories {
maven { url "https://jitpack.io" }
}
}
dependencies {
implementation 'com.github.AlexLiuSheng:EasyBluetoothFrame:version'
}
複製代碼
經典藍牙採用C/S模式,因此同一個設備,只能做爲Client端或者Server端的其中一個,github
若是設備充當Server端,那麼監聽流程以下:api
若是設備充當Client,本框架藍牙的鏈接流程通常爲:bash
可使用庫BluetoothPermissionHandler
來輔助獲取藍牙權限或者開發者本身動態獲取權限,BluetoothPermissionHandler
用法以下:app
private val permissionCallBack=BluetoothPermissionHandler(this,this)
override fun onCreate(savedInstanceState: Bundle?) {
permissionCallBack.start();
}
override fun permissionFailed() {
}
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
permissionCallBack.onActivityResult(requestCode, resultCode, data)
}
override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<String>, grantResults: IntArray) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults)
permissionCallBack.onRequestPermissionsResult(requestCode, permissions, grantResults)
}
override fun onBlueToothEnabled() {
}
複製代碼
BleManager.getInstance().init(application)
BleManager.getInstance().setForegroundService(true)
BleManager.getInstance().setNotification(notification)
BleManager.getInstance().getPairedDevices()
無論是服務端仍是客戶端都須要獲取藍牙權限,而且進行初始化BleManager。若是使用BluetoothPermissionHandler
,應該在onBlueToothEnabled
回調中作 掃描鏈接等操做。框架
默認使用00001101-0000-1000-8000-00805F9B34FB
,固然能夠自定義maven
BleManager.getInstance().setConnectionUUID()
複製代碼
傳入參數爲可被發現的時間,單位秒ide
BleManager.getInstance().enableDiscoverable(300)
複製代碼
註冊爲Server端以後,當有設備鏈接成功後,會回調connectSuccess
方法,咱們能夠保存回調回來的 Connect
爲全局,方便讀寫操做
BleManager.getInstance().registerServerConnection(object: ConnectResultlistner {
override fun connectSuccess(connect: Connect?) {
this@MainActivity.connect=connect
read()
}
override fun connectFailed(e: Exception?) {
}
})
複製代碼
配置掃描時間,而後掃描,在掃描回調中,一般操做是將回調的藍牙設備添加到列表並顯示,須要注意的是,回調的藍牙設備可能會重複,所以須要手動去重
//配置掃描時間
val config=ScanConfig(5000)
BleManager.getInstance().scan(config,object :ScanResultListener{
override fun onDeviceFound(device: BluetoothDevice?) {
}
override fun onFinish() {
}
override fun onError() {
}
})
複製代碼
默認使用00001101-0000-1000-8000-00805F9B34FB
,固然能夠自定義
BleManager.getInstance().setConnectionUUID()
複製代碼
若是沒有配對,須要先進行設備配對,若是已經配對,那麼能夠直接進行鏈接操做 判斷是否已經配對,能夠用BleManager.getInstance().getPairedDevices()
返回的集合進行判斷 配對代碼以下:
BleManager.getInstance().pin(data[p1],object:PinResultListener{
override fun paired(device: BluetoothDevice?) {
connect(context,data[p1])
}
override fun startPair(device: BluetoothDevice?) {
super.startPair(device)
}
override fun pairing(device: BluetoothDevice?) {
super.pairing(device)
}
override fun pairFailed(device: BluetoothDevice?) {
super.pairFailed(device)
}
})
複製代碼
當有設備鏈接成功後,會回調connectSuccess
方法,咱們能夠保存回調回來的 Connect
爲全局,方便讀寫操做
BleManager.getInstance().connect(d, object : ConnectResultlistner {
override fun connectSuccess(connect: Connect?) {
}
override fun connectFailed(e: Exception?) {
}
})
複製代碼
connect?.read(object: TransferProgressListener {
override fun transferSuccess(bytes: ByteArray?) {
bytes?.let { it1 ->
tvReceive.text=String(it1)
}
CLog.e("read string")
}
override fun transferFailed(msg:String) {
t(msg)
}
override fun transfering(progress: Int) {
CLog.e("read progress:$progress")
}
})
複製代碼
connect?.write(text.toByteArray(), object : TransferProgressListener {
override fun transferSuccess(bytes: ByteArray?) {
}
override fun transferFailed(msg:String) {
t(msg)
}
override fun transfering(progress: Int) {
CLog.e("write progress:$progress")
}
})
複製代碼
BleManager.getInstance().destory()
複製代碼
全部功能接口
void init(Context context);
void setConnectionUUID(String uuid);
boolean isSupported();
void setResultListener(ScanResultListener resultListener);
Set<BluetoothDevice> getPairedDevices();
void scan(ScanConfig scanConfig, ScanResultListener scanResultListener);
void stopSearch();
void connect(BluetoothDevice device, ConnectResultlistner connectResultlistner);
void destory();
void pin(BluetoothDevice device, PinResultListener resultListener);
void cancelPin(BluetoothDevice device, ResultListener resultListener);
void setServerConnectResultListener(ConnectResultlistner connectResultListener);
void registerServerConnection(ConnectResultlistner connectResultListener);
void setForegroundService(boolean foregroundService);
void setNotification(Notification notification);
void enableDiscoverable(long time);
複製代碼
Apache 2.0