Conexión al dispositivo bluetooth pareado (BluetoothSocket) en android 2.1

Estoy intentando conectarme a un dispositivo bluetooth emparejado (baracoda d-fly lector de código de barras). Intenté el programa GetBlueDemo del mercado y éste maneja leer de su zócalo.

Escribí mi propia prueba de concepto, pero sigo recibiendo un excpetion cuando intento conectar con el dispositivo.

 08-23 14:39:28.635: DEBUG/BluetoothTest(19238): Could not connect to socket 08-23 14:39:28.635: DEBUG/BluetoothTest(19238): java.io.IOException: socket failed to connect 08-23 14:39:28.635: DEBUG/BluetoothTest(19238): at android.bluetooth.BluetoothSocket.connect(BluetoothSocket.java:255) 08-23 14:39:28.635: DEBUG/BluetoothTest(19238): at org.me.barcodetest.MainActivity$ConnectRunnable.run(MainActivity.java:211) 08-23 14:39:28.635: DEBUG/BluetoothTest(19238): at java.lang.Thread.run(Thread.java:1102) 

¿Alguna sugerencia sobre lo que estoy haciendo mal?

 package org.me.barcodetest; import android.app.Activity; import android.app.AlertDialog; import android.app.AlertDialog.Builder; import android.app.Dialog; import android.app.ProgressDialog; import android.bluetooth.BluetoothAdapter; import android.bluetooth.BluetoothDevice; import android.bluetooth.BluetoothSocket; import android.content.DialogInterface; import android.content.DialogInterface.OnCancelListener; import android.content.Intent; import android.os.Bundle; import android.util.Log; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.ArrayAdapter; import android.widget.ListView; import android.widget.TextView; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.util.Set; import java.util.UUID; public class MainActivity extends Activity { private static final int REQUEST_ENABLE_BT = 2; private BluetoothAdapter bluetoothAdapter; private UUID applicationUUID = java.util.UUID.randomUUID(); private static final String logTag = "BluetoothTest"; @Override public void onCreate(Bundle icicle) { super.onCreate(icicle); bluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); if (bluetoothAdapter == null) { Log.d(logTag, "Could not get bluetooth adapter"); return; } searchForDevices(); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == REQUEST_ENABLE_BT) { if (requestCode == RESULT_OK) { Log.d("BluetoothTest", "bluetooth enabled"); searchForDevices(); } else { Log.d("BluetoothTest", "Could not enable bluetooth device"); } } } public void lineReadFromBluetoothDevice(String line) { Log.d(logTag, "Mottok: " + line); } private void searchForDevices() { if (bluetoothAdapter.isEnabled()) { Set<BluetoothDevice> devicesAvailable = bluetoothAdapter.getBondedDevices(); if (devicesAvailable.isEmpty()) { informUserNoDevicesPaired(); } else { askUserToPickDeviceToUse(devicesAvailable); } } else { Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE); startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT); } } private void askUserToPickDeviceToUse(Set<BluetoothDevice> devicesAvailable) { final ListView view = new ListView(this); view.setChoiceMode(ListView.CHOICE_MODE_SINGLE); ArrayAdapter<BluetoothDevice> adapter = new ArrayAdapter(this, R.layout.devicesavailabletextview, devicesAvailable.toArray(new BluetoothDevice[devicesAvailable.size()])) { @Override public View getView(int position, View convertView, ViewGroup parent) { TextView view = (TextView) super.getView(position, convertView, parent); BluetoothDevice bluetoothDevice = (BluetoothDevice) getItem(position); view.setText(bluetoothDevice.getName() + " : " + bluetoothDevice.getAddress()); return view; } }; view.setAdapter(adapter); view.setOnItemClickListener(new OnItemClickListener() { public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) { pairToDevice((BluetoothDevice) view.getItemAtPosition(position)); } }); Dialog dialog = new Dialog(this); dialog.setContentView(view); dialog.setCancelable(true); dialog.show(); } private void informUserNoDevicesPaired() { Builder dialogBuilder = new AlertDialog.Builder(this); dialogBuilder.setMessage("Ingen \"Paired\" enheter"); dialogBuilder.setPositiveButton("Søk", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int arg1) { dialog.dismiss(); } }); dialogBuilder.setOnCancelListener(new OnCancelListener() { public void onCancel(DialogInterface dialog) { dialog.dismiss(); finish(); } }); dialogBuilder.show(); } private void showError(String message) { Builder dialogBuilder = new AlertDialog.Builder(this); dialogBuilder.setMessage("Det oppstod en feil i programmet:\n\n" + message); dialogBuilder.setOnCancelListener(new OnCancelListener() { public void onCancel(DialogInterface dialog) { dialog.dismiss(); finish(); } }); dialogBuilder.show(); } private void pairToDevice(BluetoothDevice bluetoothDevice) { openSocket(bluetoothDevice); } private void openSocket(BluetoothDevice bluetoothDevice) { try { final ProgressDialog dialog = new ProgressDialog(this); final ConnectRunnable connector = new ConnectRunnable(bluetoothDevice, dialog); dialog.show(this, "Kobler til", "Koblier til " + bluetoothDevice.getName() + " : " + bluetoothDevice.getAddress(), true, true, new OnCancelListener() { public void onCancel(DialogInterface dialog) { connector.cancel(); } }); new Thread(connector).start(); } catch (IOException ex) { Log.d(logTag, "Could not open bluetooth socket", ex); showError("Kunne ikke åpne socket grunnet feil: " + ex.getMessage()); } } private void closeSocket(BluetoothSocket openSocket) { try { openSocket.close(); } catch (IOException ex) { Log.d(logTag, "Could not close exisiting socket", ex); } } private void startListeningForInput(BluetoothSocket socket) { new Thread(new InputReader(socket)).start(); } private void dismissDialog(final Dialog dialog) { runOnUiThread(new Runnable() { public void run() { dialog.dismiss(); } }); } private class ConnectRunnable implements Runnable { private final ProgressDialog dialog; private final BluetoothSocket socket; public ConnectRunnable(BluetoothDevice device, ProgressDialog dialog) throws IOException { socket = device.createRfcommSocketToServiceRecord(applicationUUID); this.dialog = dialog; } public void run() { try { bluetoothAdapter.cancelDiscovery(); socket.connect(); } catch (IOException connectException) { Log.d(logTag, "Could not connect to socket", connectException); closeSocket(socket); return; } startListeningForInput(socket); dismissDialog(dialog); } public void cancel() { try { socket.close(); } catch (IOException e) { Log.d(logTag, "Canceled connection", e); } } } private class InputReader implements Runnable { private final BluetoothSocket socket; public InputReader(BluetoothSocket socket) { this.socket = socket; } @Override public void run() { try { final InputStream input = socket.getInputStream(); final BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(input, "UTF-8")); String line; while ((line = bufferedReader.readLine()) != null) { lineReadFromBluetoothDevice(line); } } catch (IOException ex) { showError("Mistet forbindelsen: " + ex.getMessage()); } } public void cancel() { try { socket.close(); } catch (IOException e) { } } } } <uses-permission android:name="android.permission.BLUETOOTH" /> <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" /> 

Devicesavailabletextview:

 <?xml version="1.0" encoding="UTF-8"?> <TextView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content"> </TextView> 

El problema fue mi uuid, pensé que esto era sólo un uuid para Android para saber de dónde vino, pero tenía que ser "00001101-0000-1000-8000-00805F9B34FB"

El escáner de código de barras utiliza el protocolo SPP – por lo que tiene que utilizar el UID SPP para conectarse a él.

  • Bluetooth: ¿La transferencia de la llamada de la fuente al fregadero?
  • ¿Bluetooth SPP recibe algo el marco del paquete puede perdido o?
  • StartBluetoothSco () lanza la excepción de seguridad (BROADCAST_STICKY) en ICS
  • Java: La excepción en sí es nula
  • Problema con la conexión Bluetooth de Android
  • No se puede conectar al socket bluetooth en android
  • IOException: error de lectura, socket podría cerrarse - Bluetooth en Android 4.3
  • ¿Cómo enviar archivos a todos los dispositivos conectados en android usando bluetooth?
  • Interfaz Android Nexus One con Arduino + BlueSmirf
  • BlueZ vs Bluedroid bluetooth pila
  • ¿Qué desencadena las transmisiones BluetoothDevice.ACTION_ACL?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.