- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我的问题:
如何在使用以下规则时在其自己的任务中启动新 Activity 。
1) 如果 Activity 已经作为另一个 Task 的根存在(在同一应用程序中),则将 Task 置于前台。我不想创建 Activity 的另一个实例。我只希望它是根的任务来到前台,并显示任务的顶部 Activity 。
注意:它一次只会是一个任务的根,并且只会作为任务的根存在,不会存在于其他地方。
2) 如果 Activity 不存在,则在其自己的任务中创建此 Activity 。
我为什么要努力实现这一目标?我在 Activities 的底部创建了四个底部,它们的行为应该像选项卡一样。因此,如果我按下第二个“选项卡”,我希望显示与该选项卡关联的 Activity 。但是,如果它已经存在并且位于其自身任务的底部,那么我希望该任务与当前位于任务顶部的任何 Activity 一起显示。
到目前为止我尝试了什么?我搜索了 stackOverflow 并找不到类似的问题。我读了http://developer.android.com/guide/topics/fundamentals/tasks-and-back-stack.html和 http://blog.akquinet.de/2010/04/15/android-activites-and-tasks-series-intent-flags/
我想我需要使用 FLAG_ACTIVITY_NEW_TASK 和/或相似性但不确定。请寻找帮助。
谢谢,布拉德利4
最佳答案
我能够为 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);
}
}
}
}
您还需要将这些添加到您的 list 中:
<uses-permission android:name="android.permission.GET_TASKS" />
<uses-permission android:name="android.permission.REORDER_TASKS" />
关于Android,如何将任务带到前台?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6919616/
我是一名优秀的程序员,十分优秀!