这是一个适用于经典蓝牙通信的快速开发框架。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