当前位置: 首页 > 知识库问答 >
问题:

Android,我怎样才能让设备对配对设备(绑定)

东郭昌胤
2023-03-14

在GATT之前,createRfcomSocketToService记录,createInsecureRfcomSocketToService记录

方法可以制作配对设备,

但是GATT对配对设备没有选择,只能使用BluetoothDevice.connectGatt(...)

我想做一个配对设备,如果它已经连接。

thx.

共有1个答案

胡锋
2023-03-14

据我所知,在BLE中启动配对程序有两种方法:

1) 从API 19及更高版本,您可以通过调用mBluetoothDevice开始配对。createBond()。您无需连接远程设备即可开始配对过程。

2) 当你尝试做一个Gatt操作时,让我们以这个方法为例

mBluetoothGatt.readCharacteristic(characteristic)

如果远程BLE设备需要连接以进行任何通信,那么当回调

gatt,BluetoothGatt特性,int状态

被称为它的状态参数值将等于GATT_INSUFFICIENT_AUTHENTICATIONGATT_INSUFFICIENT_ENCRYPTION,而不等于GATT_SUCCESS。如果发生这种情况,配对过程将自动启动。

下面是一个示例,以了解调用onCharacteristicRead回调后它何时失败

@Override
public void onCharacteristicRead(
        BluetoothGatt gatt,
        BluetoothGattCharacteristic characteristic,
        int status)
{

    if(BluetoothGatt.GATT_SUCCESS == status)
    {
        // characteristic was read successful
    }
    else if(BluetoothGatt.GATT_INSUFFICIENT_AUTHENTICATION == status ||
            BluetoothGatt.GATT_INSUFFICIENT_ENCRYPTION == status)
    {
        /*
         * failed to complete the operation because of encryption issues,
         * this means we need to bond with the device
         */

        /*
         * registering Bluetooth BroadcastReceiver to be notified
         * for any bonding messages
         */
        IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_BOND_STATE_CHANGED);
        mActivity.registerReceiver(mReceiver, filter);
    }
    else
    {
        // operation failed for some other reason
    }
}

其他人提到此操作自动启动配对程序:Android蓝牙低能耗配对

这就是接收机的实现方式

private final BroadcastReceiver mReceiver = new BroadcastReceiver()
{
    @Override
    public void onReceive(Context context, Intent intent)
    {
        final String action = intent.getAction();

        if (action.equals(BluetoothDevice.ACTION_BOND_STATE_CHANGED))
        {
            final int state = intent.getIntExtra(BluetoothDevice.EXTRA_BOND_STATE, BluetoothDevice.ERROR);

            switch(state){
                case BluetoothDevice.BOND_BONDING:
                    // Bonding...
                    break;

                case BluetoothDevice.BOND_BONDED:
                    // Bonded...
                    mActivity.unregisterReceiver(mReceiver);
                    break;

                case BluetoothDevice.BOND_NONE:
                    // Not bonded...
                    break;
            }
        }
    }
};

 类似资料:
  • 我使用与相同的代码来配对设备,就像我用于配对一样。我不确定该代码是否适用于BLE,因为我目前或以后没有BLE设备要测试(只有客户端可以测试)。 我的蓝牙经典配对代码- 这里的每个列表项都是需要绑定的设备。 所以我们点击这个项目,然后它就会被上面的代码绑定。(这适用于经典的蓝牙配对)。 相同的代码是否适用于BLE配对? 我没有找到BLE设备的任何配对代码,也没有找到任何与配对相关的在线/官方信息。这

  • 我正在Visual Studio 2015中用C语言为运行Windows IoT Core的Raspberry PI 2设备开发。 对于我的应用程序,我需要配对和取消配对蓝牙设备 我可以获得配对/未配对/所有蓝牙设备的列表吗<类似于内置管理网站的蓝牙页面(http://[设备IP]:8080/Bluetooth.htm) 我找到了一个例子(https://github.com/Microsoft/

  • 我想查找没有已配对设备的蓝牙设备。但是我的python脚本显示了我配对的设备上的蓝牙设备。如何只过滤打开的设备并忽略电脑中的配对设备,而不删除它们。 这是我的剧本

  • 我正在尝试枚举所有与我的设备配对的蓝牙设备。在设置中,我可以查看配对的设备,但以下代码不返回任何项目: 我看过这篇和其他使用这种方法的帖子,但我似乎无法让它发挥作用。 我在Manifest.xml有以下权限: 此外,如果我将其中一个已配对的设备置于发现模式并进行扫描,则该设备会以已配对的状态返回。如果我检查: 从扫描中,它返回true。 我做错了什么或不理解什么?

  • 问题内容: 我正在创建一个应通过蓝牙连接到特定设备的应用程序。 无论设备是否已配对,我都希望我的应用程序与此设备连接。 现在我有这个 但是此功能仅连接到配对的设备。如果我的设备尚未配对,我想将其配对。不知道该怎么做。 有人可以给我任何建议吗? 问题答案: 首次请求权限。 然后使您的设备可发现: 然后创建一个 BroadcastReceiver 来监听系统中的动作: 并通过注册以下 Boardcas

  • 是否可以自动连接到蓝牙低能耗(BLE)设备? Android文档表明[](https://developer.android.com/reference/android/bluetooth/BluetoothDevice.html#connectGatt(android.content.Context,boolean,android.bluetooth.BluetoothGattCallback)