Bluecove:以编程方式重启蓝牙堆栈



我正在尝试关闭蓝牙服务,但Bluecove在连接关闭方法(https://code.google.com/p/bluecove/issues/detail?id=90)上有bug,我正在尝试做一些解决方案来重新启动服务。我想重启蓝牙堆栈会解决我的问题。我可以用程序来做吗?我用的是微软蓝牙栈

问题就这样解决了。

重新启动应用程序,但首先手动关闭blueecove。

BlueCoveImpl.shutdown();

如果我只重新启动应用程序,bluecove关闭,但不能初始化蓝牙堆栈在启动。下面是重启方法:

public static void restartApplication(Runnable runBeforeRestart)
        throws IOException
{
    try
    {
        // java binary
        String java = System.getProperty("java.home") + "/bin/java";
        // vm arguments
        List<String> vmArguments = ManagementFactory.getRuntimeMXBean()
                .getInputArguments();
        StringBuffer vmArgsOneLine = new StringBuffer();
        for (String arg : vmArguments)
        {
            // if it's the agent argument : we ignore it otherwise the
            // address of the old application and the new one will be in
            // conflict
            if (!arg.contains("-agentlib"))
            {
                vmArgsOneLine.append(arg);
                vmArgsOneLine.append(" ");
            }
        }
        // init the command to execute, add the vm args
        final StringBuffer cmd = new StringBuffer(""" + java + "" "
                + vmArgsOneLine);
        // program main and program arguments
        String[] mainCommand = System.getProperty(SUN_JAVA_COMMAND).split(
                " ");
        // program main is a jar
        if (mainCommand[0].endsWith(".jar"))
        {
            // if it's a jar, add -jar mainJar
            cmd.append("-jar " + new File(mainCommand[0]).getPath());
        }
        else
        {
            // else it's a .class, add the classpath and mainClass
            cmd.append("-cp "" + System.getProperty("java.class.path")
                    + "" " + mainCommand[0]);
        }
        // finally add program arguments
        for (int i = 1; i < mainCommand.length; i++)
        {
            cmd.append(" ");
            cmd.append(mainCommand[i]);
        }
        // execute the command in a shutdown hook, to be sure that all the
        // resources have been disposed before restarting the application
        Runtime.getRuntime().addShutdownHook(new Thread() {
            @Override
            public void run()
            {
                try
                {
                    Runtime.getRuntime().exec(cmd.toString());
                }
                catch (IOException e)
                {
                    e.printStackTrace();
                }
            }
        });
        // execute some custom code before restarting
        if (runBeforeRestart != null)
        {
            runBeforeRestart.run();
        }
        // at first shut down BlueCove manually
        BlueCoveImpl.shutdown();
        System.exit(0);
    }
    catch (Exception e)
    {
        // something went wrong
        throw new IOException(
                "Error while trying to restart the application", e);
    }
}

最新更新