gpt4 book ai didi

安卓蓝牙 : Paired devices list

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:33:32 26 4
gpt4 key购买 nike

我有一个带有 SPP 配置文件和蓝牙版本 2.1 的蓝牙设备。
我有一个连接到该设备并与之通信的应用程序。该设备使用“Just Works”配对技术。

我在某些手机上遇到问题,例如 Samsung Galaxy 平板电脑、Galaxy S。

问题是在用户退出应用程序后,我将关闭套接字并断开与设备的连接。成功断开连接后,观察到该设备的条目已从配对设备列表中删除。

最佳答案

我没有使用过平板电脑,但我确实为 Android 手机编写了一个使用 SPP 的应用程序。我发现,为了让蓝牙稳定,我必须手动绑定(bind)我想与之通信的设备。我们使用下面的代码从应用内启动绑定(bind),它应该保持绑定(bind),就像您通过设置菜单手动配对一样。

这是一般流程:1) 注册一个 BroadcastReceiver 来监听 BluetoothDevice.ACTION_BOND_STATE_CHANGED
2) 在设备发现之后你应该有一个 BluetoothDevice 对象。
3) 使用反射调用 BluetoothDeviceObject 上的“createBond”方法
3a) 在打开套接字之前等待绑定(bind)状态更改事件

BluetoothDevice device = {obtained from device discovery};
Method m = device.getClass().getMethod("createBond", (Class[])null);
m.invoke(device, (Object[])null);

int bondState = device.getBondState();
if (bondState == BluetoothDevice.BOND_NONE || bondState == BluetoothDevice.BOND_BONDING)
{
waitingForBonding = true; // Class variable used later in the broadcast receiver

// Also...I have the whole bluetooth session running on a thread. This was a key point for me. If the bond state is not BOND_BONDED, I wait here. Then see the snippets below
synchronized(this)
{
wait();
}
}

4) 等待绑定(bind)状态从 BOND_BONDING 变为 BOND_BONDED

在 BroadcastReciever 中:

public void onReceive(Context context, Intent intent)
{
if (BluetoothDevice.ACTION_BOND_STATE_CHANGED.equals(intent.getAction()))
{
int prevBondState = intent.getIntExtra(BluetoothDevice.EXTRA_PREVIOUS_BOND_STATE, -1);
int bondState = intent.getIntExtra(BluetoothDevice.EXTRA_BOND_STATE, -1);

if (waitingForBonding)
{
if (prevBondState == BluetoothDevice.BOND_BONDING)
{
// check for both BONDED and NONE here because in some error cases the bonding fails and we need to fail gracefully.
if (bondState == BluetoothDevice.BOND_BONDED || bondState == BluetoothDevice.BOND_NONE)
{
// safely notify your thread to continue
}
}
}
}
}

5) 打开套接字并进行通信

您也可以通过反射使用 'removeBond' 方法从配对列表中删除您的设备。

希望这对您有所帮助!

关于安卓蓝牙 : Paired devices list,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8034237/

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