アクティビティ バック スタック A -> B -> C -> D -> E を含むアプリケーションがあります。アクティビティ E で、移動元のバック スタック アクティビティを知りたいと考えています。どうすればこれを見つけることができますか??
7 に答える
以下のコードを使用して、バックスタック内のすべてのタスクと各タスク内の上位のアクティビティを抽出できます
ActivityManager m = (ActivityManager) ctx.getSystemService( ctx.ACTIVITY_SERVICE );
List<RunningTaskInfo> runningTaskInfoList = m.getRunningTasks(10);
Iterator<RunningTaskInfo> itr = runningTaskInfoList.iterator();
while(itr.hasNext()){
RunningTaskInfo runningTaskInfo = (RunningTaskInfo)itr.next();
int id = runningTaskInfo.id;
CharSequence desc= runningTaskInfo.description;
int numOfActivities = runningTaskInfo.numActivities;
String topActivity = runningTaskInfo.topActivity.getShortClassName();
}
「adb shell dumpsys activity activities」 コマンドを使用できます
参考までにhttp://www.onsandroid.com/2015/01/find-back-stack-activities-in-android.html
registerActivityLifecycleCallbacks のこの API を介して、アクティビティの変更をリッスンすることでそれを行うことができると思います。
https://developer.android.com/reference/android/app/Application.ActivityLifecycleCallbacks.html
これは、独自のクラスのスタックに追加し、必要に応じて完全な状態を確認するのに役立ちます。
実際には、getRunningTasksを使用してrunningtaskinfoからタスクIDを取得し、次にgetRecentTasksを使用してタスクIDを比較してrecenttaskinfoを取得できます。これで、recenttaskinfoのbaseintentを使用して、startactivityを使用してそのアクティビティを再開できます。
よくわかりません...前の活動に戻りたいですか?その場合は、現在のアクティビティを終了すると、前のアクティビティに戻ります。
activity-call を取得するには、startActivityForResult
の代わりにを使用することをお勧めします。startActivity
origin/source
getCallingActivity().getClassName()
A はそれが家から来たことをどのようにして知ることができますか? getIntent()
その使用
getAction() -> android.intent.action.MAIN
と
getCategories() -> android.intent.category.LAUNCHER