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

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

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

首先在清单文件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
}

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值