以编程方式关闭BlueCove堆栈

时间:2011-06-24 07:43:33

标签: java

有没有办法关闭BlueCove堆栈,在我的应用程序中,用户可以随时启动,停止和重启蓝牙服务器,因为我可以启动服务器,监听连接,接受来自客户。但是当我尝试停止并重新启动BlueCove时,我得到了BluetoothStateException,而不是重启应用程序本身。

关于我使用的关闭,

BlueCoveImpl.shutdown();

和另一件事

BlueCoveImpl blueCoveImpl = BlueCoveImpl.instance();
blueCoveImpl.setBluetoothStack(null);

但两者都不适合我。

任何想法都可以做到这一点。

编辑:当我关闭整个应用程序时,它会显示

  

BlueCove堆栈关闭完成

控制台中的

感谢。

2 个答案:

答案 0 :(得分:2)

当我启动蓝牙服务器时,我使用

将其设置为在搜索模式下可见
LocalDevice local = LocalDevice.getLocalDevice();
local.setDiscoverable(DiscoveryAgent.GIAC);

并停止服务器我刚刚添加了以下代码,

local.setDiscoverable(DiscoveryAgent.NOT_DISCOVERABLE);

这个解决了我的问题。

答案 1 :(得分:1)

蓝牙堆栈保持有效,直到您手动关闭它或直到它在程序退出时关闭。

使用com.intel.bluetooth.BlueCoveImpl中的以下内容调用手动关闭:

BlueCoveImpl.shutdown();

From the docs

  

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()将再次显示第一条消息。