Skip to content

Commit 9d08d24

Browse files
committed
fix:1、写数据生成taskId时,添加一个3位随机字符串,避免生成相同的taskId,导致被移除队列中相同taskId的数据;2、添加属性stopScanWhenStartConnect,支持连接时可以继续扫描
1 parent fbe86aa commit 9d08d24

File tree

11 files changed

+122
-84
lines changed

11 files changed

+122
-84
lines changed

.idea/sonarlint/issuestore/0/2/0254c09bbc78bfe46588e0739059e691f7f0a967

Lines changed: 4 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.idea/sonarlint/securityhotspotstore/index.pb

Lines changed: 3 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

app/build.gradle

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,8 @@ android {
1111
applicationId "com.bhm.ble"
1212
minSdk 24
1313
targetSdk 34
14-
versionCode 231
15-
versionName "2.3.1"
14+
versionCode 232
15+
versionName "2.3.2"
1616

1717
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
1818
}

app/src/main/java/com/bhm/demo/vm/MainViewModel.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@ class MainViewModel(private val application: Application) : BaseViewModel(applic
6464
// .setMtu(100, true)
6565
.setMaxConnectNum(2)
6666
.setConnectRetryCountAndInterval(2, 1000)
67+
.setStopScanWhenStartConnect(false)
6768
.build()
6869
)
6970
BleManager.get().registerBluetoothStateReceiver {

ble/build.gradle

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ plugins {
66

77
//ext.GROUP = "com.lute.ble"
88
//ext.POM_ARTIFACT_ID = "BleCore"
9-
//ext.VERSION_NAME = "2.3.1"
9+
//ext.VERSION_NAME = "2.3.2"
1010
////引用gradle_upload.gradle
1111
//apply from: "${project.rootDir}/maven_upload.gradle"
1212

@@ -19,7 +19,7 @@ afterEvaluate {
1919
// 这里头是artifacts的配置信息,不填会采用默认的
2020
groupId = 'com.github.buhuiming'
2121
artifactId = 'BleCore'
22-
version = '2.3.1'
22+
version = '2.3.2'
2323

2424
from components.release
2525
artifact androidSourcesJar //打包源码,去除这行打的包将看不到源码

ble/src/main/java/com/bhm/ble/BleManager.kt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -184,7 +184,9 @@ class BleManager private constructor() {
184184
bleConnectCallback: BleConnectCallback.() -> Unit
185185
) {
186186
checkInitialize()
187-
stopScan()
187+
if (getOptions()?.stopScanWhenStartConnect == true) {
188+
stopScan()
189+
}
188190
bleBaseRequest?.connect(
189191
bleDevice,
190192
connectMillisTimeOut,

ble/src/main/java/com/bhm/ble/attribute/BleOptions.kt

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import com.bhm.ble.data.Constants.DEFAULT_SCAN_RETRY_INTERVAL
2121
import com.bhm.ble.data.Constants.DEFAULT_OPERATE_INTERVAL
2222
import com.bhm.ble.data.Constants.DEFAULT_TASK_QUEUE_TYPE
2323
import com.bhm.ble.data.Constants.ENABLE_LOG
24+
import com.bhm.ble.data.Constants.STOP_SCAN_WHEN_START_CONNECT
2425

2526

2627
/**
@@ -67,6 +68,8 @@ class BleOptions private constructor(builder: Builder) {
6768

6869
var taskQueueType = builder.taskQueueType
6970

71+
var stopScanWhenStartConnect = builder.stopScanWhenStartConnect
72+
7073
companion object {
7174

7275
@JvmStatic
@@ -114,6 +117,8 @@ class BleOptions private constructor(builder: Builder) {
114117

115118
internal var taskQueueType: BleTaskQueueType = DEFAULT_TASK_QUEUE_TYPE
116119

120+
internal var stopScanWhenStartConnect = STOP_SCAN_WHEN_START_CONNECT
121+
117122
/**
118123
* 设置扫描过滤规则:只查询对应ServiceUuid的设备
119124
*/
@@ -270,6 +275,14 @@ class BleOptions private constructor(builder: Builder) {
270275
this.taskQueueType = taskQueueType
271276
}
272277

278+
/**
279+
* 当连接设备时是否停止扫描,默认为[STOP_SCAN_WHEN_START_CONNECT]
280+
* 注意:该参数对startScanAndConnect方法无效
281+
*/
282+
fun setStopScanWhenStartConnect(stopScanWhenStartConnect: Boolean) = apply {
283+
this.stopScanWhenStartConnect = stopScanWhenStartConnect
284+
}
285+
273286
fun build(): BleOptions {
274287
return BleOptions(this)
275288
}
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
package com.bhm.ble.data
2+
3+
/**
4+
* @description [com.bhm.ble.request.BleWriteRequest.writeQueueData]方法中队列存放的数据结构
5+
* @author Buhuiming
6+
* @date 2024/10/18/ 18:04
7+
*/
8+
internal data class BleWriteQueueData(
9+
var operateRandomID: String,
10+
var serviceUUID: String,
11+
var writeUUID: String,
12+
var data: ByteArray,
13+
var skipErrorPacketData: Boolean,
14+
var retryWriteCount: Int,
15+
var retryDelayTime: Long,
16+
var writeType: Int?,
17+
) {
18+
override fun equals(other: Any?): Boolean {
19+
if (this === other) return true
20+
if (javaClass != other?.javaClass) return false
21+
22+
other as BleWriteQueueData
23+
24+
if (operateRandomID != other.operateRandomID) return false
25+
if (serviceUUID != other.serviceUUID) return false
26+
if (writeUUID != other.writeUUID) return false
27+
if (!data.contentEquals(other.data)) return false
28+
if (skipErrorPacketData != other.skipErrorPacketData) return false
29+
if (retryWriteCount != other.retryWriteCount) return false
30+
if (retryDelayTime != other.retryDelayTime) return false
31+
if (writeType != other.writeType) return false
32+
33+
return true
34+
}
35+
36+
override fun hashCode(): Int {
37+
var result = operateRandomID.hashCode()
38+
result = 31 * result + serviceUUID.hashCode()
39+
result = 31 * result + writeUUID.hashCode()
40+
result = 31 * result + data.contentHashCode()
41+
result = 31 * result + skipErrorPacketData.hashCode()
42+
result = 31 * result + retryWriteCount
43+
result = 31 * result + retryDelayTime.hashCode()
44+
result = 31 * result + (writeType ?: 0)
45+
return result
46+
}
47+
}

ble/src/main/java/com/bhm/ble/data/Constants.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,8 @@ object Constants {
4444

4545
val DEFAULT_TASK_QUEUE_TYPE = BleTaskQueueType.Default
4646

47+
const val STOP_SCAN_WHEN_START_CONNECT = true
48+
4749
//系统提供接受通知自带的UUID
4850
const val UUID_CLIENT_CHARACTERISTIC_CONFIG_DESCRIPTOR =
4951
"00002902-0000-1000-8000-00805f9b34fb"

ble/src/main/java/com/bhm/ble/device/BleConnectedDevice.kt

Lines changed: 2 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -60,8 +60,6 @@ internal class BleConnectedDevice(val bleDevice: BleDevice) : BluetoothGattCallb
6060

6161
private var bleEventCallback: BleEventCallback? = null
6262

63-
private val characters = ('a'..'z') + ('A'..'Z') + ('0'..'9')
64-
6563
private fun initBleConnectRequest() {
6664
if (bleConnectRequest == null) {
6765
bleConnectRequest = BleConnectRequest(bleDevice, this)
@@ -411,7 +409,7 @@ internal class BleConnectedDevice(val bleDevice: BleDevice) : BluetoothGattCallb
411409
bleWriteRequest?.writeData(
412410
serviceUUID,
413411
writeUUID,
414-
System.currentTimeMillis().toString() + generateRandomString(),
412+
System.currentTimeMillis().toString(),
415413
dataArray,
416414
writeType,
417415
bleWriteCallback
@@ -436,7 +434,7 @@ internal class BleConnectedDevice(val bleDevice: BleDevice) : BluetoothGattCallb
436434
bleWriteRequest?.writeQueueData(
437435
serviceUUID,
438436
writeUUID,
439-
System.currentTimeMillis().toString() + generateRandomString(),
437+
System.currentTimeMillis().toString(),
440438
dataArray,
441439
skipErrorPacketData,
442440
retryWriteCount,
@@ -531,13 +529,4 @@ internal class BleConnectedDevice(val bleDevice: BleDevice) : BluetoothGattCallb
531529
bleConnectRequest = null
532530
bleEventCallback = null
533531
}
534-
535-
/**
536-
* 从[characters]中随机生成5个字符组成的字符串
537-
*/
538-
private fun generateRandomString(): String {
539-
return (1..5)
540-
.map { characters.random() }
541-
.joinToString("")
542-
}
543532
}

0 commit comments

Comments
 (0)