buhuiming / blecore Goto Github PK
View Code? Open in Web Editor NEWAndroid蓝牙低功耗(BLE)快速开发框架
Android蓝牙低功耗(BLE)快速开发框架
java.lang.NullPointerException
at com.bhm.ble.request.base.BleRequestImp$startScanAndConnect$1.invokeSuspend(BleRequestImp.kt:168)
at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:106)
at android.os.Handler.handleCallback(Handler.java:942)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loopOnce(Looper.java:210)
at android.os.Looper.loop(Looper.java:299)
at android.app.ActivityThread.main(ActivityThread.java:8261)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:559)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:954)
Suppressed: kotlinx.coroutines.internal.DiagnosticCoroutineContextException: [StandaloneCoroutine{Cancelling}@bdbbac5, Dispatchers.Main]
第一次搞安卓和蓝牙
要实现一个手机对手机的数据传输
用默认设置捣鼓了半天发现好像没有服务端相关的内容
大佬遇到一个问题:
发送一段数据,日志线上发送成功,数据也是完整,但是接收设备收到的只是一部分,这是什么原因?
mtu设置为512
这是我发送的日志:
2023-08-04 11:16:41.237 30773-30773 FrViewModel com.bhm.ble I #######----> data is: 73 73 69 64 3a 61 61 73 73 64 64 66 67 71 77 65 65 72 74 79 69 6f 6f 6f 69 75 79 74 72 72 72 64
2023-08-04 11:16:41.238 30773-30773 FrViewModel com.bhm.ble I #######----> 509==mtu==512
2023-08-04 11:16:41.243 30773-30773 BleTaskQueue com.bhm.ble I #######----> (共享队列) 当前任务数量:0, 添加任务:com.bhm.ble.control.BleTask@5fa37d3
2023-08-04 11:16:41.350 30773-31045 BleTaskQueue com.bhm.ble I #######----> (共享队列) 开始执行任务:com.bhm.ble.control.BleTask@5fa37d3
2023-08-04 11:16:41.350 30773-31045 BleWriteRequest com.bhm.ble I #######----> 1005:16962447-c623-61ba-d94b-4d1e43535349(1691119001238)(1) - > 开始写第1包数据
2023-08-04 11:16:41.358 30773-30799 BleWriteRequest com.bhm.ble D #######----> 1005:16962447-c623-61ba-d94b-4d1e43535349(1691119001238)(1) -> 第1包数据写成功:73 73 69 64 3a 61 61 73 73 64 64 66 67 71 77 65 65 72 74 79 69 6f 6f 6f 69 75 79 74 72 72 72 64
但是设备端收到只有:ssid:aassddfg
用其他工具发送,设备接收数据是完整正常的
不会kotlin,目前处于小白阶段,不知道java能不能用
你的模板不适合我
问题描述(出现的环境,demo是否存在)【必填】
框架文档是否提及了该问题【必答】
是否已经查阅框架文档但还未能解决的【必答】
issue 列表中是否有人曾提过类似的问题【必答】
是否已经搜索过了 issue 列表但还未能解决的【必答】
Google piexl 7a 设备,Android14系统
设置MTU=23 设备可以正常接收到 拦截抓取的日志也是正常 设置大于23的数字就不行,
默认读取到设备的MTU是247 设置成247之后,写入是成功,
返回的是true 但是设备那边用串口抓包抓到的数据都是空格换行了,
我们需要用BLE发送几kb 的数据 导致无法正常接收,发送几个字节的数据,
一共15包数据,每一包数据写入的都是成功 是否完成也是成功 其他Android设备 Android 10 Android11 Android 12 Android13 都没有出现这个问题
设备可以正常接收到,想请教下大佬,能否帮忙调试一下 多谢
aused by: java.lang.RuntimeException: Parcel android.os.Parcel@ff2c20f: Unmarshalling unknown type code 7209071 at offset 304
at android.os.Parcel.readValue(Parcel.java:2763)
at android.os.Parcel.readArrayMapInternal(Parcel.java:3053)
at android.os.BaseBundle.initializeFromParcelLocked(BaseBundle.java:288)
at android.os.BaseBundle.unparcel(BaseBundle.java:232)
at android.os.Bundle.getParcelable(Bundle.java:940)
at android.content.Intent.getParcelableExtra(Intent.java:7542)
at com.bhm.demo.ui.DetailOperateActivity.initData(DetailOperateActivity.kt:62)
at com.bhm.demo.BaseActivity.onCreate(BaseActivity.kt:75)
at android.app.Activity.performCreate(Activity.java:7317)
at android.app.Activity.performCreate(Activity.java:7308)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1272)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3128)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3299)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:114)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:74)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1988)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:242)
at android.app.ActivityThread.main(ActivityThread.java:7240)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:502)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:906)
是否可以增加一个包发送前的hook来处理每一个包的数据结构?
参数可以是发送的包整id和第几个分包
这样更方便实现分包协议
2024-01-11 19:21:58.949 16315-16433 BleLogger com.bhm.ble E #######----> 49535343-6daa-4d02-abf6-19569aca69fe -> 读特征值数据失败,超时
2024-01-11 19:28:25.190 16947-17033 BleLogger com.bhm.ble E #######----> 00002a00-0000-1000-8000-00805f9b34fb -> 读特征值数据失败,超时
2024-01-11 19:28:42.712 16947-17031 BleLogger com.bhm.ble E #######----> 00002a01-0000-1000-8000-00805f9b34fb -> 读特征值数据失败,超时
2024-01-11 19:29:23.954 16947-17031 BleLogger com.bhm.ble E #######----> 49535343-aca3-481c-91ec-d85e28a60318 -> 读特征值数据失败,超时
ANR in com.bhm.ble (com.bhm.ble/com.bhm.demo.ui.DetailOperateActivity)
PID: 32329
Reason: Input dispatching timed out (5b0d78d com.bhm.ble/com.bhm.demo.ui.DetailOperateActivity (server) is not responding. Waited 5002ms for MotionEvent)
Parent: com.bhm.ble/com.bhm.demo.ui.DetailOperateActivity
Frozen: false
Load: 0.0 / 0.0 / 0.0
----- Output from /proc/pressure/memory -----
some avg10=0.00 avg60=0.00 avg300=0.00 total=3050098580
full avg10=0.00 avg60=0.00 avg300=0.00 total=1236302433
----- End output from /proc/pressure/memory -----
CPU usage from 0ms to 6611ms later (2023-09-18 18:18:29.225 to 2023-09-18 18:18:35.836):
30% 1382/system_server: 13% user + 16% kernel / faults: 10811 minor
4.2% 1550/media.codec: 2.9% user + 1.3% kernel / faults: 32066 minor
5.9% 1128/surfaceflinger: 3.6% user + 2.2% kernel / faults: 988 minor
5.1% 17486/adbd: 0.6% user + 4.5% kernel / faults: 10 minor
4.5% 11643/com.jhyan.yan:widgetProvider: 1% user + 3.4% kernel / faults: 142 minor
4% 1037/[email protected]: 2.2% user + 1.8% kernel / faults: 352 minor
3.3% 669/kworker/u24:7-memlat_wq: 0% user + 3.3% kernel
3.1% 3539/com.android.phone: 1.9% user + 1.2% kernel / faults: 1223 minor
2.7% 626/logd: 0.3% user + 2.4% kernel
2.2% 668/kworker/u24:6-events_unbound: 0% user + 2.2% kernel
0.3% 1490/media.extractor: 0.1% user + 0.1% kernel / faults: 3681 minor
2.2% 12235/com.sohu.inputmethod.sogouoem: 1.6% user + 0.6% kernel / faults: 1162 minor
2.2% 32213/com.android.systemui: 1.9% user + 0.3% kernel / faults: 110 minor
2.1% 664/kworker/u24:1+memlat_wq: 0% user + 2.1% kernel
2.1% 24292/kworker/u24:2-events_unbound: 0% user + 2.1% kernel
2.1% 26537/kworker/u25:3-fsverity_read_queue: 0% user + 2.1% kernel
0% 1014/[email protected]_64: 0% user + 0% kernel / faults: 30 minor
1.8% 32329/com.bhm.ble: 1.2% user + 0.6% kernel / faults: 1727 minor
0.2% 25222/com.android.bluetooth: 0% user + 0.2% kernel / faults: 261 minor
1% 17645/process-tracker: 0.1% user + 0.9% kernel
0.9% 11/rcu_preempt: 0% user + 0.9% kernel
0.9% 470/usbtemp_kthread: 0% user + 0.9% kernel
0% 5572/com.qualcomm.qti.workloadclassifier: 0% user + 0% kernel / faults: 395 minor
0.9% 21604/process-tracker: 0% user + 0.9% kernel / faults: 2 minor
0% 722/tombstoned: 0% user + 0% kernel
0.7% 4896/irq/52-90b6300.: 0% user + 0.7% kernel
0.7% 17711/com.quark.browser:channel: 0.6% user + 0.1% kernel / faults: 391 minor
0.7% 24889/kworker/u25:1-dwc_wq: 0% user + 0.7% kernel
0.6% 293/kgsl_worker_thr: 0% user + 0.6% kernel
0.6% 983/qrtr_rx: 0% user + 0.6% kernel
0.6% 1050/vendor.qti.hardware.display.composer-service: 0% user + 0.6% kernel / faults: 251 minor
0.6% 17638/logcat: 0.1% user + 0.4% kernel
0.6% 19844/kworker/u24:3-events_unbound: 0% user + 0.6% kernel
0.6% 21601/logcat: 0.1% user + 0.4% kernel
0.6% 31866/logcat: 0.1% user + 0.4% kernel
0.4% 14/rcuop/0: 0% user + 0.4% kernel
0.4% 37/rcuop/2: 0% user + 0.4% kernel
0% 862/zygote64: 0% user + 0% kernel / faults: 22 minor
0.4% 2084/com.taobao.taobao:channel: 0.3% user + 0.1% kernel / faults: 1 minor
0.4% 4584/com.tencent.mm: 0.1% user + 0.3% kernel / faults: 19 minor
0.4% 4898/irq/53-90cd000.: 0% user + 0.4% kernel
0.4% 17459/com.quark.browser:push: 0.3% user + 0.1% kernel / faults: 93 minor
0% 1/init: 0% user + 0% kernel
0% 12/rcu_sched: 0% user + 0% kernel
0.3% 73/rcuop/6: 0% user + 0.3% kernel
0% 863/zygote: 0% user + 0% kernel / faults: 12 minor
0% 1010/android.hardware.audio.service: 0% user + 0% kernel / faults: 78 minor
0.3% 1043/[email protected]: 0.1% user + 0.1% kernel / faults: 30 minor
0.3% 1049/vendor.qti.hardware.display.allocator-service: 0.1% user + 0.1% kernel / faults: 264 minor
0.3% 1123/audioserver: 0.1% user + 0.1% kernel / faults: 72 minor
0% 1473/cameraserver: 0% user + 0% kernel / faults: 58 minor
0% 1501/mediaserver: 0% user + 0% kernel / faults: 76 minor
viewBinding.btnSend.setOnClickListener {
if (ViewUtil.isInvalidClick(it)) {
return@setOnClickListener
}
val content = viewBinding.etContent.text.toString()
if (content.isEmpty()) {
Toast.makeText(applicationContext, "请输入数据", Toast.LENGTH_SHORT).show()
return@setOnClickListener
}
if (currentSendNode == null) {
Toast.makeText(applicationContext, "请选择特征值写操作", Toast.LENGTH_SHORT).show()
return@setOnClickListener
}
currentSendNode?.let { node ->
lifecycleScope.launch {
withContext(Dispatchers.IO){
repeat(1000) {
viewModel.writeData(
getBleDevice(),
node,
content
)
}
}
}
}
}
如果复现不出来,可以尝试点击界面中的其他按钮
情况说明:蓝牙固件文件文件大小有1.5M左右,设置Mtu为512,读取固件文件以hex发送给设备。间隔1000ms给writeData传ByteArray的长度为2048的数据给设备。我看日志,您做了分包,每次startWriteJob的差不多100ms,这样发送完要10分钟,请问如何修改才能更快?
请问多连接的通知回调怎么处理呢,回调函数里面有没device,只有数据。
您好~
我想问下这个库支持多连接嘛?我 看了下库代码好像没发现,请问这个在需求计划表之内了吗?
看到大佬这个库用上了 kotlin 以及 jetpack 套件很是惊喜!!! 感谢作者的努力~
想请教下扫描蓝牙权限 的问题 扫描蓝牙是否一定要开精确位置权限 用户选择了大致位置是否就无法扫描到蓝牙设备 TargetSDK 为33 测试机为Android 14 的三星 因为蓝牙权限被很多用户投诉
因为项目的minSdk=21,框架的minSdk=24,编译不通过,能否把框架的minSdk设为21?
谢谢!
同一个手机,同一个蓝牙设备,用fastble和本库连接,测试多次均发现连接、读写。通知全流程都会慢5~6s,还有优化的空间吗
华为手机,使用测试APP notify提示SetCharacteristicNotificationFail,用fastBle notify成功,不知道为啥!
作者你好:
在使用过程中,实现一秒查询一次数据,返回数据量2000个字节左右,如果长时间进行数据交互会偶发性出现蓝牙Notifiy无法收到数据的情况,但是发送数据时没有问题的,当这个时候断开蓝牙连接会出现ANR报错。
Execution failed for task ':app:mergeExtDexDebug'.
Could not resolve all files for configuration ':app:debugRuntimeClasspath'.
Failed to transform BleCore-1.5.3.aar (com.github.buhuiming:BleCore:1.5.3) to match attributes {artifactType=android-dex, asm-transformed-variant=NONE, dexing-enable-desugaring=true, dexing-is-debuggable=true, dexing-min-sdk=24, org.gradle.category=library, org.gradle.dependency.bundling=external, org.gradle.libraryelements=aar, org.gradle.status=release, org.gradle.usage=java-runtime}.
> Execution failed for DexingNoClasspathTransform: /Users/johnvi/.gradle/caches/transforms-3/05df512089c51dbd2ced0e2d27d3c06d/transformed/jetified-BleCore-1.5.3-runtime.jar.
> Error while dexing.
One or more classes has class file version >= 56 which is not officially supported.
com.android.tools.r8.internal.nc: Sealed classes are not supported as program classes
你好, 我对蓝牙这块开发不是很懂,我想问一下app是否能同时连接两个或多个设备, 比如血糖仪设备, 同时连接两个以上
会收到信号 Sending signal. PID: 20773 SIG: 9 当前页面被关闭
大佬 我保存了 mac 列表 ,循环连设备是通过 mac连的, 通过mac 连接 gatt 服务获取为空了
1 循环 连接设备 设备 getlist 获取读写特征值, 读特征值开启监听, 写特征值写入。 同时开启多个监听 监听就都超时了
要使用autoconnect是否需要先和裝置配對
以及 非主動斷開自動連接的非主動 是建立在什麼樣的情況
我可不可以理解无论是isForceConnect 还是AutoConnect还是无法在蓝牙断开后进行自动重连,
我在测试的时候连接成功后,设备蓝牙断电后,间隔2S后马上开启,DEMO不会进行重连处理,
还是需要自己去在监听地方处理重连逻辑
/*
问题描述(出现的环境,demo是否存在)【必填】
直接跑的demo,连公司设备,connect,notify没问题,read,就超时;
https://github.com/wandersnail/easyble-x 这个sdk,链接公司设备后,read没有问题,你可以参考一下read部分代码;
框架文档是否提及了该问题【必答】
无
是否已经查阅框架文档但还未能解决的【必答】
看文档了,用的是demo;
issue 列表中是否有人曾提过类似的问题【必答】
无;
是否已经搜索过了 issue 列表但还未能解决的【必答】
yes;
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.