[Android] Passage en background/foreground [Résolu]

BunoCS 14176 Messages postés lundi 11 juillet 2005Date d'inscription 19 octobre 2018 Dernière intervention - 18 juil. 2012 à 17:44 - Dernière réponse : BunoCS 14176 Messages postés lundi 11 juillet 2005Date d'inscription 19 octobre 2018 Dernière intervention
- 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...
Afficher la suite 

Votre réponse

9 réponses

Meilleure réponse
BunoCS 14176 Messages postés lundi 11 juillet 2005Date d'inscription 19 octobre 2018 Dernière intervention - 23 juil. 2012 à 22:53
3
Merci
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...

Merci BunoCS 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 98 internautes ce mois-ci

Commenter la réponse de BunoCS
Twinuts 5282 Messages postés dimanche 4 mai 2003Date d'inscription 19 octobre 2018 Dernière intervention - 18 juil. 2012 à 22:42
0
Merci
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
Commenter la réponse de Twinuts
BunoCS 14176 Messages postés lundi 11 juillet 2005Date d'inscription 19 octobre 2018 Dernière intervention - 19 juil. 2012 à 09:13
0
Merci
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...
Commenter la réponse de BunoCS
Twinuts 5282 Messages postés dimanche 4 mai 2003Date d'inscription 19 octobre 2018 Dernière intervention - 19 juil. 2012 à 09:22
0
Merci
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
Commenter la réponse de Twinuts
BunoCS 14176 Messages postés lundi 11 juillet 2005Date d'inscription 19 octobre 2018 Dernière intervention - 19 juil. 2012 à 09:56
0
Merci
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...
Commenter la réponse de BunoCS
Twinuts 5282 Messages postés dimanche 4 mai 2003Date d'inscription 19 octobre 2018 Dernière intervention - 19 juil. 2012 à 21:38
0
Merci
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
Commenter la réponse de Twinuts
BunoCS 14176 Messages postés lundi 11 juillet 2005Date d'inscription 19 octobre 2018 Dernière intervention - 19 juil. 2012 à 21:43
0
Merci
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...
Commenter la réponse de BunoCS
Twinuts 5282 Messages postés dimanche 4 mai 2003Date d'inscription 19 octobre 2018 Dernière intervention - 19 juil. 2012 à 21:47
0
Merci
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
Commenter la réponse de Twinuts
Twinuts 5282 Messages postés dimanche 4 mai 2003Date d'inscription 19 octobre 2018 Dernière intervention - 19 juil. 2012 à 21:54
0
Merci
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
Commenter la réponse de Twinuts

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.