Подтвердить что ты не робот

Как создать Insecure RFCOMM Socket в Android?

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

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

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

4b9b3361

Ответ 1

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

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

В нижней строке, если вы хотите гарантированную универсальную совместимость с вашей реализацией Bluetooth, вам нужно будет настроить приложение 2.3.3 (API Level 10). Если публичный API теперь открыт для небезопасного RFCOMM, трудно сказать, будет ли он более или менее вероятным изменение базовой личной реализации.

Ответ 2

Ну, большинство ответивших ответов здесь, до 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);

Вот оно!