Kotlin开发之低功耗蓝牙(引用三方库)的详解一

2023-12-13 12:24:48

在我们工作中,如果涉及到软硬结合,经常会用到蓝牙,而蓝牙有两种:一种是普通的蓝牙,一种是低功耗的蓝牙,今天我们主要讲解的是低功耗蓝牙:主要根据第三方库进行的讲解

第一步:在使用蓝牙之前我们要添加对应的蓝牙权限:

首先在清单文件AndroidManifest.xml添加对应的蓝牙权限

<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

其次,在使用的位置添加对应的动态权限:

我使用的是三方库,在app的build中导入依赖:api 'com.github.yjfnypeu:EasyAndroid:1.3.2'

具体的使用:

EasyPermissions.create(// 指定待申请权限
    Manifest.permission.WRITE_EXTERNAL_STORAGE,
    Manifest.permission.ACCESS_COARSE_LOCATION,
    Manifest.permission.ACCESS_FINE_LOCATION,
    Manifest.permission.WAKE_LOCK
)
    // 定制权限申请说明弹窗
    .rational { permission, chain ->
        AlertDialog.Builder(context)
            .setTitle("权限申请说明")
            .setMessage("应用需要此权限:\n$permission")
            .setNegativeButton("拒绝", { _, _ -> chain.cancel() })
            .setPositiveButton("同意", { _, _ -> chain.process() })
            .show()
        return@rational true
    }

做完以上步骤,下面我们开始做低功耗蓝牙的处理:

第二步:处理低功耗蓝牙的准备工作:

首先,在app的build中添加蓝牙通讯的依赖? ?api 'com.clj.fastble:FastBleLib:2.3.4'

其次,配置蓝牙扫描规则

如果正在扫描,就先取消扫描:

if (BleManager.getInstance().scanSate == BleScanState.STATE_SCANNING){
    BleManager.getInstance().cancelScan()
}

配置规则:

  1. 扫描规则可以配置1个或多个,也可以不配置使用默认(扫描10秒)。
  2. 扫描的时候,会根据配置的过滤选项,对扫描到的设备进行过滤,结果返回过滤后的设备。
  3. 扫描时间配置为小于等于0,会实现无限扫描,直至调用BleManger.getInstance().cancelScan()来中止扫描。

? ? ? ? 具体的代码示例如下:

val scanRuleConfig = BleScanRuleConfig.Builder()
    .setAutoConnect(false)      // 连接时的autoConnect参数,可选,默认false
    .setScanTimeOut(1000 * 10) // 扫描超时时间,可选,默认10秒;小于等于0表示不限制扫描时间
    .build()
BleManager.getInstance().initScanRule(scanRuleConfig)

最后,进行蓝牙的扫描连接

//如果正在扫描,就先取消
if (BleManager.getInstance().scanSate == BleScanState.STATE_SCANNING){
    BleManager.getInstance().cancelScan()
}
BleManager.getInstance().scan(object : BleScanCallback() {
    override fun onScanFinished(scanResultList: List<BleDevice>) {
       
        var isble = false
        for (e in scanResultList.listIterator()){
            if (e.mac.equals("蓝牙设备对应的地址")){
                isble = true
            }
        }
        if (!isble){
            BleManager.getInstance().cancelScan()
            startScan()
        }
    }
    override fun onScanStarted(success: Boolean) {
      
           //正在搜索设备
      
    }
    override fun onScanning(bleDevice: BleDevice) {
//将接收到的处理好的蓝牙地址做一个回调,方便我们在其他地方使用
        if (bleDevice.name != null)
            mDeviceListener!!.onDevice(bleDevice)
    }
})

回调的方法设置

var mDeviceListener: OnDeviceListener? = null
interface OnDeviceListener {
    fun onDevice(bleDevice :BleDevice)
    fun onScanFinished(scanResultList: List<BleDevice>)
}
fun setOnDeviceListener(listener: OnDeviceListener) {
    this.mDeviceListener = listener
}

以上就是今天讲解的主要的蓝牙使用的方式,怎么具体的详细的使用,待续

文章来源:https://blog.csdn.net/qq_36451275/article/details/134964466
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。