gpt4 book ai didi

Android.bluetooth.IBluetooth.createBond() 未在 4.2.1 中找到,但适用于早期操作系统版本

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:07:09 25 4
gpt4 key购买 nike

我有一些代码可以通过调用 createBond() 自动与蓝牙设备配对,为 android.bluetooth.device.action.PAIRING_REQUEST 注册一个广播接收器,然后手动输入 PIN 码进行配对。

到目前为止,这在所有测试过的设备上都运行良好,直到 Andoid 4.0,但今天我在我的 Nexus 7 和 Android 4.2.1 上尝试了这个并收到以下错误:

java.lang.noSuchMethodException: android.bluetooth.IBluetooth.createBond

他们真的从库中删除了这个函数吗?

更新

实际发生的是我用来调用 createBond 的 IBluetooth 接口(interface)对象没有被初始化。在以下代码中,尝试获取名为 BTBinder 的 IBinder 的行在该过程失败时返回 null,导致 BTInterface 最后设置为 null。所以,我现在的问题是,为什么在我的 Nexus 7 和 Android 4.2.1 上调用 Binder 返回 null 但在我测试过的其他 5 台设备上正常工作?

public static IBluetooth getBluetoothInterface()
{
//Gets a bluetooth interface from private Android system API
IBluetooth BTInterface = null;

try
{
Class<?> ServiceManager = Class.forName("android.os.ServiceManager");
Method getService = ServiceManager.getDeclaredMethod("getService", String.class);
IBinder BTBinder = (IBinder) getService.invoke(null, "bluetooth");
Class<?> IBluetooth = Class.forName("android.bluetooth.IBluetooth");
Class<?>[] IBluetoothClasses = IBluetooth.getDeclaredClasses();
Class<?> IBluetoothClass0 = IBluetoothClasses[0];
Method asInterface = IBluetoothClass0.getDeclaredMethod("asInterface",IBinder.class);
asInterface.setAccessible(true);
BTInterface = (IBluetooth) asInterface.invoke(null, BTBinder);
}
catch (Exception e)
{
return null;
}

return BTInterface;
}

最佳答案

在 Android 4.2 中,他们更改了蓝牙堆栈实现。

“Android 4.2 引入了针对 Android 设备优化的新蓝牙堆栈。Google 和 Broadcom 合作开发的新蓝牙堆栈取代了基于 BlueZ 的堆栈,并提供了更高的兼容性和可靠性。”

即使在 Nexus 7 上使用公共(public) api,也有很多与 bt 相关的东西无法工作。

关于Android.bluetooth.IBluetooth.createBond() 未在 4.2.1 中找到,但适用于早期操作系统版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13767972/

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