Home Menu

Menu



Programación y Desarrollo para Android Subforo exclusivo para temas de programación de software para PDAs y desarrollo de aplicaciones, interfaces, etc bajo Android


 
Herramientas
  #1  
Viejo 23/06/15, 13:10:04
Avatar de Xasti
Xasti Xasti no está en línea
Usuario poco activo
Mensajes: 3
 
Fecha de registro: jun 2015
Mensajes: 3
Tu operador: Movistar
Mencionado: 0 comentarios
Tagged: 0 hilos
Notificacion barra de estado

Hola, y gracias de antemano, estoy desarrollando un sistema de seguridad para casa con una placa de arduino y lo controlo con una aplicación android que estoy haciendo yo también, ya he conseguido a través de la aplicación tener control de todos los sensores pero no soy capaz de hacer que mi aplicación me mande una notificación a la barra de tareas cuando se activa la alarma. Para ello lo que hago es convertir el html donde esta la información del estado del pin de alarma a un string y este compararle con el texto que deberia haber si la alarma esta activada, para ello uso este codigo:


public String convertirAstring() {
StringBuilder builder = new StringBuilder();
HttpClient client = new DefaultHttpClient();
HttpGet httpGet = new HttpGet("http://192.168.1.134/arduino/digital/13");

try {
HttpResponse response = client.execute(httpGet);

StatusLine statusLine = response.getStatusLine();

int statusCode = statusLine.getStatusCode();

if (statusCode == 200) {
HttpEntity entity = response.getEntity();
InputStream content = entity.getContent();
BufferedReader reader = new BufferedReader(new InputStreamReader(content));

String line;
while ((line = reader.readLine()) != null) {
builder.append(line);
}
}

} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}



public void comprobar(){
String texto = convertirAstring();
String alarma = "Pin D13 set to 1";

if (texto.equals(alarma)) {
lanzamosNotificacion();
}

}

Y el codigo que tengo para la notificación es este:

public void LanzamosNotificacion(){

NotificationManager notificationManager = (NotificationManager)
getSystemService(Context.NOTIFICATION_SERVICE);

int icon = R.drawable.ic_launcher;

CharSequence Text = "La alarma ha sido activada!!.";

CharSequence texto_1 = "Notificación de alarma";

CharSequence texto_titulo = "Alarma!!!!";

long when = System.currentTimeMillis();

Notification notification = new Notification(icon, texto_1, when);

Intent notificationIntent = new Intent(getApplicationContext()
,MainActivity.class);

PendingIntent contentIntent = PendingIntent.getActivity(this,
0, notificationIntent, 0);

notification.setLatestEventInfo(getApplicationCont ext(), texto_titulo,
Text, contentIntent);

notificationManager.notify(1, notification);
}


Lo cierto es que no soy ningún experto, de hecho todo lo contrario y no soy capaz de hacer que funcione, he intentado hacerlo funcionar con AsyncTask pero no consigo que cuando se activa la alarma haga nada.

Si alguien me pudiera echar una mano estaría muy agradecido.

Un saludo.
Responder Con Cita


  #2  
Viejo 23/06/15, 18:57:15
Avatar de Xasti
Xasti Xasti no está en línea
Usuario poco activo
Mensajes: 3
 
Fecha de registro: jun 2015
Mensajes: 3
Tu operador: Movistar
Mencionado: 0 comentarios
Tagged: 0 hilos
Ya he conseguido que lo compruebe y lance la notificación pero solo al inicio del programa, me gustaría saber si hay algún método o alguna forma que realice la comprobación por ejemplo cada segundo, es decir como puedo ejecutar el método que comprueba si la alarma ha saltado cada segundo (ya esta en un hilo diferente ejecutándose).
Responder Con Cita
  #3  
Viejo 23/06/15, 21:13:48
Avatar de kriogeN
kriogeN kriogeN no está en línea
Colaborador/a
Mensajes: 4,637
Compra y venta: (1)
 
