Как создать небезопасный сокет RFCOMM в Android? - PullRequest
18 голосов
/ 15 марта 2011

Я смотрю на способ небезопасного подключения через сокет rfcomm.Я смог найти путь, упомянутый ниже

Method m = device.getClass().getMethod("createInsecureRfcommSocket", new Class[] {int.class});
tmp = (BluetoothSocket) m.invoke(device, 1);

В настоящее время я делаю то, что хочу.Даже документация по здесь говорит о том, что нам нужно использовать createInsecureRfcommSocketToServiceRecord для небезопасных соединений.Но нет такого метода.Единственный способ, который я обнаружил, - это использовать отражение, как показано выше.И даже в том методе, который передается в createInsecureRfcommSocket, а не в createInsecureRfcommSocketToServiceRecord.Я просто хотел узнать, насколько надежен этот способ.Если я упоминаю createInsecureRfcommSocketToServiceRecord в методе, соединение никогда не происходит.

Ответы [ 3 ]

29 голосов
/ 16 марта 2011

createInsecureRfcommSocketToServiceRecord() был включен, начиная с Android API Level 10, поэтому документация будет рекомендовать вам использовать его, так как документы всегда следуют последней версии API.Если вы нацеливаетесь на API ниже 10 (он же 2.3.3 или Gingerbread), тогда этот метод недоступен вам публично.

Метод, который вы вызываете с помощью отражения createInsecureRfcommSocket(), является закрытым методом внутри BluetoothDevice, который присутствует примерно с Android 2.0.Проблема с вызовом скрытых методов заключается в том, что они не гарантированно будут присутствовать на всех устройствах или в будущем ... так что вы играете немного.Я предполагаю, что ваш метод, вероятно, будет работать большую часть времени на большинстве устройств 2.0+, поскольку службы, необходимые для реализации его общедоступного двоюродного брата createRfcommSocketToServiceRecord(), очень похожи на уровне стека.Для гарантированной универсальной совместимости с вашей реализацией Bluetooth, вам придется настроить 2.3.3 (API Level 10) на ваше приложение.С открытым API, теперь доступным для небезопасного RFCOMM, трудно сказать, является ли более или менее вероятным изменение базовой частной реализации.

5 голосов
/ 28 декабря 2011

Ну, большинство ответов здесь, до 30 марта 2011 года, в этом посте.

При поиске решения аналогичной проблемы в своем приложении я нашел этот блог, написанный 30 марта.

Это поможет всем тем, кто еще ищет решение этой проблемы на SO

http://mobisocial.stanford.edu/news/2011/03/bluetooth-reflection-and-legacy-nfc/

Решение стало очень простым. Просто включите InsecureBluetooth.java в свой проект и измените 2 строки в BluetoothChatService.java.

tmp = InsecureBluetooth.listenUsingRfcommWithServiceRecord(mAdapter, NAME, MY_UUID, true);

и

tmp   = InsecureBluetooth.createRfcommSocketToServiceRecord(device, MY_UUID, true);

Вот так!

0 голосов
/ 16 марта 2011
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...