Как отправлять и получать данные в Android Programming с помощью Bluetooth без сопряжения? - PullRequest
3 голосов
/ 27 июня 2011

Я новичок в программировании на Android и имею концепцию Java, я хочу знать, что как я могу отправлять и получать данные, используя Bluetooth без сопряжения или пароля (только если на обоих устройствах установлено мое приложение), есть предложения?

Ответы [ 2 ]

2 голосов
/ 06 июля 2011

Насколько я знаю, невозможно отправлять или прием данных через гнезда RFCOMM без сопряжения. Я много пробовал с приложением, которое я разрабатываю. Мои результаты:

  • Если два устройства сопряжены и могут быть обнаружены, возможна двунаправленная связь
  • Если два устройства сопряжены, но для «серверного» устройства (к которому пытается подключиться устройство Android) установлено значение , а не для обнаружения, то двунаправленная связь все еще возможна
  • Если два устройства не сопряжены, но «серверное» устройство может быть обнаружено , то запрос на сопряжение по-прежнему необходим, прежде чем возможна двунаправленная связь. Это означает, что в гнездах RFCOMM client (т. Е. В Android) требуется сопряжение устройств. Это было протестировано на Samsung Captivate под управлением Android 2.2. Я нахожу это очень странным, поскольку могу понять, что требуется сопряжение перед тем, как разрешить сокеты сервера RFCOMM, но требование сопряжения для client сокетов немного жестко.

Как уже упоминалось @ethrbunny, вы также можете просто использовать WiFi, устанавливать параллельные потоки сервер / клиент на каждом устройстве и отправлять все, что захотите. Для обнаружения услуг в локальной сети вы можете дополнительно использовать zeroconf.

1 голос
/ 30 июня 2011

Я получил следующее от этого сообщения группы Google от Кристофера Микински .Надеюсь, это поможет.

Я считаю, что ключ к тому, чтобы заставить это работать, находится в списке mUuid.

Внимательно посмотрите на то, что это делает:

for (int i = 0; i < Connection.MAX_SUPPORTED && myBSock == null; i++) {
    for (int j = 0; j < 3 && myBSock == null; j++) {
        myBSock = getConnectedSocket(myBtServer, mUuid.get(i));
        if (myBSock == null) {
            try {
                Thread.sleep(200);
            } catch (InterruptedException e) {
                Log.e(TAG, "InterruptedException in connect", e);
            }
        }
    }
}


Что этот код выглядит для подключения к устройству, но как он это делает?Он пробует сокет несколько раз, используя несколько UUID для сеанса.

По сути это означает, что мы можем использовать UUID только один раз .Таким образом, вместо этого приложение реализует с использованием семи UUID, затем сервер прослушивает и принимает каждый UUID на стороне сервера, это то, что делается с помощью следующего кода:

for (int i = 0; i < Connection.MAX_SUPPORTED && maxConnections > 0; i++) {
    BluetoothServerSocket myServerSocket = mBtAdapter.listenUsingRfcommWithServiceRecord(srcApp, mUuid.get(i));
    BluetoothSocket myBSock = myServerSocket.accept();
    myServerSocket.close(); // Close the socket now that the
    // connection has been made.

    String address = myBSock.getRemoteDevice().getAddress();

    mBtSockets.put(address, myBSock);
    mBtDeviceAddresses.add(address);
    Thread mBtStreamWatcherThread = new Thread(new BtStreamWatcher(address));
    mBtStreamWatcherThread.start();
    mBtStreamWatcherThreads.put(address, mBtStreamWatcherThread);
    maxConnections = maxConnections - 1;
    if (mCallback != null) {
        mCallback.incomingConnection(address);
    }
}

Теперь, нас клиентской стороны что сделано?Клиент не знает, сколько активных соединений сервер имеет в настоящее время.

Если у нас есть какой-то согласованный порядок, который должны использовать клиенты, мы можем просто использовать это, однако, в нашем случае, мы просто просто пытаемся каждый UUID в последовательности, пока мы "не найдем правильноеone. "

Короткая версия: - Используйте несколько UUID, вы можете использовать только один UUID.Поэтому определите семь (максимум для использования пикосети) и пробуйте каждый, пока не найдете правильный.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...