web-dev-qa-db-fra.com

Comment vérifier si mon activité est l'activité en cours d'exécution à l'écran

J'ai utilisé Toast pour faire une notification, mais il semble que même son activité n'apparaît pas dans l'écran actuel et qu'une autre activité a été lancée.

Je veux vérifier cette situation, lorsque l'activité n'est pas celle en cours, je n'enverrais pas la notification Toast. Mais comment faire?

23
virsir

Lorsque votre activité arrive au premier plan, sa méthode onResume() est invoquée. Lorsqu'une autre activité arrive devant votre activité, sa méthode onPause() sera invoquée. Il vous suffit donc d'implémenter un booléen indiquant si votre activité est au premier plan:

private boolean isInFront;

@Override
public void onResume() {
    super.onResume();
    isInFront = true;
}

@Override
public void onPause() {
    super.onPause();
    isInFront = false;
}
83
Andy Zhang
ArrayList<String> runningactivities = new ArrayList<String>();

ActivityManager activityManager = (ActivityManager)getBaseContext().getSystemService (Context.ACTIVITY_SERVICE); 

List<RunningTaskInfo> services = activityManager.getRunningTasks(Integer.MAX_VALUE); 

for (int i1 = 0; i1 < services.size(); i1++) { 
    runningactivities.add(0,services.get(i1).topActivity.toString());  
} 

if(runningactivities.contains("ComponentInfo{com.app/com.app.main.MyActivity}")==true){
    Toast.makeText(getBaseContext(),"Activity is in foreground, active",1000).show(); 
}

De cette façon, vous saurez si l'activité pointée est l'activité visible actuelle.

7
Samet

Je préfère ne pas gérer l'état par moi-même, j'ai donc implémenté une classe qui le fait pour moi.

package mypackage;

import Android.os.Bundle;
import Android.support.v7.app.AppCompatActivity;

// Mine extends AppCompatActivity - your's might need to extend Activity, depending on whether
// you use the support library or not.
public class StateTrackingActivity extends AppCompatActivity {

    public enum ActivityState {

        CREATED, RESUMED, STARTED, PAUSED, STOPPED, DESTROYED
    }

    private ActivityState _activityState;

    protected ActivityState getActivityState() { return _activityState; }

    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        _activityState = ActivityState.CREATED;
    }

    @Override
    protected void onResume() {

        super.onResume();
        _activityState = ActivityState.RESUMED;
    }

    @Override
    protected void onStart() {

        super.onStart();
        _activityState = ActivityState.STARTED;
    }

    @Override
    protected void onPause() {

        super.onPause();
        _activityState = ActivityState.PAUSED;
    }

    @Override
    protected void onStop() {

        super.onStop();
        _activityState = ActivityState.STOPPED;
    }

    @Override
    protected void onDestroy() {

        super.onDestroy();
        _activityState = ActivityState.DESTROYED;
    }
}

Ensuite, votre activité peut étendre celle-ci et vous pouvez obtenir l'état en appelant getActivityState().

4
Minas Mina

C'est ma fonction isActivityVisible ultime.

protected boolean isActivityVisible() {
    if (this.mActivity != null) {
        Class klass = this.mActivity.getClass();
        while (klass != null) {
            try {
                Field field = klass.getDeclaredField("mResumed");
                field.setAccessible(true);
                Object obj = field.get(this.mActivity);
                return (Boolean)obj;
            } catch (NoSuchFieldException exception1) {
//                Log.e(TAG, exception1.toString());
            } catch (IllegalAccessException exception2) {
//                Log.e(TAG, exception2.toString());
            }
            klass = klass.getSuperclass();
        }
    }
    return false;
}
2
Melug
if (BaseActivity.this instanceof Faq)
            {
                Toast.makeText(BaseActivity.this, "You are in the Same Page", Toast.LENGTH_SHORT).show();
            }else {
                Intent intent = new Intent(BaseActivity.this, Faq.class);
                startActivity(intent);
                drawer.closeDrawer(GravityCompat.START);
            }

//// ici am Toutes mes activités s'étendent sur une activité appelée BaseActivity

1
Nishanth S Babu

Il y a Activity # isTaskRoot () méthode

1
Andrey