我有一个应用程序在后台服务中运行连续蓝牙扫描,使用SCAN_MODE_LOW_POWER(类似于AltBeacon)。
只要该服务正在运行,我就无法使用nRF Master Controller和BLE Scanner(非常受欢迎的应用)等不同的应用连接到我的蓝牙外设。当我关闭服务然后在智能手机上停止并启动蓝牙时,连接成功。
我不知道这些应用程序是使用新的Api(21级的BluetoothLeScanner)还是旧的。无论如何,一个应用程序能够阻止其他应用程序连接到外围设备是没有意义的(当然,除非应用程序并行连接到设备可以支持的最大数量的外围设备 - 但事实并非如此) )。
任何人都能解释一下吗?你之前发生过这件事吗?这是一个已知的错误?使用新Api的应用程序和仍使用旧Api的应用程序之间是否会发生冲突?
我在Nexus 5和三星Galaxy S5上测试了这一点 - 两者都安装了Android 6.0。
---编辑---
我使用最新的SDK开发了一个简单的“连接应用”,包括:
compile 'com.android.support:appcompat-v7:23.1.1'
compile 'com.android.support:support-v13:23.1.1'
(在build.gradle中)
<uses-sdk
android:minSdkVersion="21"
android:targetSdkVersion="23" />
...
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
(在清单中)
以及Android 6.0所需的所有Requesting Permissions at Run Time代码。 我仍然遇到同样的问题 - 只要其他扫描服务正在运行(由不同的应用程序!),“连接应用程序”无法连接 - 调用BluetoothGattCallback.onConnectionStateChange状态为133并且状态为STATE_DISCONNECTED。
在我的第一个应用程序的后台服务中可能有一些我应该修复的东西,并避免连续扫描,以便其他应用程序可以连接到外围设备(我应该更新它的SDK)。你知道是否有一种标准的方法来实现“信标监控”并仍然避免这些冲突? AltBeacon对此有何看法?
---编辑---
即使将这两个应用更新到SDK 23.1.1,也会出现同样的问题。 一个“扫描”应用程序可防止所有其他应用程序无法连接。实施“信标监控”的正确方法是什么?定期扫描并希望您不要与尝试连接的其他应用发生冲突?这真是太丑了......