Примеры Bluetooth для Android - PullRequest
6 голосов
/ 26 мая 2011

Кто-нибудь знает какой-либо доступный пример, иллюстрирующий разработку Bluetooth на Android.

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

Однако, когда речь идет о реализации кода Bluetooth, в приложении необходимо просмотреть пример чата Bluetooth, чтобы понять, как все это работает.

Пример Bluetooth-чата здесь

Этот пример хорош, но его также сложно понять, потому что каждое устройство изначально настроено как сервер.

Кто является сервером, и оба устройства отправляют серверные сокеты, пока одно устройство не сканирует?

Когда устройство обнаруживает себя, оно становится сервером?

Когда начинается действие OnResume, поскольку после его запуска и инициализации mChatService в SetupChat устройство запускает поток Accept.

Приводятся некоторые примеры кода.ниже, а ссылка на полный чат Bluetooth доступна выше.

@Override
public synchronized void onResume() {
    super.onResume();
    if(D) Log.e(TAG, "+ ON RESUME +");

    // Performing this check in onResume() covers the case in which BT was
    // not enabled during onStart(), so we were paused to enable it...
    // onResume() will be called when ACTION_REQUEST_ENABLE activity returns.
    if (mChatService != null) {
        // Only if the state is STATE_NONE, do we know that we haven't started already
        if (mChatService.getState() == BluetoothChatService.STATE_NONE) {
          // Start the Bluetooth chat services
          mChatService.start();
        }
    }
}

private void setupChat() {

    // Initialize the BluetoothChatService to perform bluetooth connections
    mChatService = new BluetoothChatService(this, mHandler);

    // Initialize the buffer for outgoing messages
    mOutStringBuffer = new StringBuffer("");
}


/**
 * Start the chat service. Specifically start AcceptThread to begin a
 * session in listening (server) mode. Called by the Activity onResume() */
public synchronized void start() {
    if (D) Log.d(TAG, "start");

    // Cancel any thread attempting to make a connection
    if (mConnectThread != null) {mConnectThread.cancel(); mConnectThread = null;}

    // Cancel any thread currently running a connection
    if (mConnectedThread != null) {mConnectedThread.cancel(); mConnectedThread = null;}

    setState(STATE_LISTEN);

    // Start the thread to listen on a BluetoothServerSocket
    if (mSecureAcceptThread == null) {
        mSecureAcceptThread = new AcceptThread(true);
        mSecureAcceptThread.start();
    }
    if (mInsecureAcceptThread == null) {
        mInsecureAcceptThread = new AcceptThread(false);
        mInsecureAcceptThread.start();
    }
}

То, что я прошу, - это любые примеры Bluetooth, которые легче понять, и примеры, которые четко разделяют сторону сервера и клиента.сторона Bluetooth. У меня есть Google, и я прочитал все подробности, доступные на сайте developer.android.com.

1 Ответ

9 голосов
/ 25 июня 2011

Из того, что я понял, различие: сервер и клиент существуют только во время установления соединения Bluetooth (т. Е. Во время процесса обнаружения и сопряжения). Для установления соединения одно устройство действует как сервер (используя экземпляр класса BluetoothServerSocket), а другое - как клиент (используя экземпляр класса BluetoothSocket). (Действующий) сервер прослушивает входящие запросы, а клиент запрашивает прослушивающие серверы для подключения. После того, как соединение установлено (см. Подробности методов, используемых в Руководстве по разработке Android), и (первоначально вызванный) сервер и клиент взаимодействуют, используя только объект BluetoothSocket. Поэтому такого различия между сервером и клиентом не существует.

Вы можете проверить код примера чата Bluetooth в Руководстве по разработке, в частности класса BluetoothChatService. Вызов метода createRfcommSocketToServiceRecord () возвращает BluetotohSocket на прослушивающее (серверное) устройство. Запрашивающее устройство (клиент) как таковое использует подобный объект.

Правда, дальнейшие примеры кода были бы лучше.

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