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.
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);
}
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.
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
}
}
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();
}
});
}
}
}
<service Android:name=".MyService" Android:enabled="true" Android:exported="true"></service>