Hola a todos,
he desarrollado una aplicación en Android para domótica que me permite actuar por medio de la voz sobre los diferentes módulos que tengo conectados. Me permite apagar o encender luces, subir o bajar intensidades lumínicas etc por medio de la voz y funciona correctamente. El problema que se me presenta es que cuando mando la instrucción al servidor web tarda unos segundos en aceptarme la conexión puesto que lleva autenticación básica. Tras unos segundos me deja entrar y procesa bien la instrucción pero, como en ocasiones debo mandar varias instrucciones para ver el estado en que se encuentra un módulo y en función del estado actuar sobre él, en ocasiones debo mandar tres o cuatro instrucciones seguidas y cada vez la autenticación suma segundos con lo que a lo mejor le digo a una luz que aumente su intensidad un 25% y mientras borra el buffer (1 instrucción), consulta el estado del módulo(2ª instrucción) y actúo sobre el módulo (3ª) instrucción, tarda unos 15 s en responder y esto no es admisible.
La forma que tengo de acceder al servicio web es mediante el siguiente código que repito para cada instrucción, es decir, mando la sentencia como un parámetro.
public static String lanzaInstruccion(String sentencia) throws IOException {
String devuelveHub = "";
String userpass = Lavoz.usuario + ":" + Lavoz.contrasena;
String basicAuth = "Basic "
+ org.example.lavoz.Base64.encodeBytes(userpass.getB ytes());
URL url = new URL(sentencia);
HttpURLConnection uc = (HttpURLConnection) url.openConnection();
uc.setRequestProperty("Authorization", basicAuth);
if (uc.getResponseCode() == HttpURLConnection.HTTP_OK) {
BufferedReader leido = new BufferedReader(new InputStreamReader(
uc.getInputStream()));
String linea;
while ((linea = leido.readLine()) != null)
devuelveHub = devuelveHub + linea;
leido.close();
} else {
return null;
}
return devuelveHub;
}
Como véis, cada vez que mando una sentencia, se autentica.
No sé como podría lanzar las tres instrucciones con una sóla autenticación.
Lo que quisiera es que la conexión se mantuviera abierta mientras el programa esté activo y se cree al ser lanzado en una actividad inicial.
Os agradezco a todos vuestra atención. Un cordial saludo