gpt4 book ai didi

Android - 无法连接到 Lollipop 上的蓝牙设备

转载 作者:可可西里 更新时间:2023-11-01 19:00:14 24 4
gpt4 key购买 nike

我有一个在 Android 4.3 和 4.4 上运行良好的应用程序。该应用程序将连接自定义蓝牙设备并与之通信。
在我将 Nexus 5 刷入 Lollipop 后,我突然无法连接到该设备。连接结果总是 133。这是日志:

D/BluetoothGatt﹕ connect() - device: 00:07:80:04:1A:5A, auto: true
D/BluetoothGatt﹕ registerApp()
D/BluetoothGatt﹕ registerApp() - UUID=xxxxxx-xxxx-xxxxx-xxxx-xxxxxxxx
D/BluetoothGatt﹕ onClientRegistered() - status=0 clientIf=6
D/BluetoothGatt﹕ onClientConnectionState() - status=133 clientIf=6 device=00:07:80:04:1A:5A

我的代码:

public boolean connect(final String address) {
if (mBluetoothAdapter == null || address == null) {
return false;
}
Handler handler = new Handler(Looper.getMainLooper());
// Previously connected device. Try to reconnect.
if (mBluetoothDeviceAddress != null
&& address.equals(mBluetoothDeviceAddress)
&& mBluetoothGatt != null) {

handler.post(new Runnable() {
@Override
public void run() {
if (mBluetoothGatt.connect()) {
mConnectionState = STATE_CONNECTING;
}
}
});
if (mConnectionState == STATE_CONNECTING) {
return true;
} else {
return false;
}
}

final BluetoothDevice device = mBluetoothAdapter.getRemoteDevice(address);
if (device == null) {
return false;
}

handler.post(new Runnable() {
@Override
public void run() {
mBluetoothGatt = device.connectGatt(BluetoothConnectService.this, true, mGattCallback);
}
});
mBluetoothDeviceAddress = address;
mConnectionState = STATE_CONNECTING;
return true;
}

有人对此有任何想法吗?

最佳答案

所以我发现问题出在 Lollipop 中的 Transport 选择。
正如您在 here 中看到的那样的变化

BluetoothDevice.connectGatt(上下文上下文, bool 自动连接,BluetoothGattCallback 回调)

函数正在调用

BluetoothDevice.connectGatt(上下文上下文, bool 自动连接,BluetoothGattCallback 回调,int 传输)

传输设置为 TRANSPORT_AUTO。
就我而言,因为我将始终使用 TRANSPORT_LE(值为 2)
我试图从我的代码中调用第二种方法并将传输设置为 TRANSPORT_LE。由于未知原因,我不能直接调用它,所以我使用反射来调用它。到目前为止,这对我来说效果很好。

            if(TTTUtilities.isLollipopOrAbove()) {
// Little hack with reflect to use the connect gatt with defined transport in Lollipop
Method connectGattMethod = null;

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

try {
mBluetoothGatt = (BluetoothGatt) connectGattMethod.invoke(device, BluetoothConnectService.this, false, mGattCallback, TRANSPORT_LE);
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
} else {
mBluetoothGatt = device.connectGatt(BluetoothConnectService.this, true, mGattCallback);
}

如果你们中的任何人对我的回答有疑问,请随时在评论中提问。
谢谢。

关于Android - 无法连接到 Lollipop 上的蓝牙设备,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28018722/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com