Отправка файла Bluetooth для Android

Я пытаюсь отправить файл через Bluetooth в Android-устройстве. Я сделал открытие, подключение и сделал разъем Bluetooth. Проблема в том, что когда я пишу массив байтов в выходном потоке сокета bluetooth, получающая сторона ничего не получает, хотя признает, что что-то отправляется.

Вот что я делаю (плохой адаптер Bluetooth)

Пожалуйста, порекомендуйте.

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

Solutions Collecting From Web of "Отправка файла Bluetooth для Android"

Я использую приведенный ниже код, чтобы подключиться к последовательной службе на удаленном устройстве Bluetooth, и он отлично работает для меня. Просто убедитесь, что другое устройство (может быть мобильным или ПК) имеет серверный сокет для последовательной связи через Bluetooth (см. Код на стороне сервера ниже)

Сторона клиента:

 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(); 

Сторона сервера:

 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(); 

Почему бы не использовать стандартный вызов api вместо вызова через отражение, например:

 BluetoothSocket socket = destination .createRfcommSocketToServiceRecord(new UUID(...)) ; 

Также ваш блок блокировки пуст. Вы уверены, что сокет был подключен без каких-либо исключений? Connect вызовет исключение IOException, если соединение по какой-то причине не получилось. См. Эту ссылку

Возможно, из-за того, что dev и bs выходят за рамки, прежде чем использовать tmpout, потому что они объявлены в вашем блоке try / catch.