Android Bluetooth связывает устройство, даже если соединение не установлено - PullRequest
0 голосов
/ 23 марта 2011

Я пишу приложение Bluetooth, ориентированное на API 7 (у меня устройство API 8 - 2.2). Когда я пытаюсь подключить разъем Bluetooth, я получаю всплывающее окно, предлагающее пользователю выполнить сопряжение с устройством, но иногда подключение прерывается или прерывается. В этих случаях всплывающее окно исчезает, ничего не щелкая, но в настройках Bluetooth устройство отображается как «Сопряжено, но не подключено».

Если я подключаюсь к устройству Bluetooth напрямую из настроек Bluetooth, этого не происходит; устройство показывает «Сопряжено, но не подключено», только если пользователь действительно нажимает «Сопряжение».

Вот код, который создает соединение, кажется достаточно простым:

    try {
        BluetoothDevice btDevice = _btAdapter.getRemoteDevice(address);
        _btAdapter.cancelDiscovery();
        sock = btDevice.createRfcommSocketToServiceRecord(SafConstants.BT_UUID);
        sock.connect();
    } catch (IOException e) {
        logger.error("socket connection failed", e);
        if (sock != null) {
            try {sock.close();}
            catch (IOException e1) {}
        }
    }

Это проблема с Android или я должен делать что-то еще? Я искал API, чтобы посмотреть, смогу ли я удалить устройство из набора связанных устройств (если соединение не установилось), но кажется, что это невозможно.

РЕДАКТИРОВАТЬ: Одна вещь, которую я замечаю, это то, что, когда я пытаюсь подключиться через мое приложение, на моем ноутбуке появляется сообщение о том, что он пытается получить доступ к службе гарнитуры перед сопряжением. Через несколько секунд на моем ноутбуке появится сообщение о том, что устройство пытается выполнить сопряжение.

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

1 Ответ

1 голос
/ 26 мая 2011

UUID, который вы используете, предназначен для SPP (профиль последовательного порта), и, будучи гарнитурой, потребует профиля Bluetooth - A2DP (Advanced Audio Distribution). В настоящее время реализация Bluetooth в стеке для Android не поддерживает профили Bluetooth и является лишь реализацией.

Для поддержки профилей Bluetooth в Android существует проект под названием «Sybase-iAnywhere-Blue-SDK-for-Android», который заменяет версию Android и предоставляет все интерфейсы в базовые профили и протоколы Bluetooth. Благодаря этому печать через Bluetooth с помощью телефона Android будет возможна с использованием профиля BPP, предоставленного этим SDK.

Для получения более подробной информации см. Ссылки ниже:

ссылка 1: http://www.sybase.com/detail?id=1064424

Ссылка 2: http://www.sybase.com/products/allproductsa-z/mobiledevicesdks/bluetoothsdks

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