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个或多个,也可以不配置使用默认(扫描10秒)。
-
扫描的时候,会根据配置的过滤选项,对扫描到的设备进行过滤,结果返回过滤后的设备。
-
扫描时间配置为小于等于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
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!