Skip to content

Commit 89db4ba

Browse files
committed
feart: 1、打开notify/indicate添加超时参数;2、检测GPS开关配置成可选项
1 parent d66139b commit 89db4ba

File tree

18 files changed

+140
-28
lines changed

18 files changed

+140
-28
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: 2 additions & 4 deletions
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 240
15-
versionName "2.4.0"
14+
versionCode 250
15+
versionName "2.5.0"
1616

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

app/src/main/java/com/bhm/demo/ui/OptionSettingActivity.kt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import com.bhm.ble.data.Constants.DEFAULT_SCAN_MILLIS_TIMEOUT
2323
import com.bhm.ble.data.Constants.DEFAULT_SCAN_RETRY_COUNT
2424
import com.bhm.ble.data.Constants.DEFAULT_SCAN_RETRY_INTERVAL
2525
import com.bhm.ble.data.Constants.ENABLE_LOG
26+
import com.bhm.ble.data.Constants.SCAN_NEED_CHECK_GPS
2627
import com.bhm.demo.BaseActivity
2728
import com.bhm.demo.R
2829
import com.bhm.demo.databinding.ActivitySettingBinding
@@ -99,6 +100,7 @@ class OptionSettingActivity : BaseActivity<BaseViewModel, ActivitySettingBinding
99100
viewBinding.etMTU.setText(it.mtu.toString())
100101
viewBinding.cbContainScanDeviceName.isChecked = it.containScanDeviceName
101102
viewBinding.cbLogger.isChecked = it.enableLog
103+
viewBinding.cbNeedCheckGPS.isChecked = it.needCheckGps
102104
viewBinding.cbMtu.isChecked = it.autoSetMtu
103105
viewBinding.cbAutoConnect.isChecked = it.autoConnect
104106
viewBinding.spTaskQueueType.setSelection(getTaskQueueType(it.taskQueueType))
@@ -126,6 +128,7 @@ class OptionSettingActivity : BaseActivity<BaseViewModel, ActivitySettingBinding
126128
viewBinding.etMTU.setText(DEFAULT_MTU.toString())
127129
viewBinding.cbContainScanDeviceName.isChecked = CONTAIN_SCAN_DEVICE_NAME
128130
viewBinding.cbLogger.isChecked = ENABLE_LOG
131+
viewBinding.cbNeedCheckGPS.isChecked = SCAN_NEED_CHECK_GPS
129132
viewBinding.cbMtu.isChecked = DEFAULT_AUTO_SET_MTU
130133
viewBinding.cbAutoConnect.isChecked = AUTO_CONNECT
131134
viewBinding.spTaskQueueType.setSelection(0)
@@ -170,6 +173,7 @@ class OptionSettingActivity : BaseActivity<BaseViewModel, ActivitySettingBinding
170173
.setMaxConnectNum(viewBinding.etMaxConnectNum.text.toString().toInt())
171174
.setMtu(viewBinding.etMTU.text.toString().toInt(), viewBinding.cbMtu.isChecked)
172175
.setTaskQueueType(getTaskQueueType(viewBinding.spTaskQueueType.selectedItemPosition))
176+
.setNeedCheckGps(viewBinding.cbNeedCheckGPS.isChecked)
173177
BleManager.get().init(application, builder.build())
174178
BleManager.get().disConnectAll()
175179
finish()

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

