0

我正在开发一个使用 Nearby Connections API 和基本 P2P 策略的应用程序。突然间,奇怪的是,我无法在我的 Pixel 3a 上使用最新的 Android 12 和 Play Services 做广告和发现设备。OnFailureListeners抛出这些异常:

  • 用于发现:8037: unknown status code: 8037
  • 广告:8038: unknown status code: 8038

事实上,在文档和源代码中找不到它们。我还检查了 Google 的“Rock Papers Scissors”官方示例,它抛出了相同的错误代码。

当然,我重新安装了应用程序并重新启动并更新了我的手机。编辑:我也恢复了出厂设置,但没有帮助。但是在我使用 Android Flash Tool 降级到最新的 Android 11 后,它又开始工作了。此外,在使用不同手机的 Android 11、10 和 9 上一切正常。

任何想法是什么导致这个问题?过去两周它工作得很好,今天停止工作。我相信它需要对源代码进行深入调查(如果我可以寻求您的帮助,那将是非常棒的 Xlythe)。

4

1 回答 1

1

一段时间后,我终于设法找到了解决方案。看起来 Nearby Connections(所有 Nearbys?)在 Android 12 上存在一个非确定性发生的严重错误(API 可以正常工作几周,然后突然将这些错误抛出几周)。

此错误与 Android 12与蓝牙相关的功能更改有关。报价:

Android 12 引入了 BLUETOOTH_SCAN、BLUETOOTH_ADVERTISE 和 BLUETOOTH_CONNECT 权限。这些权限使面向 Android 12 的应用更容易与蓝牙设备交互,尤其是对于不需要访问设备位置的应用。

换句话说,一些蓝牙权限现在是遗留的,并且有一些新的权限是使 API 工作所必需的。您需要在代码中处理这两种情况(在 Android 12 之前和之后)。

所以这里有一个从错误代码到 Manifest 权限的快速“映射器”:

  • Error code 8037发现时 - 您尚未授予以下权限BLUETOOTH_SCAN
  • Error code 8038投放广告时 - 您未授予以下权限BLUETOOTH_ADVERTISE
  • Error code 8039(这也是一个新的)虽然onEndpointFound- 你还没有授予许可BLUETOOTH_CONNECT

有关如何正确实现新权限的更多信息,请参阅文档

而且我仍在等待 Google 在下一次 Nearby API 更新中修复它,因为这是一种解决方法。在代码中添加适当的错误消息可能需要做一些工作,但如果在 Android 12 更新后仍需要其他权限,我也会进行修改。

于 2021-12-11T20:16:09.620 回答