Intereting Posts
Клонирование источников Android на локальном сервере репозитория Можно ли отключить следующие переадресации в OkHttp 2.0? CollapsingToolbarLayout | Проблемы с прокруткой и компоновкой 2 Android NDK mmap вызывается на 32-битных устройствах после обновления до Lollipop Android – запуск службы при загрузке Как выполнить несколько анимаций перевода последовательно? Отладка с использованием виртуальной машины, такой как VMWare / VirtualBox? Okhttp refresh expired token, когда несколько запросов отправляются на сервер Произошел утечка объекта SQLiteConnection для базы данных! Пожалуйста, исправьте свое заявление Круглый прогрессBar Справочная информация: Android Xamarin Переключение между onItemClick и onItemLongClick событием Android ListView Как переключить диалог прогресса между детерминированными и неопределенными? Использование AudioTrack в Android для воспроизведения WAV-файла Сложность при обновлении таблицы SQlite Как программно добавлять кнопки в макет по одному в нескольких строках?

Отправьте данные с Android-телефона на bluecove

Я пытаюсь отправить данные с android (используя API из SDK) на ПК с помощью Bluecove на окнах, являясь последним сервером.

Я могу заставить android подключиться к серверу, но когда я пишу в выходной поток сокета, на сервере ничего не происходит. У меня есть метод onPut, но он никогда не называется.

Код следует ниже, если кто-то может мне помочь, я буду очень благодарен:

Android

public class BluetoothWorker { private static UUID generalUuid = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB"); private static BluetoothSocket socket; private static BluetoothSocket getBluetoothSocket(){ BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); mBluetoothAdapter.cancelDiscovery(); Set<BluetoothDevice> pairedDevices = mBluetoothAdapter.getBondedDevices(); // If there are paired devices if (pairedDevices.size() > 0) { // Loop through paired devices for (BluetoothDevice device : pairedDevices) { // Add the name and address to an array adapter to show in a ListView if(device.getName().equalsIgnoreCase(("MIGUEL-PC"))){ try { return device.createRfcommSocketToServiceRecord(generalUuid); } catch (IOException e) { return null; } } } } return null; } public static boolean sendData(String status){ socket = getBluetoothSocket(); try { socket.connect(); } catch (IOException e) { // TODO Auto-generated catch block socket = null; } if(socket != null){ try { socket.getOutputStream().write(status.getBytes()); socket.getOutputStream().flush(); socket.close(); return true; } catch (IOException e) { socket = null; return false; } }else{ return false; } } } 

Код ПК

 public class AISHIntegrationBTBridge { static final String serverUUID = "0000110100001000800000805F9B34FB"; public static void main(String[] args) throws IOException { LocalDevice.getLocalDevice().setDiscoverable(DiscoveryAgent.GIAC); SessionNotifier serverConnection = (SessionNotifier) Connector.open("btgoep://localhost:" + serverUUID + ";name=ObexExample"); int count = 0; while(count < 2) { RequestHandler handler = new RequestHandler(); serverConnection.acceptAndOpen(handler); System.out.println("Received OBEX connection " + (++count)); } } private static class RequestHandler extends ServerRequestHandler { public int onPut(Operation op) { try { HeaderSet hs = op.getReceivedHeaders(); String name = (String) hs.getHeader(HeaderSet.NAME); if (name != null) { System.out.println("put name:" + name); } InputStream is = op.openInputStream(); StringBuffer buf = new StringBuffer(); int data; while ((data = is.read()) != -1) { buf.append((char) data); } System.out.println("got:" + buf.toString()); op.close(); return ResponseCodes.OBEX_HTTP_OK; } catch (IOException e) { e.printStackTrace(); return ResponseCodes.OBEX_HTTP_UNAVAILABLE; } } } } 

Solutions Collecting From Web of "Отправьте данные с Android-телефона на bluecove"

Я сделал аналогичную вещь 2 года назад.

Для Android мой код немного отличается от вашего:

 BluetoothSocket socket = Device.createRfcommSocketToServiceRecord(device_UUID); socket.connect(); DataOutputStream dos = new DataOutputStream(socket.getOutputStream()); dos.writeChar('x'); // for example socket.close(); 

Я использовал DataOutputStream для отправки данных на ПК. Но, конечно, это не имеет значения, просто для вашей справки.

Для ПК,

 LocalDevice localDevice = LocalDevice.getLocalDevice(); localDevice.setDiscoverable(DiscoveryAgent.GIAC); // Advertising the service String url = "btspp://localhost:" + device_UUID + ";name=BlueToothServer"; StreamConnectionNotifier server = (StreamConnectionNotifier) Connector.open(url); StreamConnection connection = server.acceptAndOpen(); // Wait until client connects //=== At this point, two devices should be connected ===// DataInputStream dis = connection.openDataInputStream(); char c; while (true) { c = dis.readChar(); if (c == 'x') break; } connection.close(); 

Я не уверен, что предыдущие коды все еще работают сегодня, так как это было сделано 2 года назад. Возможно, API BlueCove сильно изменился. Но в любом случае эти коды работают на меня. Надеюсь, это может вам помочь.

Еще одно замечание: мне пришлось удалить драйвер Toshiba Bluetooth на моем ПК и переустановить Microsoft, чтобы использовать BlueCove. В противном случае это не сработает. (Тем не менее, последняя версия BlueCove, возможно, уже поддерживала разные драйверы, пожалуйста, поправьте меня, если я скажу что-то не так.)

Попробуйте использовать «println» вместо «write» в вашем методе sendData Android!