簡體   English   中英

如何用QT強制藍牙配對引腳?

[英]How to force a bluetooth pairing pin with QT?

我在我的筆記本電腦(Debian 8)上用qt編寫了一個附件。 此應用程序應連接到其他設備,例如我的android智能手機(4.4.2、5.0.2、6.0.0)。 這項工作很棒,我可以配對並連接,但是我希望智能手機和應用程序顯示用於配對的銷釘。 我看了看文檔說

該信號僅在通過調用requestPairing()配對請求發出時發出。

http://doc.qt.io/qt-5/qbluetoothlocaldevice.html#pairingDisplayConfirmation )。

因此,這意味着QT首先嘗試不使用引腳進行連接,並且即使出現問題也將使用該引腳嗎? 我如何強制它始終顯示圖釘? (不需要自定義圖釘。)我的代碼的某些部分:

localDevice = new QBluetoothLocalDevice();

connect(localDevice, SIGNAL(pairingFinished(QBluetoothAddress,QBluetoothLocalDevice::Pairing)), this, SLOT(pairingDone(QBluetoothAddress,QBluetoothLocalDevice::Pairing)));

connect(localDevice, SIGNAL(pairingDisplayConfirmation(const QBluetoothAddress&, QString)), this, SLOT(pairingMyDisplayConfirmation(const QBluetoothAddress&, QString)));

connect(localDevice, SIGNAL(pairingDisplayPinCode(QBluetoothAddress,QString)), this, SLOT(displayPin(QBluetoothAddress,QString)));

...

void MainWindow::doPairingAction()
{
    if (ui->list->count() == 0){
        return;
    }

    if (ui->selectedMac->text().length() == 0 || ui->selectedName->text().length() == 0){
        return;
    }

    QBluetoothAddress address (ui->selectedMac->text());
    if (ui->pair->text() == "Pair") {
        qDebug() << "pair " << address;



        localDevice->requestPairing(address, QBluetoothLocalDevice::Paired);
    } else if (ui->pair->text() == "Unpair") {
        localDevice->requestPairing(address, QBluetoothLocalDevice::Unpaired);
    }
}

void MainWindow::pairingMyDisplayConfirmation(const QBluetoothAddress &address, QString pin){
    qDebug() << "#PAIRING_DISPLAY_CONFIRMATION_PIN: " << pin << "for" << address;
}


void MainWindow::pairingDone(const QBluetoothAddress &address, QBluetoothLocalDevice::Pairing pairing)
{
    QList<QListWidgetItem *> items = ui->list->findItems(address.toString(), Qt::MatchContains);

    if (pairing == QBluetoothLocalDevice::Paired || pairing == QBluetoothLocalDevice::AuthorizedPaired ) {
        for (int var = 0; var < items.count(); ++var) {
            QListWidgetItem *item = items.at(var);
            item->setTextColor(QColor(Qt::green));
            setPairStatus(true);
            qDebug() << "pair " << address << "success";
        }
    } else {
        for (int var = 0; var < items.count(); ++var) {
            QListWidgetItem *item = items.at(var);
            item->setTextColor(QColor(Qt::red));
            setPairStatus(false);
            qDebug() << "pair " << address << "failed";
        }
    }
}


void MainWindow::displayPin(const QBluetoothAddress &address, QString pin)
{
    qDebug() << "#DISPLAY_PIN: " << pin << "for" << address;
}

我知道沒有對話,但是如果我可以調試該消息以進行引腳請求或確認,那將是很好的。

謝謝。

因此,這意味着QT首先嘗試不使用引腳進行連接,並且即使出現問題也將使用該引腳嗎? 我如何強制它始終顯示圖釘? (不需要自定義圖釘。)我的代碼的某些部分:

配對方法有兩種,一種是通用綁定,另一種是專用綁定。 第一個就像您的描述,即首先嘗試連接一些配置文件,安全模塊將請求配對。 第二個只是配對,但實際上並沒有連接個人資料。

關於您的問題,您需要注意您的設備是使用密碼還是SSP,如果對於第二個設備,通常使用的是“ just work”方法,那么您將無法打印密碼請求信息,因為它們正在使用密碼。不同的功能。 如果您的設備使用PIN碼,只需取消配對,然后再次配對,我相信應該會出現PIN對話框。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM