在最新API(Lollipop)上使用PIN与BLE设备绑定时避免用户对话

时间:2015-09-21 08:28:37

标签: android android-5.0-lollipop bluetooth-lowenergy android-4.4-kitkat

我正在通过Android应用与蓝牙低功耗设备绑定/配对。启动绑定时,会显示“输入PIN” - 对话框。当我从代码设置引脚时它会自动消失。对话框出现并消失得足够慢以使用户感到困惑和烦恼。我怎么能避免这个对话?

我在Android BLE指南https://developer.android.com/guide/topics/connectivity/bluetooth-le.html

中找不到任何关于绑定的内容

我被其他问题所帮助,但解决方案并没有删除对话框。 How can I avoid or dismiss Android's Bluetooth pairing notification when I am doing programmatic pairing?

此问题建议删除SDK中的接收者。 Android Prevent Bluetooth Pairing Dialog

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

这就是我如何进行结合:

myBluetoothDevice.createBond();

然后我听取配对意图,以便能够在合适的时刻提供引脚。我也听取了绑定意图。

//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!
        }
    }
}

0 个答案:

没有答案