【问题标题】:Shutdown BlueCove stack programmatically以编程方式关闭 BlueCove 堆栈
【发布时间】:2017-08-05 17:12:22
【问题描述】:

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

对于我使用的关机,

BlueCoveImpl.shutdown();

还有一件事

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

但两者都不适合我。

任何想法来做到这一点。

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

BlueCove 堆栈关闭完成

在控制台中。

谢谢。

【问题讨论】:

    标签: java


    【解决方案1】:

    当我启动蓝牙服务器时,我将它设置为在搜索模式下可见,

    LocalDevice local = LocalDevice.getLocalDevice();
    local.setDiscoverable(DiscoveryAgent.GIAC);
    

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

    local.setDiscoverable(DiscoveryAgent.NOT_DISCOVERABLE);
    

    这个解决了我的问题。

    【讨论】:

    • 虽然这确实关闭了蓝牙通信,但它并没有完全关闭蓝牙堆栈。我不确定这是否是一个糟糕的选择,但我认为这样做不会释放堆栈正在使用的资源。
    【解决方案2】:

    Bluetooth 堆栈保持活动状态,直到您手动将其关闭或在程序退出时关闭。

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

    BlueCoveImpl.shutdown();
    

    From the docs:

    公共静态无效关机()

    关闭所有由 BlueCove 初始化的 BluetoothStacks 接口

    你也可以使用:

    public static void shutdownThreadBluetoothStack()

    关闭分配给当前线程的蓝牙堆栈并清除该线程的配置属性


    我可以确认这与程序结束时自动完成的工作相同...当第一次使用 LocalDevice.getLocalDevice() 之类的东西进行初始化时,您会看到控制台打印出来:

    Winsock 上的 BlueCove 版本 2.1.1-SNAPSHOT

    或类似的东西。终止时,控制台打印:

    BlueCove 堆栈关闭完成

    但是,如果您在程序结束之前调用shutdown(),则不会打印“BlueCove stack shutdown completed”。另外,再次拨打LocalDevice.getLocalDevice()会再次弹出第一条消息。

    【讨论】:

      猜你喜欢
      • 2013-04-28
      • 1970-01-01
      • 2010-12-13
      • 1970-01-01
      • 1970-01-01
      • 2013-05-26
      • 1970-01-01
      • 2020-07-16
      • 1970-01-01
      相关资源
      最近更新 更多