我有一个连接到我的Raspberry PI的蓝牙加密狗,我希望它使用以下代码来检测蓝牙设备
LocalDevice local = LocalDevice.getLocalDevice();
DiscoveryAgent agent = local.getDiscoveryAgent();
inquiryStarted = agent.startInquiry(DiscoveryAgent.GIAC, new DiscoveryListener() {
public void deviceDiscovered(RemoteDevice device, DeviceClass cod) {
System.out.println("Discovered: " + device.getFriendlyName());
}
@Override
public void inquiryCompleted(int arg0) {}
@Override
public void serviceSearchCompleted(int arg0, int arg1) {}
@Override
public void servicesDiscovered(int arg0, ServiceRecord[] arg1) {}
});
但是,我一开始就得到BluetoothStateException
,
LocalDevice local = LocalDevice.getLocalDevice();
我使用those instructions安装了加密狗,实际上,当我在PI上启动“首选项”>“蓝牙管理器”时,可以检测到iBeacon设备,因此加密狗正在工作。
对于蓝牙,我正在使用BlueCove。它的文档说,对于Linux,需要BlueZ蓝牙堆栈,实际上是在加密狗的配置过程中安装的。
有趣的是BlueCove文档提到了
如果自动蓝牙堆栈检测不足,则可以使用Java系统属性“ bluecove.stack”强制进行所需的堆栈初始化。值“ widcomm”,“ bluesoleil”或“ winsock”。默认情况下,选择winsock(如果可用)。
但是当我尝试获取bluecove.stack
系统属性时
String bluecoveStack = System.getProperty("bluecove.stack")
我得到null
作为回报。
在我的Java应用中可以使用LocalDevice
之前,还需要做更多的事情吗?