Comience el servicio en Android

Quiero llamar a un servicio cuando comienza cierta 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?

Probablemente no tenga el servicio en su manifiesto, o no tenga un que coincida con su acción. Examinar LogCat (a través de adb logcat , DDMS o la perspectiva de DDMS en Eclipse) debe aparecer algunas advertencias que pueden ser útiles.

Lo más probable es que debas comenzar el servicio a través de:

 startService(new Intent(this, UpdaterServiceManager.class)); 
 startService(new Intent(this, MyService.class)); 

Simplemente escribir esta línea no fue suficiente para mí. El servicio aún no funcionó. Todo había funcionado solo después de registrar el servicio en manifiesto

  ...    

Código de Java para el servicio de inicio :

Comience el servicio desde la actividad :

 startService(new Intent(MyActivity.this, MyService.class)); 

Comience el servicio desde Fragment :

 getActivity().startService(new Intent(getActivity(), MyService.class)); 

MyService.java :

 import android.app.Service; import android.content.Intent; import android.os.Handler; import android.os.IBinder; import android.util.Log; public class MyService extends Service { private static String TAG = "MyService"; private Handler handler; private Runnable runnable; private final int runTime = 5000; @Override public void onCreate() { super.onCreate(); Log.i(TAG, "onCreate"); handler = new Handler(); runnable = new Runnable() { @Override public void run() { handler.postDelayed(runnable, runTime); } }; handler.post(runnable); } @Override public IBinder onBind(Intent intent) { return null; } @Override public void onDestroy() { if (handler != null) { handler.removeCallbacks(runnable); } super.onDestroy(); } @Override public int onStartCommand(Intent intent, int flags, int startId) { return START_STICKY; } @SuppressWarnings("deprecation") @Override public void onStart(Intent intent, int startId) { super.onStart(intent, startId); Log.i(TAG, "onStart"); } } 

Defina este Servicio en el Archivo de Manifiesto del Proyecto:

Añada la etiqueta siguiente en el archivo Manifiesto :

  

Hecho

Me gusta hacerlo más dynamic

 Class serviceMonitor = MyService.class; private void startMyService() { context.startService(new Intent(context, serviceMonitor)); } private void stopMyService() { context.stopService(new Intent(context, serviceMonitor)); } 

no olvides el Manifiesto

  
    Intereting Posts