Почему я не могу подключиться к услуге громкой связи на моем устройстве?
У меня есть часы 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 содержит ошибку или я делаю что-то не так. Я отправил это как ответ, поскольку Вы просили разместить мой код.