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

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 八爪鱼爬数据为什么自己停了
  • ¥15 交替优化波束形成和ris反射角使保密速率最大化
  • ¥15 树莓派与pix飞控通信
  • ¥15 自动转发微信群信息到另外一个微信群
  • ¥15 outlook无法配置成功
  • ¥30 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率