繁体   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