我想要编写一个充当蓝牙客户端的应用程序。我想要做的是弄清楚什么是最好的方法来判断我支持的特定设备是否在范围内,而不是一直尝试对其进行BluetoothDevice.connect()并且失败如果它不在范围内这里我们假设设备已经配对。
我担心尝试连接到特定设备直到它在范围内是不好的做法。在我看来这对电池来说会有坏处。
有人知道应该用什么方法或概念来完成我想要做的事情吗?
谢谢!
答案 0 :(得分:1)
好的,我从你的问题中了解到你想获得你配对的设备的名称,以及它是否在范围内?
所以这是解决方案: -
class DeviceDetails { public String name; public String address; public BluetoothDevice remoteDevice; }
您需要按照here的说明连接和配对设备,一旦完成并建立连接,请创建DeviceDetails的对象。
DeviceDetails selectedDevice;
如果你有一个自定义适配器来显示设备列表,则从视图到selectedDevice引用的位置传递。示例: - selectedDevice = adapter.getItem(pos);
现在您已选择要配对的SelectedDevice对象,因此您可以在
中保存其地址和名称偏好。
Example:-
savePairedDeviceInfo(selectedDevice.name, selectedDevice.address);
public void savePairedDeviceInfo(String name, String addr)
{
if(name != null && !name.equalsIgnoreCase(""))
editor.putString(PNAME_OF_DEVICE, name);
if(addr != null && !addr.equalsIgnoreCase(""))
editor.putString(MAC_ADDRESS_OF_DEVICE, addr);
editor.commit();
}
现在,下次您想要检查是否完成配对设置时,通过从首选项中获取值来检查设备的名称和地址。使用支票(如果cond。)返回true,配对的旧设备相同或其他。
如果配对设备在范围内,您将获得相同的值,否则它会尝试与其他设备配对。
如果您从我的解释中了解,请告诉我。
答案 1 :(得分:0)
您可以按照以下方式:
答案 2 :(得分:0)
如果发现新设备,则启动设备发现并检查 BluetoothDevice BONDED 状态。
val isBonded = discoveredDevice.bondState == BluetoothDevice.BOND_BONDED