Quiero llamar a un servicio cuando comienza una determinada actividad. Entonces, aquí está la clase de servicio:
public class UpdaterServiceManager extends Service {
private final int UPDATE_INTERVAL = 60 * 1000;
private Timer timer = new Timer();
private static final int NOTIFICATION_EX = 1;
private NotificationManager notificationManager;
public UpdaterServiceManager() {}
@Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
return null;
}
@Override
public void onCreate() {
// Code to execute when the service is first created
}
@Override
public void onDestroy() {
if (timer != null) {
timer.cancel();
}
}
@Override
public int onStartCommand(Intent intent, int flags, int startid) {
notificationManager = (NotificationManager)
getSystemService(Context.NOTIFICATION_SERVICE);
int icon = android.R.drawable.stat_notify_sync;
CharSequence tickerText = "Hello";
long when = System.currentTimeMillis();
Notification notification = new Notification(icon, tickerText, when);
Context context = getApplicationContext();
CharSequence contentTitle = "My notification";
CharSequence contentText = "Hello World!";
Intent notificationIntent = new Intent(this, Main.class);
PendingIntent contentIntent = PendingIntent.getActivity(this, 0,
notificationIntent, 0);
notification.setLatestEventInfo(context, contentTitle, contentText,
contentIntent);
notificationManager.notify(NOTIFICATION_EX, notification);
Toast.makeText(this, "Started!", Toast.LENGTH_LONG);
timer.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
// Check if there are updates here and notify if true
}
}, 0, UPDATE_INTERVAL);
return START_STICKY;
}
private void stopService() {
if (timer != null) timer.cancel();
}
}
Y así es como lo llamo:
Intent serviceIntent = new Intent();
serviceIntent.setAction("cidadaos.cidade.data.UpdaterServiceManager");
startService(serviceIntent);
El problema es que no pasa nada. El bloque de código anterior se llama al final de la actividad onCreate
. Ya depuré y no se lanza ninguna excepción.
¿Alguna idea?
android
service
android-activity
Miguel Ribeiro
fuente
fuente
START_STICKY
, reiniciará el servicio, pero solo se llamará a onCreate y no se reiniciará la var del temporizador. Puede jugar conSTART_REDELIVER_INTENT
el servicio de alarma o el programador de trabajos API 21 para solucionar este problema.<service android:name="your.package.name.here.ServiceClass" />
la etiqueta de la aplicación.Respuestas:
Probablemente no tenga el servicio en su manifiesto, o no tenga un servicio
<intent-filter>
que coincida con su acción. Examinar LogCat (a través deadb logcat
, DDMS o la perspectiva de DDMS en Eclipse) debería mostrar algunas advertencias que pueden ayudar.Lo más probable es que deba iniciar el servicio a través de:
fuente
Simplemente escribir esta línea no fue suficiente para mí. El servicio aún no funcionaba. Todo había funcionado solo después de registrar el servicio en el manifiesto
fuente
Código Java para iniciar el servicio :
Iniciar el servicio desde la actividad :
Iniciar servicio desde Fragmento :
MyService.java :
Defina este servicio en el archivo de manifiesto del proyecto:
Agregue la siguiente etiqueta en el archivo de manifiesto :
Hecho
fuente
Me gusta hacerlo mas dinámico
no te olvides del manifiesto
fuente
agregar servicio en colector
para ejecutar el servicio en oreo y dispositivos más grandes, utilizar para el servicio terrestre y mostrar una notificación al usuario
o use el servicio de geofencing para actualizar la ubicación en la referencia de fondo http://stackoverflow.com/questions/tagged/google-play-services
fuente