Подтвердить что ты не робот

Как проверить, является ли моя активность текущей деятельностью на экране

Я использовал Toast для уведомления, но, похоже, он будет отображаться даже в том случае, если его активность не находится на текущем экране, и было начато какое-то другое действие.

Я хочу проверить эту ситуацию, когда активность не является текущей, я бы не отправил уведомление Toast. Но как это сделать?

4b9b3361

Ответ 1

Когда ваше действие выходит на передний план, будет вызываться его метод onResume(). Когда другое действие появляется перед вашей деятельностью, будет вызываться его метод onPause(). Итак, все, что вам нужно сделать, это реализовать логическое значение, указывающее, находится ли ваше действие на переднем плане:

private boolean isInFront;

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

@Override
public void onPause() {
    super.onPause();
    isInFront = false;
}

Ответ 2

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(); 
}

Таким образом вы узнаете, является ли указанная активность текущей видимой активностью.

Ответ 3

Это моя конечная функция isActivityVisible.

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;
}

Ответ 4

Я предпочитаю не обрабатывать состояние самостоятельно, поэтому я внедрил класс, который делает это для меня.


package mypackage;

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

// Mine extends AppCompatActivity - your 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;
}

}

Затем ваша деятельность может расширить этот вариант, и вы можете получить состояние, вызвав getActivityState().

Ответ 6

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);
            }

////Здесь все мои действия распространяются на Activity под названием BaseActivity

Ответ 7

  if ( getActivity() instanceof ManageCardActivity){

   // your code
  }