为什么我不能连接到设备上的无提机服务



我使用Tizen Bluetooth API通过蓝牙连接到我的三星Galaxy S3(Android 4.3(的Gear S2 Watch(Tizen 2.3.2(。我可以使用手机的MAC地址"发现" 16种不同的UUID,包括0000111F-0000-1000-8000-8000-00805F9B34FB,这是HFP服务的UUID。但是,当我尝试连接到该服务时,我没有得到任何响应,既没有成功的回复和错误呼叫。有趣的是,对于串行端口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-1000-8000-00805F9B34FB",通过成功的连接,通过Scuccessallback ..或至少写给了类似的错误通过errorcallback登录,但我却没有。但是,无提其手机服务似乎正在通过电话运行。当然,当手机在我的汽车上时,可以免费的功能正常工作,所以我知道手机会支持它。我要去哪里?

更新:在进行了几次测试之后,我还有一些其他线索。我有两个设备:iPhone S5(iOS 11.2.6(和一个Galaxy S3(Android 4.3(。在"发现"并连接到每个之后,我能够通过服务(UUID(循环。0x111f都在两者上。这两个设备还有其他几种UUID。我尝试在两个设备上连接到所有这些常见服务。相对于这两个设备的结果是相同的 - 在这两种设备上,我都可以连接到某些服务,对其他服务遇到了不足的错误,而我真的很感兴趣的是,我根本没有回调。因此,请允许我完善我的问题。我能够连接到我的两个设备共同的以下服务:110a [a2dp],110c [avrcp],112f [pbap],1132 [map]

但是,即使UUID 0x1200在两个设备的可用UUID列表中,但我尝试连接到名为"我的errorCallback例程"的服务的响应,并以"找不到"错误。这发生在两个设备上。为什么在有效的UUID列表中找不到这一点?

,最令人失望的是,当我尝试连接到Hands Free Profile服务0x111f时,我仍然根本没有任何响应(没有成功的回调,也没有错误回调(。我为什么不收到响应 - 成功回电话或错误回电?

我试图将齿轮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边缘上收到了弹出消息以允许请求(这意味着代码是正确的(。但是我通过调用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 apapter = 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是否有障碍或我做错了什么。我已经将其发布为答案,因为您要求发布我的代码。

相关内容

  • 没有找到相关文章