13

アプリでリンクを開いていますが、戻るを押すと、ユーザーをしばらく保持するために HomePage を表示したいと思います。私はこれを達成しようとしていますが、そうすることができません。baseActivity だけでなく、homeLauncher アクティビティもトップとして取得します。

ディープリンク タップ > 目的のアクティビティを開く > ユーザーが戻るボタンを押す > 最後のアクティビティであるが homeActivity ではないかどうかを確認する > はいの場合は、ユーザーを homeActivity に移動します。

次のコードを試しました:

@Override
public void onBackPressed() {
ActivityManager mngr = (ActivityManager) getSystemService( ACTIVITY_SERVICE );
List<ActivityManager.RunningTaskInfo> taskList = mngr.getRunningTasks(10);

if(taskList.get(0).numActivities == 1 && taskList.get(0).topActivity.getClassName().equals(this.getClass().getName())){
  //// This is last activity
}
else{
    //// There are more activities in stack
}

super.onBackPressed();
}

Android Studio の評価

isTaskRoot も試しましたが、結果は同じです。正解はありません 助けてください

4

5 に答える 5

1

ActivityManagerどのアクティビティが存在し、どのアクティビティが存在しないかを追跡するだけで使用できます。これは、私が常に使用しているコードの一部です。

ActivityManager mngr = (ActivityManager) getSystemService( ACTIVITY_SERVICE );

List<ActivityManager.RunningTaskInfo> taskList = mngr.getRunningTasks(10);

if(taskList.get(0).numActivities == 1 &&
 taskList.get(0).topActivity.getClassName().equals(this.getClass().getName())) {
Log.i(TAG, "This is last activity in the stack");
}
于 2015-11-29T23:04:20.927 に答える
1

ActivityManager.RunningTaskInfoからの引用

システムで現在「実行中」の特定のタスクに関して取得できる情報。実行中のタスクは、特定のタスクが実際にアクティブに実行されているプロセスを持っていることを意味するわけではないことに注意してください。これは単に、ユーザーがアクセスして閉じたことがないことを意味しますが、現在、システムはプロセスを強制終了した可能性があり、ユーザーが戻ったときに再起動するために最後の状態を保持しているだけです。

                   String getLastOpenClass ;// Global 

                    ActivityManager am = (ActivityManager) this.getSystemService(ACTIVITY_SERVICE);
                    List< ActivityManager.RunningTaskInfo > taskInfo = am.getRunningTasks(1);
                    ComponentName componentInfo = taskInfo.get(0).topActivity;
                    componentInfo.getPackageName();
                    getLastOpenClass=taskInfo.get(0).topActivity.getClassName();
                    if(getLastOpenClass.equals("Your_Class_Name"))
                    {

                    }else{

                    }

許可を与える <uses-permission android:name="android.permission.GET_TASKS" />

ActivityManagerは、実行中のタスク最上位のタスクの記録を保持します。

       ActivityManager mngr = (ActivityManager) getSystemService( ACTIVITY_SERVICE );
       List<ActivityManager.RunningTaskInfo> taskList = mngr.getRunningTasks(10);

      if(taskList.get(0).numActivities == 1 && taskList.get(0).topActivity.getClassName().equals(this.getClass().getName()))
      {
        Log.i(TAG, "This is Last activity in the stack");
      }

アクティビティがアプリケーションのアクティビティ スタックの最後のアクティビティであるかどうかを確認する方法は?

現在のフォアグラウンド アクティビティ パッケージ名を取得する方法を確認してください

http://developer.android.com/intl/es/reference/android/app/ActivityManager.html#getRunningTasks%28int%29

于 2015-11-28T05:39:22.633 に答える
0

以下のソリューションは API14+ でのみ機能することに注意してください。

カスタム アプリケーション クラスを作成します。

public class App extends Application {

    private int created;

    @Override
    public void onCreate() {
        registerActivityLifecycleCallbacks(new Callbacks());
    }

    public int getCreated() {
        return created;
    }

    private class Callbacks implements ActivityLifecycleCallbacks {

        @Override
        public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
            created++;
        }

        @Override
        public void onActivityDestroyed(Activity activity) {
            created--;
        }
    }
}

アプリケーション要素の AndroidManifest.xml に登録します。

<application name=".App"/>

また、ディープ リンクを介して開かれたアクティビティでは、次のコードを使用します。

@Override
public void onBackPressed() {
    if (((App) getApplicationContext()).getCreated() == 1) {
        // start your home activity
    }

    super.onBackPressed();
}

私はこれを頭のてっぺんから書いたので、テストする機会はありませんでしたが、理論的にはうまくいくはずです。

于 2015-11-25T12:10:11.663 に答える