2017-08-09 4 views
0

Je veux détecter si l'application est en cours d'exécution (à savoir, soit en arrière-plan ou au premier plan) ou non sur un clic de notification. J'ai implémenté le récepteur de diffusion où je veux vérifier l'état de l'application (en cours ou non). J'ai déjà essayé cette check android application is in foreground or not? Mais ça ne marche pas comme exception. Existe-t-il un autre moyen de détecter cela?Détecter l'application est en cours d'exécution ou non sur le clic de notification dans android

+0

Il y a plusieurs façons de mettre en œuvre sur le lien que vous avez partagé, que l'on ne fonctionne pas? Je pense que celui qui utilise la classe Application va fonctionner. – Kharda

+0

Copie possible de [Vérification de l'exécution d'une application Android en arrière-plan] (https://stackoverflow.com/questions/3667022/checking-if-an-android-application-is-running-in-the-background) – Kharda

+1

@Kharda Cela vérifiera si l'application est en premier plan ou en arrière-plan et non si l'application est en cours d'exécution ou non – Nainal

Répondre

2

Vous pouvez définir une variable statique dans l'activité comme ceci.

class MainActivity extends Activity { 
    public static boolean isAlive = false; 

     @Override 
     public void onStart() { 
     super.onStart(); 
     isAlive = true; 
     } 

     @Override 
     public void onStop() { 
     super.onStop(); 
     isAlive = false; 
     } 
} 

Vous pouvez appeler le MainActivity.isAlive pour vérifier si l'activité est en cours ou non.

+4

ne jamais définir des champs statiques sur l'activité - ce qui provoque des fuites de mémoire – MarkySmarky

+0

@MarkySmarky D'accord –

0

Cela ne fonctionne pas de cette façon - votre application devrait démarrer (via le même flux que d'habitude) si elle ne fonctionne pas.

Vous pouvez transmettre des extras sur l'intention de votre récepteur BroadcastReceiver dans l'application et il doit être géré comme vous le souhaitez.

C'est la seule façon de le faire.

+0

quel type d'extra, pouvez-vous élaborer s'il vous plaît? Je veux vérifier si l'application est en cours d'exécution ou non. – Nainal

+0

donnez-moi un exemple de ce que vous voulez faire si l'application est en cours d'exécution et si l'application ne fonctionne pas ... – MarkySmarky

+0

Je veux ouvrir différentes activités lorsque l'application est en cours d'exécution et lorsque l'application est fermée – Nainal

0

Je peux vous suggérer ce que j'ai fait lorsque la notification arrive. override super méthode onNewIntent (intention intentionnelle) dans votre activité que vous avez une réussite dans votre intention en attente, signifie l'activité souhaitée qui sera ouverte lorsque l'utilisateur appuie sur une notification. Et ici, lorsque votre application est au premier plan, cette méthode sera appelée, et si votre application est supprimée, l'activité désirée onCreate() sera appelée. Et encore une chose est de faire de votre activité un sommet dans Manifest.

In Manifest:  <activity 
      android:name=".activities.TokenActivity" 
      android:label="@string/app_name_short" 
      android:launchMode="singleTop"/> 

In Activity: @Override 
    protected void onNewIntent(Intent intent) { 
     super.onNewIntent(intent); 
     loadCouponFragment(intent.getExtras()); 
    } 
+0

votre solution est légitime, mais il arrive après que le récepteur de diffusion a déjà commencé l'application .... – MarkySmarky

0

Vous devriez jeter un oeil à un nouveau composant Handling Lifecycles. Vous pouvez facilement vérifier l'état actuel de l'activité, fragment, service et même traiter ProcessLifecycleOwner.

Par exemple:

class CustomApplication extends Application { 

    private static Lifecycle lifecycle; 

    @Override 
    public void onCreate() { 
     super.onCreate(); 
     lifecycle = ProcessLifecycleOwner.get().getLifecycle(); 
    } 

    public static Lifecycle.State getCurrentState(){ 
     return lifecycle.getCurrentState(); 
    } 
} 

Et vous pouvez vérifier un state:

if(customApplicationgetCurrentState().isAtLeast(Lifecycle.State.RESUMED)){ 
       //do something 
    } 

Vous pouvez également ajouter un observateur à l'écoute des changements.

public class CustomApplication extends Application { 

private static Lifecycle lifecycle; 

public static Lifecycle.State getCurrentState() { 
    return lifecycle.getCurrentState(); 
} 

@Override 
public void onCreate() { 
    super.onCreate(); 
    lifecycle = ProcessLifecycleOwner.get().getLifecycle(); 
    lifecycle.addObserver(new SomeObserver()); 
} 

public static class SomeObserver implements LifecycleObserver { 

    @OnLifecycleEvent(Lifecycle.Event.ON_CREATE) 
    void onCreate() { 
     Log.d("Observer", ": onCreate"); 
    } 

    @OnLifecycleEvent(Lifecycle.Event.ON_STOP) 
    void onStop() { 
     Log.d("Observer", ": onStop"); 
    } 

    @OnLifecycleEvent(Lifecycle.Event.ON_RESUME) 
    void onResume() { 
     Log.d("Observer", ": onResume"); 
    } 
} 
} 

Adding Components to your Project