Démarrer le service sous Android

Je veux appeler un service lorsqu’une certaine activité commence. Alors, voici la classe de service:

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(); } } 

Et voici comment je l’appelle:

 Intent serviceIntent = new Intent(); serviceIntent.setAction("cidadaos.cidade.data.UpdaterServiceManager"); startService(serviceIntent); 

Le problème est que rien ne se passe. Le bloc de code ci-dessus est appelé à la fin de l’activité onCreate . J’ai déjà débogué et aucune exception n’est levée.

Une idée?

Vous n’avez probablement pas le service dans votre manifeste ou il ne possède pas de correspondant à votre action. L’examen de LogCat (via adb logcat , DDMS ou la perspective DDMS dans Eclipse) doit mettre en adb logcat certains avertissements susceptibles de vous aider.

Plus probablement, vous devriez commencer le service via:

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

Juste écrire cette ligne ne me suffisait pas. Le service n’a toujours pas fonctionné. Tout n’avait fonctionné qu’après enregistrement du service au manifeste

  ...    

Code Java pour le service de démarrage :

Démarrer le service à partir de l’ activité :

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

Démarrer le service à partir de 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 Ssortingng 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"); } } 

Définissez ce service dans le fichier manifeste du projet:

Ajoutez la balise ci-dessous dans le fichier manifeste :

  

Terminé

J’aime le rendre plus dynamic

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

n’oublie pas le manifeste