三星 SM-A546E 蓝牙在后台出现奇怪行为

问题描述 投票:0回答:1

这不是编码问题。由于这个原因,这个问题可能会被否决。
一个简短的历史
我们有一个 BLe 设备,每 20 毫秒发布一次广告。手机(iOS 或 Android)连接到设备、发现服务、读取和写入选定的特征。
现在很长一段时间一切都运转良好。即使使用 Android 上的后台服务或 iOS 上的信标监视器刷掉应用程序,我们甚至可以在后台扫描、连接和读/写。
作为测试的一部分,我们购买了几台三星设备(*标题中提到*)来测试最新的 SDK >= 33 更改并相应更新应用程序;

有什么问题吗?
在上述设备上,如果用户打开应用程序,建立 BLe 连接,读取然后写入一切正常。 一旦用户将应用程序置于后台,甚至没有锁定屏幕,假设大约 20-30 秒,然后将应用程序返回前台写入失败。意思是,`writeCharacteristics` 返回 0 但从不响应(*应用程序期望在 1 秒内响应*)。并且在设备端没有收到任何消息。我们认为这可能是在 Android 14 上缺少权限或其他更改,但事实并非如此。在其他 Android 14 手机上进行了测试,它运行得很好。用户将应用程序置于后台,锁定屏幕任意一段时间,然后就可以始终工作。
我们尝试了什么?
我们确信 BLe 连接绝对正常,Ble 设备可以看到手机并根据手机位置(或 RSSI)触发某些操作
能够弄清楚发生了什么事情,问题出在哪里?我们试图强制“断开连接”。如果写入失败或者在我们的例子中“超时”,我们会调用 `gatt.disconnect` 来断开连接。令我们惊讶的是,应用程序同时收到断开连接和连接回调,但即使应用程序在连接后发出请求,也不会收到“discoverServices”。 1 或 2 分钟后,收到另一个断开连接和连接回调,然后收到“discoverServices”,然后一切恢复正常,直到应用程序再次置于后台。

问题:
  1. 有人遇到过这种行为吗?如果是这样,你知道为什么或者触发因素是什么吗?
  2. 如果您有关于此主题的任何信息,请分享文档
  3. 如果您以前见过这个问题,您知道解决方案是什么吗?


谢谢!

bluetooth-lowenergy android-bluetooth samsung-mobile bluetooth-gatt
1个回答
0
投票

您在扫描、连接等时是否使用“位置”功能?如果是这样,请在清单中添加 ACCESS_BACKGROUND_LOCATION,并始终授予位置权限(而不是在使用应用程序时)。如果您不使用位置,请尝试在 BLUETOOTH_SCAN 权限中添加标志 (android:usesPermissionFlags="neverForLocation"),如下所示

<uses-permission android:name="android.permission.BLUETOOTH_SCAN"
                     android:usesPermissionFlags="neverForLocation" /> 
© www.soinside.com 2019 - 2024. All rights reserved.