programacion - Envío de archivos Bluetooth Android
manual de programacion android pdf (3)
Estoy tratando de enviar un archivo a través de bluetooth en un dispositivo Android. He hecho el descubrimiento, la conexión y he hecho un conector Bluetooth. El problema es que cuando escribo la matriz de bytes en el flujo de salida del zócalo bluetooth, el lado receptor no recibe nada aunque acepta que se está enviando algo.
Esto es lo que estoy haciendo (mal es el adaptador bluetooth)
Por favor avise.
try
{
BluetoothDevice dev = bad.getRemoteDevice(a);
bad.cancelDiscovery();
dev.createRfcommSocketToServiceRecord(new UUID(1111, 2222));
Method m = dev.getClass().getMethod("createRfcommSocket", new Class[] {int.class});
bs = (BluetoothSocket) m.invoke(dev, Integer.valueOf(1));
bs.connect();
tmpOut = bs.getOutputStream();
}catch(Exception e)
{
}
File f = new File(filename);
byte b[] = new byte[(int) f.length()];
try
{
FileInputStream fileInputStream = new FileInputStream(f);
fileInputStream.read(b);
}catch(IOException e)
{
Log.d(TAG, "Error converting file");
Log.d(TAG, e.getMessage());
}
try {
tmpOut.write(b);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
¿Por qué no utilizar la llamada api estándar en lugar de llamar a través de la reflexión, por ejemplo:
BluetoothSocket socket = destination
.createRfcommSocketToServiceRecord(new UUID(...)) ;
También su bloque de captura está vacío. ¿Estás seguro de que el zócalo se conectó sin excepción? Connect lanzará IOException si la conexión falló por algún motivo. Ver este link
Estoy utilizando el siguiente código cortado para conectarme al servicio en serie en un dispositivo Bluetooth remoto y funciona bien para mí. Solo asegúrese de que el otro dispositivo (puede ser móvil o PC) tenga un zócalo de servidor para la comunicación en serie a través de Bluetooth (consulte el código del lado del servidor a continuación)
Lado del cliente:
UUID serialUUID = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");
BluetoothDevice btDevice = btAdapter.getRemoteDevice(BTAddress); // Get the BTAddress after scan
BluetoothSocket btSocket = btDevice.createRfcommSocketToServiceRecord(SERIAL_UUID);
btSocket.connect();
InputStream iStream = btSocket.getInputStream();
OutputStream oStream = btSocket.getOutputStream();
Lado del servidor:
UUID serialUUID = new UUID("1101", true);
String serviceURL = "btspp://localhost:" + serialUUID
+ ";name=Android BT Server;authorize=false;authenticate=false";
StreamConnectionNotifier connectionNotifier = (StreamConnectionNotifier) Connector
.open(serviceURL);
// Blocking method will wait for client to connect
StreamConnection connection = connectionNotifier.acceptAndOpen();
RemoteDevice remoteDevice = RemoteDevice.getRemoteDevice(connection);
InputStream btInput = connection.openInputStream();
OutputStream btOutput = connection.openOutputStream();
Puede deberse a que dev y bs están fuera del alcance antes de usar tmpout porque están declarados dentro de su bloque try / catch.