Почему я не могу подключиться к услуге громкой связи на моем устройстве?

У меня есть часы gear s2 (tizen 2.3.2), подключенные к моей samsung galaxy s3 (android 4.3) через Bluetooth с помощью API-интерфейса Tizen Bluetooth. Используя MAC-адрес телефона, я могу "обнаружить" 16 различных UUID, включая 0000111F-0000-1000-8000-00805F9B34FB, UUID для службы HFP, насколько я понимаю. Но когда я пытаюсь подключиться к этому сервису, я не получаю ни ответа, ни successCallback, ни errorCallback. Интересно, что, делая то же самое для UUID последовательного порта (1101), я могу подключиться к услуге и даже получать сообщения через сокет, когда мой телефон получает звонок или текст, без проблем. Итак, почему я не получаю ответа при попытке подключиться к услуге громкой связи (UUID 111F)?
Вот код, который я использую:

function getPhoneBatteryLevel()
{
    try {
        writeLog("Initializing.");          
        bluetoothAdapter = tizen.bluetooth.getDefaultAdapter();
        bluetoothAdapter.getDevice("50:A4:C8:D4:95:E2",onGetDeviceSuccess,onGetDeviceError);
        writeLog("Looking for device.");
    }
    catch (err)
        {writeLog("getPhoneBatteryLevel-ERROR:"+err);}
}

function onGetDeviceSuccess(device)
{
    try {
        if (device.isBonded && device.isConnected){
            writeLog("Found connected Device.");
            var uuidStr="";
            for (var i=0;i<device.uuids.length;i++)
                {
                    if (device.uuids[i].substr(4,4)==="111F")
                        {
                            uuidStr = device.uuids[i];
                            writeLog("Found UUID at "+i+":"+uuidStr);
                            break;
                        }
                }
            if (uuidStr.length>0)
                {
                    device.connectToServiceByUUID(uuidStr, onServiceConnectSuccess, onServiceConnectError);             
                    writeLog("Attempted Connect To Service.");
                }
        }
        else {
            writeLog("Device not connected.");
            }
    }
    catch (err)
        {writeLog("onGetDeviceSuccess-ERROR:"+err);}
}
function onServiceConnectSuccess(socket)
{
    writeLog("Connected to service UUID="+socket.uuid);
}

После запуска этого кода мой файл журнала выглядит так:

Initializing. 
Looking for device. 
Found connected Device.
Found UUID at 6:0000111F-0000-1000-8000-00805F9B34FB
Attempted Connect To Service.

и это все... Я ожидал / надеялся также увидеть "Подключено к сервису UUID=0000111F-0000-1000-8000-00805F9B34FB" при успешном соединении через successCallback..или хотя бы аналогичная ошибка, записанная в журнал через errorCallback, но я не получил ни того, ни другого. Тем не менее, на телефоне работает служба громкой связи. И, конечно же, когда телефон находится в моей машине, функции громкой связи работают нормально, поэтому я знаю, что телефон поддерживает это. Куда я иду не так?

ОБНОВЛЕНИЕ: после нескольких тестов у меня есть некоторые дополнительные подсказки. У меня есть два устройства: iPhone S5 (iOS 11.2.6) и Galaxy S3 (Android 4.3). После "обнаружения" и подключения к каждому, я смог пройтись по сервисам (uuids). 0x111F на обоих. И есть несколько других uuids, которые объединяют эти два устройства. Я попытался подключиться ко всем этим общим службам на обоих устройствах. Результаты относительно двух устройств были идентичны - на обоих я смог подключиться к некоторым службам, на других - ошибки NotFound, а на одном, который мне действительно интересен, я вообще не получил обратного вызова. Итак, позвольте мне уточнить мой вопрос. Мне удалось подключиться к следующим службам, которые имеют два моих общих устройства: 110A [A2DP], 110C [AVRCP], 112F [PBAP], 1132[MAP]

Но, несмотря на то, что UUID 0x1200 находится в списках доступных UUIDS обоих устройств, ответ на мою попытку подключиться к сервису называется моей подпрограммой errorCallBack с ошибкой "Not Found". Это произошло на обоих устройствах. Почему это не было бы найдено, если оно было в списке допустимых UUID?

И самое разочаровывающее из всех (для меня, во всяком случае), это то, что я все еще не получаю никакого ответа вообще (без обратного вызова при успешном завершении и без обратного вызова с ошибкой), когда я пытаюсь подключиться к службе Hands Free Profile, 0x111F. Почему бы мне не получить ответ - либо перезвонил с успехом, либо перезвонил с ошибкой?

1 ответ

Я попытался подключить Gear S3 к сервису громкой связи моего Galaxy S6 Edge. Сначала я попытался получить список доступных услуг моего устройства. Я нашел список UUID. Вот префикс этих

1103
1105
110A
110C
1112
1115
1116
111F
112D
112F
1200

Я видел 111F доступен здесь. Я думал, что смогу соединить это. Этот журнал был показан при ошибке обратного вызова connectToServiceByUUID

Error while connecting: 0000111F-0000-1000-8000-00805F9B34FB service Not found 

После этого я попытался с 112F (который является Профилем доступа к телефонной книге). В этом случае я успешно подключился к сервису и получил всплывающее сообщение на моем S6 Edge, чтобы разрешить запрос (это означает, что код правильный). Но я нашел пустые данные, позвонив readData функция.

Entered BluetoothDevice.connectToServiceByUUID()
socket connected on service 0000112F-0000-1000-8000-00805F9B34FB 
Opened connection to remote device Galaxy S6 edge 
Entered BluetoothSocket.readData()
[] 

И мой основной фрагмент кода здесь, var adapter = tizen.bluetooth.getDefaultAdapter();

    adapter.getDevice('08:EE:8B:40:E9:38', onBondingSuccessCallback, onErrorCallback);

       function onBondingSuccessCallback(device) { 
              console.log(device.uuids.join("\n"));
              var serviceUUID = '0E4D4A34-00A0-B708-EAAC-6043A45596ED';
              device.connectToServiceByUUID(serviceUUID,function(sock{
              console.log('socket connected on service '+ serviceUUID);
              console.log ("Opened connection to remote device " + sock.peer.name);
             console.log(sock.readData());
           // socket = sock;
             console.log ("The socket is " + sock.state + " and service's UUID to which it is connected is  " + sock.uuid);
        }, function(error) {
             console.log('Error while connecting: '+ serviceUUID+ ' service ' + error.message);
        });
    }

    function onErrorCallback(e) {
        console.log('Cannot get a bonded device , reason: ' + e.message);
    }

Позже я попробовал с Samsung Z3 вместо S6 Edge. Результат был таким же. Так что я не уверен, что API содержит ошибку или я делаю что-то не так. Я отправил это как ответ, поскольку Вы просили разместить мой код.

Другие вопросы по тегам