web-dev-qa-db-fra.com

Démarrer Android Service après toutes les 5 minutes

Je cherchais sur Internet depuis 2 jours mais je n'ai trouvé aucun tutoriel utile. J'ai créé un service et j'envoie une notification dans la barre d'état au démarrage du service. Je veux que ce service s'arrête après avoir affiché la notification et le redémarre après 5 minutes. Veuillez me faire savoir si c'est possible et me fournir quelques tutoriels utiles si vous en avez. J'ai entendu parler de TimerTask et AlarmManager et j'ai essayé de les utiliser également mais je n'ai pas pu obtenir le résultat souhaité.

EDIT: J'ai besoin que le service soit démarré toutes les 5 minutes même si mon application n'est pas en cours d'exécution.

16
KULKING

Vous ne voulez pas utiliser un TimerTask car cela dépend de votre application s'exécutant en continu. Une implémentation AlarmManager permet de supprimer en toute sécurité votre application entre les exécutions.

Déclarer que vous avez essayé d'utiliser AlarmManager mais que vous n'avez pas obtenu le résultat souhaité n'est pas une déclaration utile, car il ne dit à personne comment vous aider à bien faire les choses. Il serait beaucoup plus utile d'exprimer ce qui s'est passé.

http://code4reference.com/2012/07/tutorial-on-Android-alarmmanager/ contient ce qui semble être un tutoriel utile sur AlarmManager. Voici les points saillants:

1) Votre alarme provoquera le déclenchement d'un Intent à son expiration. C'est à vous de décider quel type de Intent et comment il doit être implémenté. Le lien que j'ai fourni a un exemple complet basé sur un BroadcastReceiver.

2) Vous pouvez installer votre alarme avec un exemple tel que:

public void setOnetimeTimer(Context context) {
    AlarmManager am=(AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
    Intent intent = new Intent(context, AlarmManagerBroadcastReceiver.class);
    intent.putExtra(ONE_TIME, Boolean.TRUE);
    PendingIntent pi = PendingIntent.getBroadcast(context, 0, intent, 0);
    am.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + (1000 * 60 * 5), pi);
}
25
mah

Ci-dessous, j'ai fourni trois fichiers, MainActivity.Java pour le service de démarrage, le deuxième fichier MyService.Java fournissant un service pendant 5 minutes et le troisième est un fichier manifeste.

MainActivity.Java

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        startService(new Intent(this, MyService.class)); //start service which is MyService.Java
    }
}

MyService.Java

 public class MyService extends Service {

    public static final int notify = 300000;  //interval between two services(Here Service run every 5 Minute)
    private Handler mHandler = new Handler();   //run on another Thread to avoid crash
    private Timer mTimer = null;    //timer handling

    @Override
    public IBinder onBind(Intent intent) {
        throw new UnsupportedOperationException("Not yet implemented");
    }

    @Override
    public void onCreate() {
        if (mTimer != null) // Cancel if already existed
            mTimer.cancel();
        else
            mTimer = new Timer();   //recreate new
        mTimer.scheduleAtFixedRate(new TimeDisplay(), 0, notify);   //Schedule task
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        mTimer.cancel();    //For Cancel Timer
        Toast.makeText(this, "Service is Destroyed", Toast.LENGTH_SHORT).show();
    }

    //class TimeDisplay for handling task
    class TimeDisplay extends TimerTask {
        @Override
        public void run() {
            // run on another thread
            mHandler.post(new Runnable() {
                @Override
                public void run() {
                    // display toast
                    Toast.makeText(MyService.this, "Service is running", Toast.LENGTH_SHORT).show();
                }
            });
        }
    }
}

AndroidManifest.xml

  <service Android:name=".MyService" Android:enabled="true" Android:exported="true"></service>
12
Khyati Fatania