我的齿轮s2手表(tizen 2.3.2)使用Tizen蓝牙API通过蓝牙连接到我的三星galaxy s3(android 4.3)。使用手机的MAC地址,我能够发现"根据我的理解,有16种不同的UUID,包括0000111F-0000-1000-8000-00805F9B34FB,HFP服务的UUID。但是当我尝试连接到该服务时,我得不到响应,也没有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.
那就是......我期望/希望也看到&#34;连接到服务UUID = 0000111F-0000-1000-8000-00805F9B34FB&#34;通过successCallback成功连接...或者至少通过errorCallback写入日志的类似错误,但我没有得到。然而,免提服务似乎正在手机上运行。当然,当手机在我的车里时,免提功能正常,所以我知道手机支持它。我哪里错了?
更新:经过多次测试后,我还有一些额外的线索。我有两个设备:iPhone S5(iOS 11.2.6)和Galaxy S3(android 4.3)。在&#34;发现&#34;并连接到每个,我能够遍历服务(uuids)。两个都是0x111F。并且这两种设备有几个共同的其他uuids。我尝试在两台设备上连接所有这些常用服务。相对于两个设备的结果是相同的 - 在两者上,我能够连接到某些服务,在其他服务器上得到NotFound错误,在我真正感兴趣的那个上,我根本没有回调。所以,请允许我改进我的问题。我能够连接到我的两个设备共有的以下服务:110A [A2DP],110C [AVRCP],112F [PBAP],1132 [MAP]
但是,即使UUID 0x1200在两个设备中也是如此。可用的UUIDS列表,我尝试连接到该服务的响应称为我的errorCallBack例程,其中包含&#34; Not Found&#34;错误。这发生在两台设备上。为什么在有效的UUID列表中找不到它?
最让我失望的是(无论如何),当我尝试连接免提配置文件服务0x111F时,我仍然没有得到任何响应(没有成功回调和没有错误回调)。为什么我不会得到回复 - 成功回叫还是错误回叫?
答案 0 :(得分:0)
我尝试将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);
}
后来我尝试使用三星Z3而不是S6 Edge。结果是一样的。所以我不确定API是否有错误或我做错了什么。我已将其作为您要求发布我的代码的答案发布。