Почему android.bluetooth.BluetoothAdapter#listenUsingL2capOn(int) недоступен?
Это может быть вопрос новичка, поскольку мой опыт работы с Android ограничен, но по какой-то причине я не могу получить доступ к методу android.bluetooth.BluetoothAdapter#listenUsingL2capOn(int)
. Кажется, что это публично и, следовательно, не совсем понятно, почему символ не распознается. И на стороне примечания, как открыть сервер сокета Bluetooth L2CAP на Android? Я нашел только один вопрос, отчасти связанный с этим: как создать экземпляр сокета L2Cap в Android?. Любая помощь будет оценена.
1 ответ
В Android есть два разных уровня общедоступных методов:
- Общедоступный уровень Java: это контролируется
public
ключевое слово. - Общедоступный уровень Android: это контролируется
@hide
аннотация. Метод является общедоступным на уровне Android, если у него нет@hide
аннотация в своем JavaDoc.
Если метод является общедоступным на уровне Java, но не на уровне Android, это означает, что он может использоваться только в коде платформы Android, но не в коде приложения. Это необходимо для того, чтобы API Android был как можно меньше: когда разработчики Android добавляют вспомогательный метод, который полезен во многих местах кода платформы Android, они хотят, чтобы этот метод был общедоступным на уровне Java, чтобы его можно было использовать. другими классами в коде платформы Android. Однако разработчики Android могут не захотеть, чтобы этот вспомогательный метод использовался в коде приложения, потому что тогда, если они позже переработают код, и вспомогательный метод больше не понадобится, удаление метода приведет к поломке приложений, использующих его. Отсутствие публикации метода на уровне Android дает разработчикам Android больше свободы изменять / удалять метод позже.
Рассматривая, например, метод, который вы дали: listenUsingL2capOn
имеет @hide
аннотацию, как можно увидеть здесь. Следовательно, он не считается общедоступным на уровне Android. Вы также можете увидеть это из документации APIBluetoothAdapter
, в котором не перечислены методы, не являющиеся общедоступными на уровне Android (ссылка).
Относительно вашего побочного вопроса: я не знаком с тем, как создать сервер сокета L2CAP bluetooth в Android, но ответ, который вы связали, выглядит многообещающим. Например, используя BluetoothDevice#createL2capChannel
а также BluetoothAdapter#listenUsingL2capChannel
. Обратите внимание, название последнего отличается от формыlistenUsingL2capOn
.