繁体   English   中英

为什么 android.bluetooth.BluetoothAdapter#listenUsingL2capOn(int) 无法访问?

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

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

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

  • Java 级别的 public:这由public关键字控制。
  • Android 级别的公共:这由@hide注释控制。 如果一个方法在其 JavaDoc 中没有@hide注释,则它是 Android 级别的公共方法。

如果一个方法是 Java 级别的 public,而不是 Android 级别的 public,这意味着它只能在 Android 框架代码中使用,而不能在应用程序代码中使用。 This is needed to keep the Android API as small as possible: When Android developers add a helper method that is useful in many places within the Android framework code, they would want this method to be Java-level public, so that it can be used由 Android 框架代码中的其他类。 但是,Android 开发人员可能不希望应用程序代码使用此辅助方法,因为如果他们以后重新编写代码并且不再需要辅助方法,删除该方法会破坏使用它的应用程序。 不公开 Android 级别的方法为 Android 开发人员提供了更多的自由,以便以后更改/删除该方法。

例如,考虑您提供的方法: listenUsingL2capOn具有@hide注释,如此处所示 因此,它不被认为是Android级别的公开。 您也可以从BluetoothAdapter的 API 文档中看到这一点,该文档没有列出非 Android 级别公共的方法( 链接)。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM