Nearby Connections API:Android 12 无法通告和发现状态代码未知的设备(8037、8038、8039)
Nearby Connections API: Android 12 fails to advertise and discover devices with unknown status codes (8037, 8038, 8039)
我正在开发一个应用程序,它使用 Nearby Connections API 和基本的 P2P 策略。突然间,奇怪的是,我无法在我的 Pixel 3a 上使用最新的 Android 12 和 Play 服务来宣传和发现设备。 OnFailureListeners
抛出这些异常:
- 用于发现:
8037: unknown status code: 8037
- 用于广告:
8038: unknown status code: 8038
确实在 docs 和源代码中找不到它们。
我还检查了 Google 的“剪刀石头布”官方示例,它抛出相同的错误代码。
当然,我重新安装了应用程序并重新启动并更新了我的 phone。编辑:我也进行了出厂重置,但没有帮助。但是在我使用 Android Flash 工具降级到最新的 Android 11 后,它又开始工作了。此外,使用不同的 phones.
在 Android 11、10 和 9 上一切仍然正常
知道导致此问题的原因吗?它在过去两周内运行良好,今天停止工作。我认为它需要对源代码进行深入研究(Xlythe,如果我可以寻求你的帮助,那就太好了)。
过了一段时间我终于找到了解决办法。看起来 Nearby Connections(所有 Nearbys?)在 Android 12 上有一个非确定性发生的严重错误(API 可以正常工作几周然后突然会再抛出这些错误几周)。
此错误与 Android 12 的功能更改 related to Bluetooth 有关。引用:
Android 12 introduces the BLUETOOTH_SCAN, BLUETOOTH_ADVERTISE, and BLUETOOTH_CONNECT permissions. These permissions make it easier for apps that target Android 12 to interact with Bluetooth devices, especially for apps that don't require access to device location.
换句话说,一些蓝牙权限现在是遗留的,并且有一些新的权限是强制性以使API工作。并且您需要在代码中处理这两种情况(Android 12 之前和之后)。
所以这里有一个从错误代码到清单权限的快速“映射器”:
Error code 8037
发现时 - 您尚未授予权限
BLUETOOTH_SCAN
Error code 8038
正在投放广告 - 您尚未授予 BLUETOOTH_ADVERTISE
权限
Error code 8039
(这也是一个新的)而 onEndpointFound
- 您还没有授予 BLUETOOTH_CONNECT
的权限
有关如何正确实施新权限的更多信息,请参阅 documentation。
而且我仍在等待 Google 在下一个附近 API 更新中修复它,因为这是一些解决方法。向代码添加正确的错误消息可能需要做一些工作,但如果在 Android 12 的更新后仍然需要其他权限,我也会修改。
我正在开发一个应用程序,它使用 Nearby Connections API 和基本的 P2P 策略。突然间,奇怪的是,我无法在我的 Pixel 3a 上使用最新的 Android 12 和 Play 服务来宣传和发现设备。 OnFailureListeners
抛出这些异常:
- 用于发现:
8037: unknown status code: 8037
- 用于广告:
8038: unknown status code: 8038
确实在 docs 和源代码中找不到它们。 我还检查了 Google 的“剪刀石头布”官方示例,它抛出相同的错误代码。
当然,我重新安装了应用程序并重新启动并更新了我的 phone。编辑:我也进行了出厂重置,但没有帮助。但是在我使用 Android Flash 工具降级到最新的 Android 11 后,它又开始工作了。此外,使用不同的 phones.
在 Android 11、10 和 9 上一切仍然正常知道导致此问题的原因吗?它在过去两周内运行良好,今天停止工作。我认为它需要对源代码进行深入研究(Xlythe,如果我可以寻求你的帮助,那就太好了)。
过了一段时间我终于找到了解决办法。看起来 Nearby Connections(所有 Nearbys?)在 Android 12 上有一个非确定性发生的严重错误(API 可以正常工作几周然后突然会再抛出这些错误几周)。
此错误与 Android 12 的功能更改 related to Bluetooth 有关。引用:
Android 12 introduces the BLUETOOTH_SCAN, BLUETOOTH_ADVERTISE, and BLUETOOTH_CONNECT permissions. These permissions make it easier for apps that target Android 12 to interact with Bluetooth devices, especially for apps that don't require access to device location.
换句话说,一些蓝牙权限现在是遗留的,并且有一些新的权限是强制性以使API工作。并且您需要在代码中处理这两种情况(Android 12 之前和之后)。
所以这里有一个从错误代码到清单权限的快速“映射器”:
Error code 8037
发现时 - 您尚未授予权限BLUETOOTH_SCAN
Error code 8038
正在投放广告 - 您尚未授予BLUETOOTH_ADVERTISE
权限
Error code 8039
(这也是一个新的)而onEndpointFound
- 您还没有授予BLUETOOTH_CONNECT
的权限
有关如何正确实施新权限的更多信息,请参阅 documentation。
而且我仍在等待 Google 在下一个附近 API 更新中修复它,因为这是一些解决方法。向代码添加正确的错误消息可能需要做一些工作,但如果在 Android 12 的更新后仍然需要其他权限,我也会修改。