bra*_*ey4 6 android task android-activity
我的问题:
如何在使用以下规则时在其自己的任务中启动新活动.
1)如果Activity已经作为另一个Task的根存在(在同一个应用程序中),则将Task带到前台.我不希望创建另一个Activity实例.我只是希望它是作为前景的根的任务和要显示的任务的顶级活动.
注意:它一次只能作为一个任务的根,它只会作为任务的根目录而不存在.
2)如果Activity不存在,则在其自己的Task中创建此Activity.
为什么我要努力实现这一目标?我在我的活动底部创建了四个底部,它们应该像标签一样.因此,如果我按下第二个"选项卡",我希望显示与该选项卡关联的活动.但是如果它已经存在并且位于其自己的Task的底部,那么我希望该任务显示在当前位于Task顶部的任何Activity上.
到目前为止我尝试了什么?我搜索了stackOverflow并找不到类似的问题.我阅读了http://developer.android.com/guide/topics/fundamentals/tasks-and-back-stack.html 和http://blog.akquinet.de/2010/04/15/android-activites-and-任务系列的意图,标志/
我想我需要使用FLAG_ACTIVITY_NEW_TASK和/或亲和力但不确定.请找一只手.
谢谢,Bradley4
dro*_*kar 18
我能够为Android版本> = Honeycomb解决这个问题:
@TargetApi(11)
protected void moveToFront() {
if (Build.VERSION.SDK_INT >= 11) { // honeycomb
final ActivityManager activityManager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
final List<RunningTaskInfo> recentTasks = activityManager.getRunningTasks(Integer.MAX_VALUE);
for (int i = 0; i < recentTasks.size(); i++)
{
Log.d("Executed app", "Application executed : "
+recentTasks.get(i).baseActivity.toShortString()
+ "\t\t ID: "+recentTasks.get(i).id+"");
// bring to front
if (recentTasks.get(i).baseActivity.toShortString().indexOf("yourproject") > -1) {
activityManager.moveTaskToFront(recentTasks.get(i).id, ActivityManager.MOVE_TASK_WITH_HOME);
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
您还需要将这些添加到清单中:
<uses-permission android:name="android.permission.GET_TASKS" />
<uses-permission android:name="android.permission.REORDER_TASKS" />
Run Code Online (Sandbox Code Playgroud)