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> 

2 Solutions collect form web for “Conexión al dispositivo bluetooth pareado (BluetoothSocket) en android 2.1”

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.

  • ¿Transferir un archivo entre dispositivos Android?
  • ¿Cómo hacer que el teléfono Android sea un auricular bluetooth?
  • ¿Cómo comprobar si el bluetooth está habilitado mediante programación?
  • ¿Cómo obtener RSSI sin conexión al dispositivo BLE?
  • Enviar múltiples archivos mediante bluetooth en android mediante programación
  • Implementación del perfil de soporte de protocolo de Internet (IPSP) para Bluetooth Low Energy en Android
  • ¿Cómo conectarse con un dispositivo Bluetooth pareado programático en Android?
  • Cómo grabar audio desde un auricular bluetooth (startBluetoothSco ())
  • Imprimir archivo PDF a través de Bluetooth Impresora Android
  • Navegue por el sistema de archivos de Frambuesa Pi desde android vía bluetooth
  • Android BLE ACTION_ACL_CONNECTED no se llama para dispositivos emparejados
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.