122 votes

Démarrer le service dans Android

Je souhaite appeler un service lorsqu'une 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?

294voto

CommonsWare Points 402670

Vous n'avez probablement pas le service dans votre manifeste, ou il n'y a pas de <intent-filter> correspondant à votre action. L'examen de LogCat (via adb logcat , DDMS ou la perspective DDMS dans Eclipse) devrait faire apparaître certains avertissements utiles.

Plus probablement, vous devriez démarrer le service via:

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

88voto

Vitalii Korsakov Points 2194
 startService(new Intent(this, MyService.class));
 

Juste écrire cette ligne ne me suffisait pas. Le service n'a toujours pas fonctionné. Tout avait fonctionné seulement après avoir enregistré le service au manifeste

 <application
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name" >

    ...

    <service
        android:name=".MyService"
        android:label="My Service" >
    </service>
</application>
 

56voto

user2757064 Points 732

Mettez ci-dessous le code où vous souhaitez démarrer Service:

 startService(new Intent(this, NameOfServiceClass.class));
 

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

 <service android:enabled="true" android:name=".NameOfServiceClass" />
 

Pour de meilleures performances, vous pouvez mettre NameOfServiceClass classe dans le même package.

0voto

Murali Points 447

Vous devriez renvoyer ceci , espérer vous aider, il a résolu le mien.

Assurez-vous que cette autorisation dans le manifeste "android.permission.RECEIVE_BOOT_COMPLETED"

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X