23

トーストを使って通知したのですが、現在の画面にアクティビティがなく、別のアクティビティが開始されていても表示されるようです。

この状況を確認したいのですが、アクティビティが現在のものではない場合、トースト通知を送信しません。しかし、どうすればいいですか?

4

7 に答える 7

86

アクティビティがフォアグラウンドになると、そのonResume()メソッドが呼び出されます。別のアクティビティがアクティビティの前に来ると、そのonPause()メソッドが呼び出されます。したがって、アクティビティがフォアグラウンドにあるかどうかを示すブール値を実装するだけです。

private boolean isInFront;

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

@Override
public void onPause() {
    super.onPause();
    isInFront = false;
}
于 2010-07-16T05:41:46.833 に答える
7
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(); 
}

このようにして、ポイントされたアクティビティが現在表示されているアクティビティであるかどうかがわかります。

于 2012-01-22T19:23:17.823 に答える
5

自分で状態を処理したくないので、これを行うクラスを実装しました。

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

次に、アクティビティでこれを拡張し、 を呼び出して状態を取得できますgetActivityState()

于 2016-07-10T09:10:24.030 に答える
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;
}
于 2014-07-09T15:03:23.570 に答える
2
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);
            }

//// ここにいます 私のすべてのアクティビティは、BaseActivity という名前のアクティビティで拡張されています

于 2016-11-02T06:42:52.763 に答える
-1

Activity#isTaskRoot()メソッドあり

于 2011-06-08T08:45:06.047 に答える