有没有办法关闭BlueCove堆栈,在我的应用程序中,用户可以随时启动,停止和重启蓝牙服务器,因为我可以启动服务器,监听连接,接受来自客户。但是当我尝试停止并重新启动BlueCove时,我得到了BluetoothStateException,而不是重启应用程序本身。
关于我使用的关闭,
BlueCoveImpl.shutdown();
和另一件事
BlueCoveImpl blueCoveImpl = BlueCoveImpl.instance();
blueCoveImpl.setBluetoothStack(null);
但两者都不适合我。
任何想法都可以做到这一点。
编辑:当我关闭整个应用程序时,它会显示
控制台中的BlueCove堆栈关闭完成
。
感谢。
答案 0 :(得分:2)
当我启动蓝牙服务器时,我使用
将其设置为在搜索模式下可见LocalDevice local = LocalDevice.getLocalDevice();
local.setDiscoverable(DiscoveryAgent.GIAC);
并停止服务器我刚刚添加了以下代码,
local.setDiscoverable(DiscoveryAgent.NOT_DISCOVERABLE);
这个解决了我的问题。
答案 1 :(得分:1)
蓝牙堆栈保持有效,直到您手动关闭它或直到它在程序退出时关闭。
使用com.intel.bluetooth.BlueCoveImpl
中的以下内容调用手动关闭:
BlueCoveImpl.shutdown();
public static void shutdown()
关闭BlueCove初始化的所有BluetoothStacks接口
您也可以使用:
public static void shutdownThreadBluetoothStack()
关闭为当前线程分配的BluetoothStack并清除此线程的配置属性
我可以确认这与在程序结束时自动执行的操作相同...当首次使用LocalDevice.getLocalDevice()
之类的内容进行初始化时,您将看到控制台打印出来:< / p>
在winsock上的BlueCove版本2.1.1-SNAPSHOT
或类似的东西。终止时,控制台打印:
BlueCove堆栈关闭完成
但是,如果在程序结束前调用shutdown()
,&#34; BlueCove堆栈关闭完成&#34;不会打印。此外,再次呼叫LocalDevice.getLocalDevice()
将再次显示第一条消息。