Android 使用最新API上的PIN(棒棒糖)与BLE设备连接时避免用户对话

Android 使用最新API上的PIN(棒棒糖)与BLE设备连接时避免用户对话,android,android-5.0-lollipop,bluetooth-lowenergy,android-4.4-kitkat,Android,Android 5.0 Lollipop,Bluetooth Lowenergy,Android 4.4 Kitkat,我正在与Android应用程序中的蓝牙低能设备进行连接/配对。开始粘合时,将显示“输入PIN”对话框。当我从代码中设置pin时,它会自动消失。对话框出现和消失的速度非常慢,足以让用户感到困惑和烦恼。如何避免此对话框 我在android BLE指南中找不到任何关于粘合的内容 另一个问题帮助了我,但是解决方案并没有删除对话框。 此问题建议删除SDK中的接收器。 在API中真的没有办法解决这个问题吗?关于这个主题的大多数问题都是几年前提出的,并且已经有了很多变化 在最近的Android蓝牙API中

我正在与Android应用程序中的蓝牙低能设备进行连接/配对。开始粘合时,将显示“输入PIN”对话框。当我从代码中设置pin时,它会自动消失。对话框出现和消失的速度非常慢,足以让用户感到困惑和烦恼。如何避免此对话框

我在android BLE指南中找不到任何关于粘合的内容

另一个问题帮助了我,但是解决方案并没有删除对话框。

此问题建议删除SDK中的接收器。

在API中真的没有办法解决这个问题吗?关于这个主题的大多数问题都是几年前提出的,并且已经有了很多变化 在最近的Android蓝牙API中。我目前正在使用API 19(4.4 Kitkat),但如果有帮助的话,我会使用API 22(5.1棒棒糖)

我就是这样做的:

myBluetoothDevice.createBond();
然后,我倾听配对意图,以便能够在正确的时刻提供pin。我也会倾听你的意图

//Register before calling createBond
context.registerReceiver(broadcastReceiver, new IntentFilter(BluetoothDevice.ACTION_BOND_STATE_CHANGED));
context.registerReceiver(broadcastReceiver, new IntentFilter(BluetoothDevice.ACTION_PAIRING_REQUEST));

//The recievers
final BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
    String action = intent.getAction();        

    if (BluetoothDevice.ACTION_PAIRING_REQUEST.equals(action))
    {
    BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
        byte[] pin = convertPinToBytes("111111"); //convertPinToBytes for some reason not available in API, so I made a copy
        device.setPin(pin);
    }

    if (BluetoothDevice.ACTION_BOND_STATE_CHANGED.equals(action)) {
        if (BluetoothDevice.BOND_BONDED == device.getBondState())
        {
            //Success!
        }
    }
}

您使用pin配对而不仅仅是“正常工作”配对有什么具体原因吗?那么你就不需要任何对话框了。@Emil,我想避免其他没有提供应用程序的手机连接到我的设备(或者至少让它更难)。如果知道这个对话框会造成多大的麻烦,我会让用户手动输入pin。我认为这不是正确的方法。取而代之的是发送一些只有你知道的特性。我有完全相同的问题,可能你可以这样做:从Android的蓝牙配对通知中获取回调,并在那里处理任何事情。请分享任何其他解决方案。我需要打开自定义对话框,让用户为ble设备输入名称+pin,在绑定后,我想在本地数据库中保存数据。