为什么 android.bluetooth.BluetoothAdapter#listenUsingL2capOn(int) 不可访问?

Why is android.bluetooth.BluetoothAdapter#listenUsingL2capOn(int) not accessible?

这可能是一个新手问题,因为我对 Android 的经验有限,但由于某种原因我无法访问方法 android.bluetooth.BluetoothAdapter#listenUsingL2capOn(int)。它似乎是 public,因此不确定为什么该符号未被识别。另外请注意,如何在 android 上打开 L2CAP 蓝牙套接字服务器?我发现只有一个问题与此有点相关 - 。任何帮助将不胜感激。

在Android中我们有两个不同级别的public方法:

  • Java级public:这个由public关键字控制。
  • Android-level public:这个由@hide注解控制。如果方法在其 JavaDoc 中没有 @hide 注释,则该方法是 Android 级 public。

如果一个方法是Java级public,而不是Android级public,这意味着它只能在Android内使用] 框架代码,而不是应用程序代码。这是保持 Android API 尽可能小所必需的:当 Android 开发人员添加一个在 Android 框架代码中的许多地方都很有用的辅助方法时,他们会希望此方法是 Java 级 public,以便它可以被 Android 框架代码中的其他 类 使用。但是,Android 开发人员可能不希望应用程序代码使用此辅助方法,因为如果他们以后重新编写代码并且不再需要辅助方法,则删除该方法会破坏使用它的应用程序。不使方法 Android 级 public 给 Android 开发人员更多的自由 change/remove 稍后的方法。

例如考虑您提供的方法:listenUsingL2capOn@hide 注释,可以看出 here. Therefore, it is not considered Android-level public. You can also see this from the API documentation of BluetoothAdapter, which does not list the methods that are not Android-level public (link).

关于你的附带问题:我不熟悉如何在 Android 中创建 L2CAP 蓝牙套接字服务器,但你链接的答案看起来很有希望。例如。使用 BluetoothDevice#createL2capChannel and BluetoothAdapter#listenUsingL2capChannel。请注意后者的名称与 listenUsingL2capOn.

的形式不同