Fecha de registro: oct 2010
Localización: Murcia
Mensajes: 4,637
Modelo de smartphone: Samsung Galaxy S7 Edge SM-G935F
Versión de ROM: CM13 - CM 11
Tu operador: Vodafone
Mencionado: 60 comentarios
Tagged: 3 hilos
Cita:
Originalmente Escrito por Xasti Ver Mensaje
Ya he conseguido que lo compruebe y lance la notificación pero solo al inicio del programa, me gustaría saber si hay algún método o alguna forma que realice la comprobación por ejemplo cada segundo, es decir como puedo ejecutar el método que comprueba si la alarma ha saltado cada segundo (ya esta en un hilo diferente ejecutándose).
Es algo bastante amplio como para explicar si no tienes conocimientos profundos de como gestiona Android las aplicaciones. Por puntos:

1) Los hilos de una app en Android sólo funcionan al 100% si la app está en primer plano, si pasa a segundo plano pueden morir.

2) Para asegurar que un proceso en segundo plano funcione al 100% debe ejecutarse en un servicio, y además ese servicio ser de tipo START_STICKY, es decir, que si se muere el sistema automáticamente lo vuelva a relanzar.

3) Cuando apagas la pantalla del móvil el sistema puede entrar en modo SLEEP, y en ese modo incluso los servicios dejan de funcionar.

4) Para poder ejecutar código en modo SLEEP debes de adquirir un WAKE_LOCK, que hace que hasta que no lo liberes el móvil no pueda entrar en modo SLEEP.

5) Obviamente lo anterior hace que el móvil se funda la batería, así que si vas a hacerlo así lo mejor es acompañarlo con una alarma, para que lo haga cada X tiempo en lugar de continuamente. Obviamente cuanto menor sea el periodo de tiempo más tiempo estará el móvil sin entrar en modo SLEEP y menos durará la batería.

6) Lo único que se ejecuta si o si aunque el móvil esté en modo SLEEP es una entrada de una notificación Push.

Así que con todo esto, te explico lo mejor para tu caso:

Que sea el Arduino el que compruebe el estado continuamente, y cuando salte la alarma envíe una notificación Push al móvil.
Responder Con Cita
  #4  
Viejo 24/06/15, 11:45:22
Avatar de Xasti
Xasti Xasti no está en línea
Usuario poco activo
Mensajes: 3
 
Fecha de registro: jun 2015
Mensajes: 3
Tu operador: Movistar
Mencionado: 0 comentarios
Tagged: 0 hilos
Gracias por la contestación, al final conseguí hacerlo metiendo un Timer que ejecute el código de comprobación cada segundo y funciona a la perfección, muchas gracias de todas formas
Responder Con Cita
  #5  
Viejo 24/06/15, 15:43:07
Avatar de kriogeN
kriogeN kriogeN no está en línea
Colaborador/a
Mensajes: 4,637
Compra y venta: (1)
 
Fecha de registro: oct 2010
Localización: Murcia
Mensajes: 4,637
Modelo de smartphone: Samsung Galaxy S7 Edge SM-G935F
Versión de ROM: CM13 - CM 11
Tu operador: Vodafone
Mencionado: 60 comentarios
Tagged: 3 hilos
Cita:
Originalmente Escrito por Xasti Ver Mensaje
Gracias por la contestación, al final conseguí hacerlo metiendo un Timer que ejecute el código de comprobación cada segundo y funciona a la perfección, muchas gracias de todas formas
Usar Timer es una de las peores cosas para una aplicación que quieres ejecutar completamente en segundo plano. Es casi como usar AlarmManager pero dependiente de la app en lugar de dependiente del Kernel.

Es casi como lo que te he dicho en el punto 5 de mi anterior post, sólo que yo me refería al AlarmManager. Pero si te funciona con el Timer en tu móvil, perfecto.

Eso si, haz la siguiente prueba. Deja el móvil completamente dormido y luego fuerza que tenga que llegar la notificación. Si llega, perfecto. Si no llega ya sabrás porque es mejor usar AlarmManager. Aunque con 1 segundo no se ni siquiera si le dará tiempo al móvil a dormirse.

Sea como sea, sigue siendo un funde baterías.
Responder Con Cita
Respuesta

Estás aquí
Regresar   HTCMania > Todo sobre Android > Programación y Desarrollo para Android


Reglas de Mensajes
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Las caritas están On
Código [IMG] está On
Código HTML está Off

Saltar a Foro



Hora actual: 13:30:53 (GMT +2)

Cookies
Powered by vBulletin™
Copyright © vBulletin Solutions, Inc. All rights reserved.
 
HTCMania: líderes desde el 2007