[Android] Passage en background/foreground

Résolu
BunoCS Messages postés 15472 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 25 mars 2024 - 18 juil. 2012 à 17:44
BunoCS Messages postés 15472 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 25 mars 2024 - 23 juil. 2012 à 22:53
Hello z'à tous!

Je cherche un point de détecter qu'une application passe en background et revienne au 1er plan (typiquement, le cas d'un appel).

Il y a bien les callbacks onPause() et onResume() des activités mais je passe aussi dans le onResume() quand je dépile la stack des activités (appui sur back notamment).

Avez-vous une idée à me proposer?

D'avance, merci

@+
Buno, Admin CS
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...

9 réponses

BunoCS Messages postés 15472 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 25 mars 2024 103
23 juil. 2012 à 22:53
Yop,
J'ai finalement opté pour l'activityManager, qui me permet de setter un booléen isGoingToBackground dans le onPause(), avec vérification dans le onResume().


@+
Buno, Admin CS
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
3
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
18 juil. 2012 à 22:42
Salut,

Tu as essayé d'utiliser isFinishing ?
Exemple:

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;

public class BgDetectActivity extends Activity {
  private boolean background = false;
  
  @Override
  public void onCreate(final Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
  }
  
  @Override
  protected void onPause() {
    super.onPause();
    if (!isFinishing()) {
      Log.e("TAG", "Go en background ô_O");
      background = true;
    } else
      Log.e("TAG", "Bye :)");
  }
  
  @Override
  protected void onResume() {
    super.onResume();
    if (background) {
      Log.e("TAG", "Sortie du background ô_O");
      background = false;
    } else
      Log.e("TAG", "Coucou :)");
  }
}



-----

"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

OoWORAoO
0
BunoCS Messages postés 15472 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 25 mars 2024 103
19 juil. 2012 à 09:13
C'est l'idée à laquelle j'avais pensé. Mais je voulais savoir s'il y avait des choses plus "automatiques"

Merci de ton retour.

@+
Buno, Admin CS
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
0
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
19 juil. 2012 à 09:22
Salut,

N'ayant jamais trouvé plus classe ça reste quand même le plus simple à faire... un petit onBackground, onForeground serait mieux ^^' et plus cohérent.
Cela dit sous android 4 (je sais pas pour < 4) ça fonctionne tip top bien ;)


-----

"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

OoWORAoO
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
BunoCS Messages postés 15472 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 25 mars 2024 103
19 juil. 2012 à 09:56
Si j'ai bien compris la doc, isFinishing() retourne true
quand l'activité reçoit la commande finish(). Or, je peux l'appeler dans mon code, sans pour autant passer l'appli en background...

J'ai peut-être une piste, un peu plus tricky, en regardant dans l'ActivityManager.

@+
Buno, Admin CS
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
0
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
19 juil. 2012 à 21:38
Salut,


Si j'ai bien compris la doc, isFinishing() retourne true
quand l'activité reçoit la commande finish(). Or, je peux l'appeler dans mon code, sans pour autant passer l'appli en background...

Je comprend pas bien où tu veux en venir.
Par définition l'appel de finish termine ton application, que ce soit directement ou indirectement(cas du back) et je ne parle pas du force kill qui semble comparable au kill -9 ^^'

J'ai peut-être une piste, un peu plus tricky, en regardant dans l'ActivityManager. 


Oui bien tricky ^^'
Tu peux aussi te pencher sur le cas des écoutes sur les events du tel (réception d'appel, départ d'appel, passage en veille, etc...) en utilisant les BroadcastReceiver, mais après ça dépend des besoins de ton application.


-----

"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

OoWORAoO
0
BunoCS Messages postés 15472 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 25 mars 2024 103
19 juil. 2012 à 21:43
Je comprend pas bien où tu veux en venir.

Admettons que j'ai une activity A, qui lance une activité B. Dans la B, je peux faire appel à finish(), qui aura pour effet de terminer l'activity B (entrainant un retour sur l'activity A) mais ce n'est pas pour autant que mon application est passé en background.
Tu vois ce que je veux dire?

@+
Buno, Admin CS
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
0
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
19 juil. 2012 à 21:47
Oui beaucoup mieux :)
Dans ce cas je maintient l'idée des BroadcastReceiver qui semblent plus dans la philosophie android, et en fonction des besoins j'utiliserai un service pour le management de la messagerie (et plus si besoin).


-----

"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

OoWORAoO
0
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
19 juil. 2012 à 21:54
Sinon tu peux aussi utiliser les IPC android (Exemple d'application) mais là tu dépasses le stade tricky (bien que beaucoup plus conforme ô_O)


-----

"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

OoWORAoO
0
Rejoignez-nous