簡體   English   中英

在前面帶藍牙配對請求通知對話框以詢問PIN

[英]Bring Bluetooth pairing request notification dialog on front to ask for PIN

我要做的是在對話框中輸入PIN以進行配對過程。

連接到設備后,我收到通知,但配對對話框沒有顯示。 我必須手動打開它。

到目前為止,我嘗試了以下方法,當我得到PAIRING_REQUEST動作時,在廣播接收器中調用這些方法:

public void pairDevice(BluetoothDevice device)
{
    String ACTION_PAIRING_REQUEST = "android.bluetooth.device.action.PAIRING_REQUEST";
    Intent intent = new Intent(ACTION_PAIRING_REQUEST);
    String EXTRA_DEVICE = "android.bluetooth.device.extra.DEVICE";
    intent.putExtra(EXTRA_DEVICE, device);
    String EXTRA_PAIRING_VARIANT = "android.bluetooth.device.extra.PAIRING_VARIANT";
    int PAIRING_VARIANT_PIN = 0;
    intent.putExtra(EXTRA_PAIRING_VARIANT, PAIRING_VARIANT_PIN);
    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    startActivity(intent);

}

這顯示對話框正確,但在我輸入后,它不會配對我的設備。

我也試過這段代碼:

public void pairDevice(BluetoothDevice device)
{   
    Intent intent = new Intent("android.bluetooth.device.action.PAIRING_REQUEST");
    String EXTRA_DEVICE = "android.bluetooth.device.extra.DEVICE";
    intent.putExtra(EXTRA_DEVICE, device);
    int PAIRING_VARIANT_PIN = 272;
    intent.putExtra("android.bluetooth.device.extra.PAIRING_VARIANT", PAIRING_VARIANT_PIN);
    sendBroadcast(intent);
}

哪個崩潰我的應用程序,因為它說我沒有權限為PAIRING_REQUEST發送廣播(即使我設置了BLUETOOTH和BLUETOOTH_ADMIN兩個權限)

請,我真的需要顯示這個對話框,如果它是默認對話框會更好。 我正在連接到BLE設備,連接后需要PIN才能配對,並且能夠修改某些特性。

非常感謝您的幫助!

提前致謝!

嘗試使用新的Android BluetoothDevice API:bluetoothdevice.createBond()。 調用此方法后,系統將自動為您調用配對請求對話框。 然后,您可以在該彈出對話框中輸入PIN。

考慮在代碼中添加類似的內容,以便開始配對過程:

private void pairDevice(BluetoothDevice device) {
    try {
        Log.d(TAG, "Start Pairing... with: " + device.getName());
        device.createBond();
    } catch (Exception e) {
        Log.e(TAG, e.getMessage());
    }
}

我遇到了類似的問題,請確保您的藍牙用戶權限設置在清單 xml標記內,而不是在應用程序標記下 - 在AndroidManifest中(即)。 希望這可以幫助。

您可以直接使用connect方法配對設備。如果兩個設備之前沒有配對,那么Android框架將在連接過程中自動向用戶顯示配對請求通知或對話框。 因此,在嘗試連接設備時,您的應用程序無需擔心設備是否已配對。

嘗試將此用於所有API級別:

 public static void pairDevice(BluetoothDevice device) {
        try {
            Method method = device.getClass().getMethod("createBond", (Class[]) null);
            method.invoke(device, (Object[]) null);
            //From API 19.
            //  device.createBond();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

暫無
暫無

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

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