Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Service] Arrêt à tout moment

    3 octobre 2019 à 18:11:19

    Bonjour,

    J'ai une application en cours que je fais à titre personnel est qui est un RPG version mobile dans lequel vous incarnez un personnage, pour gagner de l'expérience et monter de niveau vous devez larcher, chaque pas = 1 point d'experience.

    J'ai donc crée un service qui s'en occupe dont le voici mais qui se stop à tout moment alors que je souhaite qu'il tourne en arrière plan, j'ai pourtant suivit un livre que j'ai acheté sur les services Android :

    package com.caranille.caranillemonsters.Kernel;
     
    import android.app.Notification;
    import android.app.NotificationManager;
    import android.app.PendingIntent;
    import android.app.Service;
    import android.app.TaskStackBuilder;
    import android.content.Context;
    import android.content.Intent;
    import android.hardware.Sensor;
    import android.hardware.SensorEvent;
    import android.hardware.SensorEventListener;
    import android.hardware.SensorManager;
    import android.os.IBinder;
    import android.widget.Toast;
     
    import java.util.Random;
     
    public class TrainingService extends Service implements SensorEventListener {
     
        //Ajouts des classes
        private SensorManager sensorManager; 
        private Sensor senStepDetector;
     
        public int onStartCommand(Intent intent, int flags, int startId) {
     
            new Thread(new Runnable() {
                @Override
                public void run() {
                    serviceThread();
                }
            }).run();
     
            return Service.START_STICKY;
        }
     
        public void serviceThread()
        {
            Toast.makeText(this, "service starting", Toast.LENGTH_SHORT).show();
     
            sensorManager = (SensorManager) this.getSystemService(SENSOR_SERVICE);
            senStepDetector = sensorManager.getDefaultSensor(Sensor.TYPE_STEP_DETECTOR);
     
            registerSensors();
        }
     
        @Override
        public void onDestroy() {
            Toast.makeText(this, "service done", Toast.LENGTH_SHORT).show();
        }
     
        @Override
        public IBinder onBind(Intent arg0) {
            return null;
        }
     
        private void registerSensors()
        {
            sensorManager.registerListener(this, senStepDetector, SensorManager.SENSOR_DELAY_NORMAL);
        }
     
     
        @Override
        public void onSensorChanged(SensorEvent event) {
            Sensor sensor = event.sensor;
     
            switch (event.sensor.getType()) {
                case Sensor.TYPE_STEP_DETECTOR:
                    updateCharacter();
                    break;
            }
        }
     
        @Override
        public void onAccuracyChanged(Sensor sensor, int accuracy) {
     
        }
     
        public void updateCharacter()
        {
    		//On ajoute un point d'experience
    		Mon code...
        }
    }

    Ce service est lancé depuis une activé :

    //On lance le service Podomètre
            startService(new Intent(CharacterActivity.this, TrainingService.class));
    

    Si vous avez une idée je serais preneur car à tout moment j'ai le Toast qui m'indique "service done"


    J'ai mit une rustine un peu moche qui fait que dès que la méthode onDestroy() se lance elle relance elle même onstart:

     @Override
        public void onDestroy() {
            Intent intent = new Intent();
            onStartCommand(intent, 0, 0);
        }


    ça fonctionne mais c'est pas propre du tout

    Bien cordialement,


    -
    Edité par mycaranille 4 octobre 2019 à 14:41:19

    • Partager sur Facebook
    • Partager sur Twitter

    [Service] Arrêt à tout moment

    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
    • Editeur
    • Markdown