1
resposta

Erro ao conectar ao Bluetooth

Boa noite, estou tendo um problema ao conectar a um leitor bluetooth. Que esta gerando a seguinte exception:

"java.io.IOException: read failed, socket might closed or timeout, read ret: -1"

Segue o código para visualização.

public class MainActivity extends AppCompatActivity {

    public static int ENABLE_BLUETOOTH = 1;

    private ListView lista;
    private Button botao;
    private TextView texto;
    private BluetoothAdapter mBluetoothAdapter;
    private BluetoothSocket mSocket;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        iniciarComponentes();
        DispositivoDao dao = new DispositivoDao();
        statusBluetooth();
        ligarBluetooth();
        List<Dispositivo> dispositivos = dispositivosPareados(mBluetoothAdapter);
        lista.setAdapter(new DispositivoAdapter(this, dispositivos));

        lista.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                final Dispositivo disp = (Dispositivo) parent.getItemAtPosition(position);
                showMessage(disp.getNome());
                new Thread(new Runnable() {
                   @Override
                   public void run() {
                       try {
                           BluetoothDevice pareado = mBluetoothAdapter.getRemoteDevice(disp.getMac());
                           mSocket = pareado.createRfcommSocketToServiceRecord(UUID.fromString("00001101-0000-1000-8000-00805F9B34FB"));
                           mSocket.connect();
                           showMessage("Conectado com sucesso...");
                       } catch (IOException e) {
                           try {
                               mSocket.close();
                           } catch (IOException closeException) { }
                           showMessage("Erro: " + e.getMessage());
                           e.printStackTrace();
                       }
                   }
               }).start();
            }
        });

    }

    private void statusBluetooth(){
        mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
        if (mBluetoothAdapter == null) {
            texto.setText("Que pena! Hardware Bluetooth não está funcionando :(");
        } else {
            texto.setText("Ótimo! Hardware Bluetooth está funcionando :)");
        }
    }

    private void ligarBluetooth() {
        if(!mBluetoothAdapter.isEnabled()) {
            Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
            startActivityForResult(enableBtIntent, ENABLE_BLUETOOTH);
            texto.setText("Solicitando ativação do Bluetooth...");
        } else {
            texto.setText("Bluetooth já ativado :)");
        }
    }

    private void iniciarComponentes(){
        lista = (ListView) findViewById(R.id.lista);
        botao = (Button) findViewById(R.id.botao);
        texto = (TextView) findViewById(R.id.texto);
    }

    private void showMessage(final String msg){
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                Toast.makeText(MainActivity.this, msg, Toast.LENGTH_SHORT).show();
            }
        });
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if(requestCode == ENABLE_BLUETOOTH){
            if (resultCode == RESULT_OK){
                texto.setText("Bluetooth ativado :D");
            } else {
                texto.setText("Bluetooth não ativado :(");
            }
        }
    }

    public List<Dispositivo> dispositivosPareados(BluetoothAdapter mBluetoothAdapter){
        List<Dispositivo> dispositivos = new ArrayList<>();
        Set<BluetoothDevice> pareados = mBluetoothAdapter.getBondedDevices();
        if (pareados.size() > 0){
            for (BluetoothDevice device : pareados){
                dispositivos.add(new Dispositivo(device.getName(), device.getAddress()));
            }
        }
        return dispositivos;
    }

}
1 resposta

Oi Ueder, tudo bem?

Posta a stacktrace completa para vermos exatamente em qual classe / método que este erro está ocorrendo?

Abraço!