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

Respuesta
 
Herramientas
  #1  
Viejo 07/12/14, 19:15:29
Array

[xs_avatar]
albertokrt albertokrt no está en línea
Usuario novato en la web
 
Fecha de registro: dic 2014
Mensajes: 1
Tu operador: Movistar

Problema con servicio

Hola a todos y gracias de antemano a todos aquellos que puedan ayudarme a resolver mis dudas. Llevo muy poco tiempo desarrollando (o intentandolo) aplicaciones en android y estos días probando diferentes cosas me he encontrado con el siguiente problema:

He creado una activity que simplemente al pulsar un botón lanza un service el cual por medio de geolocalización me proporciona las coordenadas de latitud y longitud para almacenarlas en una base de datos. En principio todo funciona correctamente. Arranca la activity y al pulsar el botón para lanzar el servicio aparece en la barra de notificaciones el icono de uso del GPS, el servicio captura las coordenadas y se guardan en una base de datos. Si salgo de la activity y compruebo en mi dispositivo las aplicaciones que estan en ejecución puedo ver que mi aplicación está ejecutando un proceso y un servicio.

El problema surge al ejecutar una aplicación para liberar memoria tipo "Clean Master", en ese momento el icono de GPS de la barra de notificaciones desaparece y el servicio deja de capturar coordenadas, como es normal. Al dirigirme nuevamente a las aplicaciones en ejecución de mi dispositivo veo que mi aplicación ahora está ejecutando cero procesos y un servicio. La pregunta es obvia, ¿Que puedo hacer para evitar esto?.

este es el código que utilizo:

Servicio:

public class mServicio extends Service {
private LocationManager mLocManager;
private LocationListener mLocListener;

public mServicio() {
Log.v("krt", "mServicio-> Constructor");
}

@Override
public IBinder onBind(Intent intent) {
return null;
}

@Override
public void onCreate() {
super.onCreate();
Log.v("krt", "mServicio-> onCreate");

mLocManager= (LocationManager)getSystemService(LOCATION_SERVICE );
mLocListener= new LocationListener() {
@Override
public void onLocationChanged(Location location) {
//Obtengo las coordenadas y las almaceno en la bd
}

@Override
public void onStatusChanged(String provider, int status, Bundle extras) {

}

@Override
public void onProviderEnabled(String provider) {

}

@Override
public void onProviderDisabled(String provider) {

}
};
mLocManager.requestLocationUpdates(LocationManager .GPS_PROVIDER, 10000, 0, mLocListener, Looper.getMainLooper());
}

@Override
public void onDestroy() {
super.onDestroy();
Log.v("krt", "mServicio-> onDestroy");
mLocManager.removeUpdates(mLocListener);

}
}

Actividad Principal:


public class MainAct extends Activity {
private Intent mServicio;

private Button btnIniciarServicio;

public MainAct() {
Log.v("krt", "MainAct-> Constructor");
}

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.v("krt", "MainAct-> onCreate");
setContentView(R.layout.main);

IniciarVariables();

}

@Override
protected void onStart() {
super.onStart();
Log.v("krt", "MainAct-> onStart");
}

@Override
protected void onRestart() {
super.onRestart();
Log.v("krt", "MainAct-> onReStart");
}

@Override
protected void onResume() {
super.onResume();
Log.v("krt", "MainAct-> onResume");
}

@Override
protected void onPause() {
super.onPause();
Log.v("krt", "MainAct-> onPause");
}

@Override
protected void onStop() {
super.onStop();
Log.v("krt", "MainAct-> onStop");
}

@Override
protected void onDestroy() {
super.onDestroy();
Log.v("krt", "mainAct-> OnDestroy");
}

public void IniciarVariables(){

btnIniciarServicio= (Button) findViewById(R.id.btnIniciarServicio);
btnIniciarServicio.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {

mServicio= new Intent (getApplicationContext(), mServicio.class);
startService(mServicio);
}
});

}
}


Pd: También he intentado ejecutar el servicio en un hilo aparte con idénticos resultados.
Responder Con Cita


  #2  
Viejo 07/12/14, 21:38:54
Array

[xs_avatar]
kriogeN kriogeN no está en línea
Colaborador/a
· Votos compra/venta: (1)
 
Fecha de registro: oct 2010
Localización: Murcia
Mensajes: 4,637
Modelo de smartphone: Samsung Galaxy S7 Edge SM-G935F
Tu operador: Vodafone
Tienes que sobreescribir onStartCommand en el servicio y devolver START_STICKY o START_REDELIVER_INTENT, dependiendo de lo que necesites, en tu caso con START_STICKY será suficiente:

public int onStartCommand(Intent intent, int flags, int startId) {
super.onStartCommand(intent, flags, startId);
return START_STICKY;
}

De todas formas te recuerdo que mientras el dispositivo esté en modo suspensión (pantalla apagada) tu servicio no va a funcionar.
Responder Con Cita
Respuesta

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



Hora actual: 12:40:29 (GMT +1)



User Alert System provided by Advanced User Tagging (Lite) - vBulletin Mods & Addons Copyright © 2025 DragonByte Technologies Ltd.

Contactar por correo / Contact by mail / 邮件联系 /