我怎样才能回到之前的 activity,而不完成我当前的 activity
How can I go back to the previous activity, without finishing my current activity
基本上,我有一个 activity,其中包含视频会议应用程序的代码。我需要将其保留在后台。因此,当用户按下按钮时,我创建了一个 FloatingViewService,并将数据从我的 activity 发送到该 FloatingViewService。例如,我可以(这有效)开始一个新的意图,并使用它来浏览我的应用程序,而我以前的 activity 仍在工作,并将数据发送到 FloatingViewService。
现在我的问题是我不想开始随机 activity,但我想在开始通话之前返回到之前的 activity。
当我开始通话时,我会这样做:
Intent intent = new Intent(HomeActivity.this, InCallActivity.class);
intent.putExtra("url", "url");
intent.putExtra("test", false);
startActivity(intent);
注意!创建第二个 activity 后,如果我调用 finish,它将带我到我的主页 Activity。这太棒了。
但是我不想结束,我只是想转到 activity,从中调用我的 class。
我试过:moveTaskToBack(true);
但它会将应用程序发送到主屏幕。
我也做了这个代码:
ActivityManager m = (ActivityManager) getSystemService(ACTIVITY_SERVICE );
List<ActivityManager.RunningTaskInfo> runningTaskInfoList = m.getRunningTasks(10);
Iterator<ActivityManager.RunningTaskInfo> itr = runningTaskInfoList.iterator();
while(itr.hasNext()){
ActivityManager.RunningTaskInfo runningTaskInfo = (ActivityManager.RunningTaskInfo)itr.next();
int id = runningTaskInfo.id;
CharSequence desc= runningTaskInfo.description;
int numOfActivities = runningTaskInfo.numActivities;
String topActivity = runningTaskInfo.topActivity.getShortClassName();
Log.i("","top activity: " + topActivity);
}
认为我可以使用 FLAG_ACTIVITY_REORDER_TO_FRONT
从后台恢复 activity
但是,我没有取回 activity,这是为什么?
我得到的是:
12-06 13:17:54.213: D/HeartRateApplication(3168): top activity: com.vidyo.vidyocore.activities.WebViewActivity
12-06 13:17:54.213: D/HeartRateApplication(3168): top activity: com.google.android.launcher.GEL
但如果我真的完成了,显然我的家Activity就在那里,因为它让我回到了那里。为什么我没有从 运行 活动中得到它?
我该如何解决这个问题?
编辑:
有评论说我应该带着意图开始 activity。所以我觉得可能我不够清楚。
我无法启动默认 Activity 的意图。
这个 InCallActivity 有可能被多个活动调用。因此我需要知道它之前的 activity 是什么,所以我可以调用那个 activity 的意图,就像我说的 FLAG_ACTIVITY_REORDER_TO_FRONT
因此,使用 runningTaskInfo
的逻辑并没有为我提供整个后台堆栈。有没有另一种方法来获取 backstack,这样我就可以真正知道 activity 开始的原因?
使用 Intent.FLAG_ACTIVITY_CLEAR_TOP
启动 activity
也可以参考一下
this
String Activity name= getIntent().getStringExtra("mActivityName");
使用它来跟踪您的 activity 流量和名称。
基本上,我有一个 activity,其中包含视频会议应用程序的代码。我需要将其保留在后台。因此,当用户按下按钮时,我创建了一个 FloatingViewService,并将数据从我的 activity 发送到该 FloatingViewService。例如,我可以(这有效)开始一个新的意图,并使用它来浏览我的应用程序,而我以前的 activity 仍在工作,并将数据发送到 FloatingViewService。 现在我的问题是我不想开始随机 activity,但我想在开始通话之前返回到之前的 activity。 当我开始通话时,我会这样做:
Intent intent = new Intent(HomeActivity.this, InCallActivity.class);
intent.putExtra("url", "url");
intent.putExtra("test", false);
startActivity(intent);
注意!创建第二个 activity 后,如果我调用 finish,它将带我到我的主页 Activity。这太棒了。 但是我不想结束,我只是想转到 activity,从中调用我的 class。
我试过:moveTaskToBack(true);
但它会将应用程序发送到主屏幕。
我也做了这个代码:
ActivityManager m = (ActivityManager) getSystemService(ACTIVITY_SERVICE );
List<ActivityManager.RunningTaskInfo> runningTaskInfoList = m.getRunningTasks(10);
Iterator<ActivityManager.RunningTaskInfo> itr = runningTaskInfoList.iterator();
while(itr.hasNext()){
ActivityManager.RunningTaskInfo runningTaskInfo = (ActivityManager.RunningTaskInfo)itr.next();
int id = runningTaskInfo.id;
CharSequence desc= runningTaskInfo.description;
int numOfActivities = runningTaskInfo.numActivities;
String topActivity = runningTaskInfo.topActivity.getShortClassName();
Log.i("","top activity: " + topActivity);
}
认为我可以使用 FLAG_ACTIVITY_REORDER_TO_FRONT
但是,我没有取回 activity,这是为什么? 我得到的是:
12-06 13:17:54.213: D/HeartRateApplication(3168): top activity: com.vidyo.vidyocore.activities.WebViewActivity
12-06 13:17:54.213: D/HeartRateApplication(3168): top activity: com.google.android.launcher.GEL
但如果我真的完成了,显然我的家Activity就在那里,因为它让我回到了那里。为什么我没有从 运行 活动中得到它? 我该如何解决这个问题?
编辑:
有评论说我应该带着意图开始 activity。所以我觉得可能我不够清楚。
我无法启动默认 Activity 的意图。
这个 InCallActivity 有可能被多个活动调用。因此我需要知道它之前的 activity 是什么,所以我可以调用那个 activity 的意图,就像我说的 FLAG_ACTIVITY_REORDER_TO_FRONT
因此,使用 runningTaskInfo
的逻辑并没有为我提供整个后台堆栈。有没有另一种方法来获取 backstack,这样我就可以真正知道 activity 开始的原因?
使用 Intent.FLAG_ACTIVITY_CLEAR_TOP
启动 activity也可以参考一下 this
String Activity name= getIntent().getStringExtra("mActivityName");
使用它来跟踪您的 activity 流量和名称。