这可能是一个新手问题,因为我对 Android 的经验有限,但由于某种原因我无法访问该方法android.bluetooth.BluetoothAdapter#listenUsingL2capOn(int)
。它似乎是公开的,因此不确定为什么该符号未被识别。顺便说一句,如何在 android 上打开 L2CAP 蓝牙套接字服务器?我发现只有一个问题与此有关 -如何在 Android 中实例化 L2Cap 套接字?. 任何帮助,将不胜感激。
1 回答
在 Android 中,我们有两种不同级别的公共方法:
- Java 级别的 public:这是由
public
关键字控制的。 - Android 级别的 public:这是由
@hide
注解控制的。如果方法在其 JavaDoc 中没有@hide
注释,则该方法是 Android 级别的公共方法。
如果一个方法是 Java 级别的 public,而不是 Android 级别的 public,这意味着它只能在 Android 框架代码中使用,而不能在应用程序代码中使用。这是为了使 Android API 尽可能小:当 Android 开发人员在 Android 框架代码中的许多地方添加一个有用的辅助方法时,他们会希望这个方法是 Java 级别的公共,以便可以使用它由 Android 框架代码中的其他类。但是,Android 开发人员可能不希望应用程序代码使用此辅助方法,因为如果他们以后重新编写代码并且不再需要辅助方法,删除该方法会破坏使用它的应用程序。不公开 Android 级别的方法使 Android 开发人员在以后可以更自由地更改/删除该方法。
考虑例如您给出的方法:listenUsingL2capOn
有@hide
注释,如可以在这里看到的。因此,它不被认为是Android级别的公开。您也可以从 的 API 文档中看到这一点,该文档BluetoothAdapter
没有列出非 Android 级别公开的方法(链接)。
关于您的附带问题:我不熟悉如何在 Android 中创建 L2CAP 蓝牙套接字服务器,但您链接的答案看起来很有希望。例如使用BluetoothDevice#createL2capChannel
和BluetoothAdapter#listenUsingL2capChannel
。注意后者的名称是不同的形式listenUsingL2capOn
。