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;
}
}