4

在我的应用程序根活动中,我有一个自定义选项卡栏,其中包含三个选项卡,用于在使用 ViewFlipper 实现的三个屏幕之间切换。

我现在要做的是为每个屏幕提供它自己的活动堆栈,使标签栏在我的所有活动中都可用,并在按下标签时在不同的堆栈之间切换。

像蜂窝上的魅力一样工作,我在 ActivityMaganger 类中提供了 BringTaskToFront()。

我尝试了很多解决方案,例如:

  • 重启特定任务的top activity,希望任务移到最前面
  • 以某种方式获得蜂窝类

那么,有什么想法吗?

非常感谢,

斯文

4

2 回答 2

1

在蜂窝及更高版本中,您可以像这样使用 MoveTaskToFront

//Bring Task to front with Android >= Honeycomb
if (Build.VERSION.SDK_INT >= 11) {
    ActivityManager am = (ActivityManager) getSystemService(Activity.ACTIVITY_SERVICE);
    List<RunningTaskInfo> rt = am.getRunningTasks(Integer.MAX_VALUE);

    for (int i = 0; i < rt.size(); i++) 
    {
           // bring to front
           if (rt.get(i).baseActivity.toShortString().indexOf("yourproject") > -1) {                     
              am.moveTaskToFront(rt.get(i).id, ActivityManager.MOVE_TASK_WITH_HOME);
           }
    }
}

确保您的项目使用 Android v.11 或更高版本进行编译,以便此行不会因编译而中断:

am.moveTaskToFront(rt.get(i).id, ActivityManager.MOVE_TASK_WITH_HOME);

对于较旧的 Android 版本,您可以使用以下命令将任务移到前面:

Intent intent = new Intent(this, YourClass.class);//The class you want to show
startActivity(intent);

在 android 清单中添加以下内容

<!--The versions with which to compile-->
<uses-sdk android:minSdkVersion="7" android:targetSdkVersion="11"/>

<!--The Activity you wish to bring forward-->
<activity android:name="YourClass" android:taskAffinity="" android:launchMode="singleTask" />

<!--User Permissions-->
<uses-permission android:name="android.permission.GET_TASKS" />
<uses-permission android:name="android.permission.REORDER_TASKS" />

onBackPressed()最后,确保当您通过覆盖, DO NOT USE 将任务推回时moveTaskToBack(),这将导致您的任务最终对用户不可见。而是使用以下内容:这将模拟主页按钮按下,这将有效地隐藏您的应用程序并显示主屏幕

@Override
public void onBackPressed() {
    Utils.showToast(this, "Your application is running in the background");
    /*Simulate Home Button Press*/
    Intent startMain = new Intent(Intent.ACTION_MAIN);
    startMain.addCategory(Intent.CATEGORY_HOME);
    startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    startActivity(startMain);
}

你去了,我希望这对你有用,并帮助一些人解决这个问题。

于 2014-01-19T10:33:07.490 回答
0

这适用于 Honeycomb 之上和之下的 android 版本。键是意图标志

Intent intent = new Intent(context, YourClass.class);//The class you want to show

intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT | Intent.FLAG_ACTIVITY_NEW_TASK);

context.startActivity(intent);
于 2015-05-22T00:24:22.500 回答