Кто-нибудь знает, как создать небезопасное соединение RFCOMM между двумя устройствами Android на уровне API 2.3.3 при использовании произвольно объявленного имени службы? (неслучайное или изменение имени службы, просто имя службы что я сам определяю)
Подробнее
Я пытаюсь создать небезопасное соединение Rfcomm между двумя устройствами Android: Droid X2 и Asus Transformer. Я предполагаю, что оба этих устройства имеют функциональность на уровне Android 2.3.3, чтобы фактически получить возможность использовать небезопасный Rfcomm.
Когда я пытаюсь создать соединение Bluetooth, как описано здесь, используя общедоступный createInsecureRfcommSocketToServiceRecord() и listenUsingInsecureRfcommWithServiceRecord (SERVICE, UUID), я получаю сообщение:
java.io.IOException: Service discovery failed
at android.bluetooth.BluetoothSocket$SdpHelper.doSdp(BluetoothSocket.java:377)
at android.bluetooth.BluetoothSocket.connect(BluetoothSocket.java:201)
at com.s4d.bluenomad.DeviceConnections$ClientThread.run(DeviceConnections.java:406)
Я даже попробовал сочетание официальных и взломанных решений, изложенных здесь
Соответствующие фрагменты кода
Создание ServerThread для прослушивания подключений
Log.i(TAG, "Constructing a ServerThread");
// Use a temporary object that is later assigned to serverSocket,
// because serverSocket is final
BluetoothServerSocket tmp = null;
try {
// MY_UUID is the app UUID string, also used by the client code
tmp = btAdapter.listenUsingInsecureRfcommWithServiceRecord(SERVICE_NAME, SERVICE_UUID);
Log.i(TAG,"Started listening on insecure RFCOMM channel for service requests for: " + SERVICE_NAME);
} catch (IOException e) { }
serverSocket = tmp;
ServerThread Listening for Connections
BluetoothSocket socket;
while(true)
{
try
{
socket = serverSocket.accept();
}
catch( IOException e)
{
break;
}
if( socket != null )
{
Log.i(TAG, "Received new socket connection requesting service: " + SERVICE_NAME);
}
else
{
Log.i(TAG, "Socket connection attempted, but socket received is NULL.");
}
}
Создание ClientThread для инициирования подключений
Log.i(TAG, "Constructing a ClientThread");
BluetoothSocket tmp = null;
try {
// MY_UUID is the app UUID string, also used by the server code
tmp = device.createInsecureRfcommSocketToServiceRecord(SERVICE_UUID);
Log.i(TAG,"Created client socket on insecure RFCOMM channel for service requests for: " + SERVICE_NAME);
}
catch (IOException e)
{
Log.i(TAG, "Failed to createInsecureRfcommSocket() against MAC: " + device.getAddress());
}
clientSocket = tmp;
ClientThread Подключение к серверу
try
{
clientSocket.connect();
}
catch( final IOException e)
{
DeviceConnections.this.runOnUiThread(new Runnable()
{
@Override
public void run()
{
console.append("Client unable to connect to service.");
Log.i(TAG, "Client socket unable to connect() to: " + clientSocket.getRemoteDevice().getAddress());
e.printStackTrace();
}
});
}
Я получаю вывод журнала "Не удалось подключиться к сокету клиента: [MY_MAC_ADDRESS]", после чего я получаю стек для исключения "Неудачное обнаружение службы".