Bluecove: reboot bluetooth stack programmatically

I'm trying to close the bluetooth service, but Bluecove has an error in the method of closing the connection ( https://code.google.com/p/bluecove/issues/detail?id=90 ), and I'm trying to make some workaround for restarting the service. I think reloading the bluetoot stack will solve my problem. Can I do this programmatically? I am using microsoft bluetooth stack.

+2
source share
1 answer

The problem is solved in this way.

I restart the application, but first disconnect bluecove manually.

BlueCoveImpl.shutdown(); 

If I just restart the application, bluecove crashes, but cannot initialize the bluetooth stack at startup. The reload method is used here:

 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 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 a jar, add -jar mainJar cmd.append("-jar " + new File(mainCommand[0]).getPath()); } else { // else it 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); } } 
+4
source

All Articles