Bonjour à tous,
j'ai une application qui tourne tout le temps sur une tablette, ce que j'aimerai faire est au bout de 4min d'inactivité (personne ne touche l’écran), je lance une activity avec des photos.
comment je pourrai faire svp?
Merci
Version imprimable
Bonjour à tous,
j'ai une application qui tourne tout le temps sur une tablette, ce que j'aimerai faire est au bout de 4min d'inactivité (personne ne touche l’écran), je lance une activity avec des photos.
comment je pourrai faire svp?
Merci
Salut, je débute mais il me semble qu'avec un timertask tu peux dire à une boucle d'attendre X minutes, et ensuite faire une boucle pour dire "quand timertask vaut 0, lances l'activité".
salut, merci pour ta réponse,
j'ai pensé à mettre un timer, mais la seconde activity se déclenchera au bout de 4min même si quelqu'un est entrain de manipuler l'application non?
Dans ce cas il suffirait de réinitialiser le compteur sur les onitemclick, onclick, onlongclick etc, y'a peut-être une meilleure façon de faire mais je ne la connais pas :?
Voila j'ai fait un Timer qui fonctionne bien, mais comment détecter l'inactivité de mon application, est ce que quelqu'un a une idée??
Simplement réagir sur les "onTouchEvent"...
Ne pas les catcher (toujours passer au parent), mais réinitialiser le timer...
Comment je pourrai faire stp, car si je met mon Timer dans onTouchEvent, le timer se déclenchera des que je toucherai l’écran, donc la deuxième activité se lancera même si j'utilise encore l'application.
Et moi ce que je veux est au bout de X temps d'inactivité lancé la deuxième activité.
Merci.
Je ne comprends pas il faut reseter le timer sur le onTouch... pas le démarrer...
Bon... allez... un petit tour dans la documentation ... search (User Interaction) et hop....
http://developer.android.com/referen...rInteraction()
Voila comment je ferai (à essayer)
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43 class MonActivity extends Activity { class TimerTask implements Runnable { public void run() { Intent slideshow = new Intent(MonActivity.this,...); startActivity(....slideshow); } } private Handler handler; private TimeTask task; public void onCreate(...) { setContentView(...); this.handler = new Handler(); this.task = new TimerTask(); } public void onPause() { removeTimerTask(); } public void onResume() { scheduleTimerTask(); } @Override public void onUserInteraction(){ removeTimerTask(); scheduleTimerTask(); } void removeTimerTask() { this.handler.removeCallbacks(this.task); } void scheduleTimerTask() { this.handler.postDelayed(this.task,XXXXX); } }
Après un peu de reflechissement ^^ voici deux trois trucs qui me sont venus à l'esprit:
Je ne suis pas sur que remove/schedule soit très efficace....
Donc voici une autre idée:
Dans le onUserInteraction(), juste stocker la date courante:
Dans le TimerTask, vérifier la date:Code:
1
2 this.lastUserInteraction = System.currentTimeMillis();
Pourquoi c'est mieux ? Parcequ'on ne touche le handler que toutes les XXXX secondes, et que le onUserInteraction() est super rapide.... du coup:Code:
1
2
3
4
5
6
7 long now = System.currentTimeMillis(); if (now - this.lastUserInteraction > XXXX) { MonActivity.this.postAt(this,XXXX + this.lastUserInteraction); } else { // start activity as before }
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49 class MonActivity extends Activity { private static final long DELAY = 10000; private long lastUserInteraction; private Handler handler; private TimeTask task; public void onCreate(...) { setContentView(...); this.handler = new Handler(); this.task = new Runnable() { public void run() { MonActivity.this.onTimerEnded(); } }; } public void onPause() { removeTimerTask(); } public void onResume() { this.lastUserInteraction = System.currentTimeMillis(); scheduleTimerTask(); } @Override public void onUserInteraction(){ this.lastUserInteraction = System.currentTimeMillis(); } public void onTimerEnded() { long now = System.currentTimeMillis(); if (now > this.lastUserInteraction + DELAY) { // START NEW ACTIVITY ! } else { scheduleTimerTask(); } } void removeTimerTask() { this.handler.removeCallbacks(this.task); } void scheduleTimerTask() { this.handler.postAtTime(this.task,this.lastUserInteraction + DELAY); } }
Merci beaucoup nicroman pour ton aide, ça marche :ccool: