jaklsdkfjosfij 2017-08-10 05:50 采纳率: 60%
浏览 2009
已采纳

windows 蓝牙 api,主动配对手机失败。

下面是我的配对代码 和 回掉函数,我发现,我的电脑主动配对手机,手机上会提示失败:"无法和xxx-pc配对",但是我用手机主动配对电脑,就提示配对成功,请问各位大神,哪里有问题呢?

1.配对代码

 BOOL CBluetooth::BtSocketAuthenticate(char *szAddr)
{
    SOCKADDR_BTH sa = { 0 };
    int sa_len = sizeof(sa);
    DWORD dwRet;
    BLUETOOTH_DEVICE_INFO  btdi = { 0 };
    HBLUETOOTH_AUTHENTICATION_REGISTRATION hRegHandle = 0;

    // initialize windows sockets
    WORD wVersionRequested;
    WSADATA wsaData;
    wVersionRequested = MAKEWORD(2, 0);
    if (WSAStartup(wVersionRequested, &wsaData) != 0) {
        return FALSE;
    }

    dwRet = BluetoothRegisterForAuthenticationEx(&m_device.bdi, &hRegHandle, &BluetoothAuthCallback, NULL);
    if (dwRet != ERROR_SUCCESS)
    {
        return FALSE;
    }

    if ( m_device.bdi.fAuthenticated ) 
    {   
        return TRUE;    // 已经配对了
    }

    DWORD status = BluetoothUpdateDeviceRecord ( &m_device.bdi );
    if ( ERROR_SUCCESS != status )
        return FALSE;

    // authenticate device (will call authentication callback)
    AUTHENTICATION_REQUIREMENTS authreqs = MITMProtectionRequired ;
    dwRet = BluetoothAuthenticateDeviceEx(NULL, m_radio.hRadio , &m_device.bdi, NULL, authreqs);
}

2. 回掉函数

 BOOL CALLBACK BluetoothAuthCallback(LPVOID pvParam, PBLUETOOTH_AUTHENTICATION_CALLBACK_PARAMS pAuthCallbackParams)
{
    DWORD dwRet;

    BLUETOOTH_AUTHENTICATE_RESPONSE AuthRes;
    AuthRes.authMethod = pAuthCallbackParams->authenticationMethod;

    AuthRes.bthAddressRemote = pAuthCallbackParams->deviceInfo.Address;
    AuthRes.negativeResponse = FALSE;
    AuthRes.numericCompInfo.NumericValue = pAuthCallbackParams->Numeric_Value;

    // Send authentication response to authenticate device
    dwRet = BluetoothSendAuthenticationResponseEx(NULL, &AuthRes);
}
  • 写回答

2条回答 默认 最新

  • sinat_35781426 2017-08-21 02:14
    关注

    BOOL CALLBACK BluetoothAuthCallback(LPVOID pvParam, PBLUETOOTH_AUTHENTICATION_CALLBACK_PARAMS pAuthCallbackParams)
    {
    DWORD dwRet;

    BLUETOOTH_AUTHENTICATE_RESPONSE AuthRes;
    AuthRes.authMethod = pAuthCallbackParams->authenticationMethod;
    
    AuthRes.bthAddressRemote = pAuthCallbackParams->deviceInfo.Address;
    AuthRes.negativeResponse = FALSE;
    AuthRes.numericCompInfo.NumericValue = pAuthCallbackParams->Numeric_Value;
    
    // Send authentication response to authenticate device
    dwRet = BluetoothSendAuthenticationResponseEx(NULL, &AuthRes);
    

    }


    这部分应该有问题,检查一下

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 eda:门禁系统设计
  • ¥50 如何使用js去调用vscode-js-debugger的方法去调试网页
  • ¥15 376.1电表主站通信协议下发指令全被否认问题
  • ¥15 物体双站RCS和其组成阵列后的双站RCS关系验证
  • ¥15 复杂网络,变滞后传递熵,FDA
  • ¥20 csv格式数据集预处理及模型选择
  • ¥15 部分网页页面无法显示!
  • ¥15 怎样解决power bi 中设置管理聚合,详细信息表和详细信息列显示灰色,而不能选择相应的内容呢?
  • ¥15 QTOF MSE数据分析
  • ¥15 平板录音机录音问题解决