我刚从android开始,使用bluetooth le在android studio中建立了一个api 21项目。
深入BluetoothDevice可以看到connectgatt()方法的两个签名:

public BluetoothGatt connectGatt(Context context, boolean autoConnect,
                                 BluetoothGattCallback callback)


public BluetoothGatt connectGatt(Context context, boolean autoConnect,
                                 BluetoothGattCallback callback, int transport)

我想使用第二个,但构建失败:
错误:(127,26)错误:Bluetooth设备类中的方法connectgatt
无法应用于给定类型;必需:
找到上下文,布尔值,BluetoothGattCallback:
context,boolean,bluetoothgattcallback,int原因:实际和形式
参数列表的长度不同
编译器设置似乎与android studio中的源代码不匹配。
我该怎么解决?

最佳答案

如果要使用隐藏api,可以调用要使用的方法。
但您必须记住,隐藏的api可以随时更改。
你必须自己承担风险使用它。
下面是一个如何使用hidden connectgatt()方法的示例代码。

        Method connectGattMethod;
        BluetoothGatt connectGatt;

        try {
            connectGattMethod = device.getClass().getMethod("connectGatt", Context.class, boolean.class, BluetoothGattCallback.class, int.class);
        } catch (NoSuchMethodException e) {
          //NoSuchMethod
        }

        try {
            connectGatt = (BluetoothGatt) connectGattMethod.invoke(device, this, false, mBluetoothGattCallback, 2); // (2 == LE, 1 == BR/EDR)
        } catch (IllegalAccessException e) {
            //IllegalAccessException
        } catch (IllegalArgumentException e) {
            //IllegalArgumentException
        } catch (InvocationTargetException e) {
            //InvocationTargetException
        }

08-06 18:20