Lines changed: 29 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,7 @@ class DetailViewModel(application: Application) : BaseViewModel(application) {
122122
fun notify(bleDevice: BleDevice,
123123
node: CharacteristicNode
124124
) {
125-
BleManager.get().notify(bleDevice, node.serviceUUID, node.characteristicUUID, BleDescriptorGetType.AllDescriptor) {
125+
BleManager.get().notify(bleDevice, node.serviceUUID, node.characteristicUUID, 2000, BleDescriptorGetType.AllDescriptor) {
126126
onNotifyFail { _, _, t ->
127127
addLogMsg(LogEntity(Level.OFF, "notify失败:${t.message}"))
128128
node.enableNotify = false
@@ -274,19 +274,34 @@ class DetailViewModel(application: Application) : BaseViewModel(application) {
274274
//mtu长度包含了ATT的opcode一个字节以及ATT的handle2个字节
275275
val maxLength = mtu - 3
276276
val listData: SparseArray<ByteArray> = BleUtil.subpackage(data, maxLength)
277-
BleManager.get().writeData(bleDevice, node.serviceUUID, node.characteristicUUID, listData) {
278-
onWriteFail { _, currentPackage, _, t ->
279-
addLogMsg(LogEntity(Level.OFF, "${currentPackage}包数据写失败:${t.message}"))
280-
}
281-
onWriteSuccess { _, currentPackage, _, justWrite ->
282-
addLogMsg(LogEntity(Level.FINE, "${node.characteristicUUID} -> 第${currentPackage}包数据写成功:" +
283-
BleUtil.bytesToHex(justWrite)
284-
))
285-
}
286-
onWriteComplete { _, allSuccess ->
287-
//代表所有数据写成功,可以在这个方法中处理成功的逻辑
288-
addLogMsg(LogEntity(Level.FINE, "${node.characteristicUUID} -> 写数据完成,是否成功:$allSuccess"))
277+
BleManager.get()
278+
.writeData(bleDevice, node.serviceUUID, node.characteristicUUID, listData) {
279+
onWriteFail { _, currentPackage, _, t ->
280+
addLogMsg(
281+
LogEntity(
282+
Level.OFF,
283+
"${currentPackage}包数据写失败:${t.message}"
284+
)
285+
)
286+
}
287+
onWriteSuccess { _, currentPackage, _, justWrite ->
288+
addLogMsg(
289+
LogEntity(
290+
Level.FINE,
291+
"${node.characteristicUUID} -> 第${currentPackage}包数据写成功:" +
292+
BleUtil.bytesToHex(justWrite)
293+
)
294+
)
295+
}
296+
onWriteComplete { _, allSuccess ->
297+
//代表所有数据写成功,可以在这个方法中处理成功的逻辑
298+
addLogMsg(
299+
LogEntity(
300+
Level.FINE,
301+
"${node.characteristicUUID} -> 写数据完成,是否成功:$allSuccess"
302+
)
303+
)
304+
}
289305
}
290-
}
291306
}
292307
}

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@ class MainViewModel(private val application: Application) : BaseViewModel(applic
6565
.setMaxConnectNum(2)
6666
.setConnectRetryCountAndInterval(2, 1000)
6767
.setStopScanWhenStartConnect(false)
68+
.setNeedCheckGps(true)
6869
.build()
6970
)
7071
BleManager.get().registerBluetoothStateReceiver {

app/src/main/res/layout/activity_setting.xml

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -397,6 +397,29 @@
397397

398398
</androidx.appcompat.widget.LinearLayoutCompat>
399399

400+
<androidx.appcompat.widget.LinearLayoutCompat
401+
android:layout_width="match_parent"
402+
android:layout_height="match_parent"
403+
android:gravity="center_vertical"
404+
android:layout_marginVertical="10dp"
405+
android:orientation="horizontal">
406+
407+
<TextView
408+
android:layout_width="wrap_content"
409+
android:layout_height="wrap_content"
410+
android:text="扫描设备是否需要检测GPS开关:"
411+
android:textSize="16sp"
412+
android:textColor="@color/black"
413+
android:layout_marginEnd="12dp"/>
414+
415+
<CheckBox
416+
android:id="@+id/cbNeedCheckGPS"
417+
android:layout_width="40dp"
418+
android:layout_height="40dp"
419+
android:checked="true"/>
420+
421+
</androidx.appcompat.widget.LinearLayoutCompat>
422+
400423
<androidx.appcompat.widget.LinearLayoutCompat
401424
android:layout_width="match_parent"
402425
android:layout_height="match_parent"

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.4.0"
9+
//ext.VERSION_NAME = "2.5.0"
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.4.0'
22+
version = '2.5.0'
2323

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

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

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -366,13 +366,33 @@ class BleManager private constructor() {
366366
fun notify(bleDevice: BleDevice,
367367
serviceUUID: String,
368368
notifyUUID: String,
369+
timeoutMillis: Long? = bleOptions?.operateMillisTimeOut,
369370
bleDescriptorGetType: BleDescriptorGetType = BleDescriptorGetType.Default,
370371
bleNotifyCallback: BleNotifyCallback.() -> Unit) {
371372
checkInitialize()
372373
bleBaseRequest?.notify(
373374
bleDevice,
374375
serviceUUID,
375376
notifyUUID,
377+
timeoutMillis,
378+
bleDescriptorGetType,
379+
bleNotifyCallback
380+
)
381+
}
382+
383+
/**
384+
* notify
385+
*/
386+
fun notify(bleDevice: BleDevice,
387+
serviceUUID: String,
388+
notifyUUID: String,
389+
bleDescriptorGetType: BleDescriptorGetType = BleDescriptorGetType.Default,
390+
bleNotifyCallback: BleNotifyCallback.() -> Unit) {
391+
notify(
392+
bleDevice,
393+
serviceUUID,
394+
notifyUUID,
395+
null,
376396
bleDescriptorGetType,
377397
bleNotifyCallback
378398
)
@@ -454,13 +474,33 @@ class BleManager private constructor() {
454474
fun indicate(bleDevice: BleDevice,
455475
serviceUUID: String,
456476
indicateUUID: String,
477+
timeoutMillis: Long? = bleOptions?.operateMillisTimeOut,
457478
bleDescriptorGetType: BleDescriptorGetType = BleDescriptorGetType.Default,
458479
bleIndicateCallback: BleIndicateCallback.() -> Unit) {
459480
checkInitialize()
460481
bleBaseRequest?.indicate(
461482
bleDevice,
462483
serviceUUID,
463484
indicateUUID,
485+
timeoutMillis,
486+
bleDescriptorGetType,
487+
bleIndicateCallback
488+
)
489+
}
490+
491+
/**
492+
* indicate
493+
*/
494+
fun indicate(bleDevice: BleDevice,
495+
serviceUUID: String,
496+
indicateUUID: String,
497+
bleDescriptorGetType: BleDescriptorGetType = BleDescriptorGetType.Default,
498+
bleIndicateCallback: BleIndicateCallback.() -> Unit) {
499+
indicate(
500+
bleDevice,
501+
serviceUUID,
502+
indicateUUID,
503+
null,
464504
bleDescriptorGetType,
465505
bleIndicateCallback
466506
)

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

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,13 +14,14 @@ import com.bhm.ble.data.Constants.DEFAULT_CONNECT_RETRY_COUNT
1414
import com.bhm.ble.data.Constants.DEFAULT_CONNECT_RETRY_INTERVAL
1515
import com.bhm.ble.data.Constants.DEFAULT_MAX_CONNECT_NUM
1616
import com.bhm.ble.data.Constants.DEFAULT_MTU
17+
import com.bhm.ble.data.Constants.DEFAULT_OPERATE_INTERVAL
1718
import com.bhm.ble.data.Constants.DEFAULT_OPERATE_MILLIS_TIMEOUT
1819
import com.bhm.ble.data.Constants.DEFAULT_SCAN_MILLIS_TIMEOUT
1920
import com.bhm.ble.data.Constants.DEFAULT_SCAN_RETRY_COUNT
2021
import com.bhm.ble.data.Constants.DEFAULT_SCAN_RETRY_INTERVAL
21-
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.SCAN_NEED_CHECK_GPS
2425
import com.bhm.ble.data.Constants.STOP_SCAN_WHEN_START_CONNECT
2526

2627

@@ -70,6 +71,8 @@ class BleOptions private constructor(builder: Builder) {
7071

7172
var stopScanWhenStartConnect = builder.stopScanWhenStartConnect
7273

74+
var needCheckGps = builder.needCheckGps
75+
7376
companion object {
7477

7578
@JvmStatic
@@ -119,6 +122,8 @@ class BleOptions private constructor(builder: Builder) {
119122

120123
internal var stopScanWhenStartConnect = STOP_SCAN_WHEN_START_CONNECT
121124

125+
internal var needCheckGps = SCAN_NEED_CHECK_GPS
126+
122127
/**
123128
* 设置扫描过滤规则:只查询对应ServiceUuid的设备
124129
*/
@@ -283,6 +288,14 @@ class BleOptions private constructor(builder: Builder) {
283288
this.stopScanWhenStartConnect = stopScanWhenStartConnect
284289
}
285290

291+
/**
292+
* 设置是否需要打开GPS,默认为[SCAN_NEED_CHECK_GPS]
293+
* 有些设备不具备GPS模块,如果需要打开或关闭GPS,请调用该方法设置
294+
*/
295+
fun setNeedCheckGps(needCheckGps: Boolean) = apply {
296+
this.needCheckGps = needCheckGps
297+
}
298+
286299
fun build(): BleOptions {
287300
return BleOptions(this)
288301
}

0 commit comments

Comments
 (0)