Falha na exceção de descoberta de serviço usando Bluetooth no Android
Atualmente, estou trabalhando em um aplicativo Android que se conecta a um instrumento via Bluetooth e precisa escrever comandos de sequência e receber respostas de sequência novamente. Atualmente, tenho a conexão / leitura / gravação funcionando para TCP / IP por Wi-Fi e agora tentando implementar o Bluetooth. Mas estou enfrentando alguns obstáculos. Eu tenho pesquisado na web tentando encontrar exemplos de algo semelhante e não tive sorte. Estou usando o exemplo de recurso para desenvolvedor do Android: Bluetooth Chat como meu principal ponto de referência.
Meu código atual parece funcionar .. Em seguida, ele lança uma exceção Falha na descoberta de serviço no ponto da conexão. Estou usando oDeviceListActivity
classe para fazer a descoberta e a seleção do dispositivo ao qual quero me conectar. Ele retorna anActivityResult e, em seguida, minha classe Bluetooth espera que ele lide com isso e depois se conecta a ele. O código abaixo é quase idêntico ao Bluetooth Chat App.
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 é a minha função de conexão:
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;
}
}
Felizmente, tudo o que estou fazendo de errado é simples, mas temo que nunca seja tão fácil. Esta é a primeira vez que desenvolvo um Bluetooth e talvez esteja fazendo algo descaradamente errado ... Mas não sei por que recebo a exceção de falha na descoberta de serviços.
Você pode emparelhar / encontrar o dispositivo o tempo todo manualmente no telefone ... Requer uma senha, mas não acho que esse seja o problema que estou tendo.