Excepción fallida de descubrimiento de servicio usando Bluetooth en Android
Actualmente estoy trabajando en una aplicación de Android que se conecta a un instrumento a través de Bluetooth y necesito escribir comandos de cadena y recibir respuestas de cadena. Actualmente tengo la conexión / lectura / escritura trabajando para TCP / IP a través de Wi-Fi y ahora estoy tratando de implementar Bluetooth. Pero me encuentro con algunos obstáculos. He estado buscando en la web tratando de encontrar ejemplos de algo similar y no he tenido suerte. He estado usando el ejemplo de recursos para desarrolladores de Android: Bluetooth Chat como mi principal punto de referencia.
Parece que mi código actual funciona ... Luego, arroja una excepción de Error de descubrimiento de servicio en el punto de conexión. Estoy usando elDeviceListActivity
clase para hacer el descubrimiento y la selección del dispositivo al que me quiero conectar. Devuelve un resultado de actividad y luego mi clase de Bluetooth espera a que maneje eso y luego se conecta a él. El siguiente código es casi idéntico a la aplicación Bluetooth Chat.
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if(!m_BluetoothAdapter.isEnabled())
{
m_BluetoothAdapter.enable();
}
switch (requestCode) {
case REQUEST_CONNECT_DEVICE:
// When DeviceListActivity returns with a device to connect
if (resultCode == Activity.RESULT_OK) {
// Get the device MAC address
String address = data.getExtras()
.getString(DeviceListActivity.EXTRA_DEVICE_ADDRESS);
// Get the BLuetoothDevice object
BluetoothDevice device = m_BluetoothAdapter.getRemoteDevice(address);
// Attempt to connect to the device
connect(device);
}
break;
case REQUEST_ENABLE_BT:
// When the request to enable Bluetooth returns
if (resultCode == Activity.RESULT_OK) {
// Bluetooth is now enabled, so set up a chat session
}
else {
// User did not enable Bluetooth or an error occured
Toast.makeText(this, "Bluetooth not enabled", Toast.LENGTH_SHORT).show();
finish();
}
}
}
Esta es mi función de conexión:
private static final UUID MY_UUID = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");
private void connect(BluetoothDevice device) {
m_Device = device;
BluetoothSocket tmp = null;
// Get a BluetoothSocket for a connection with the
// given BluetoothDevice
try {
tmp = device.createRfcommSocketToServiceRecord(MY_UUID);
}
catch (IOException e) {
}
m_Socket = tmp;
m_BluetoothAdapter.cancelDiscovery();
try {
// This is a blocking call and will only return on a
// successful connection or an exception
m_Socket.connect();
}
catch (IOException e) {
try {
m_Socket.close();
}
catch (IOException e2) {
}
return;
}
}
Con suerte, lo que sea que esté haciendo mal es simple, pero me temo que nunca es tan fácil. Esta es la primera vez que hago un desarrollo de Bluetooth, y tal vez estoy haciendo algo descaradamente incorrecto ... Pero no estoy seguro de por qué recibo la excepción fallida del descubrimiento del servicio.
Puede emparejar / encontrar el dispositivo en todo momento manualmente en el teléfono ... Requiere un código de acceso, pero no creo que ese sea el problema que estoy teniendo.