如何使用IntentCompat.makeRestartActivityTask()?

Ren*_*Pet 11 android android-intent

我正在尝试实现一个按钮,这将导致我的应用程序返回到第一个活动,并表现得好像它(几乎)重新开始.这段代码

Intent newIntent =
        new Intent(currentActivity.getApplicationContext(), StartActivity.class);
newIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK + Intent.FLAG_ACTIVITY_CLEAR_TASK);
currentActivity.startActivity(newIntent);
Run Code Online (Sandbox Code Playgroud)

对于运行Android 4.1的较新平板电脑似乎工作正常,但它不适用于运行Android 2.3.4的旧设备.

我发现了几个关于此的线索:

Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK无法使用Android

清除任务中的所有活动?

阅读细则让我相信我应该使用android-support-v4.jar中的IntentCompat类,http://developer.android.com/reference/android/support/v4/content/IntentCompat.html

不幸的是,文档中没有任何示例,我不确定如何使用IntentCompat.我发现的唯一例子是:不用android 2.3启动MainActivity

这让我相信我应该这样做:

    Intent newIntent = IntentCompat.makeRestartActivityTask(cn);
Run Code Online (Sandbox Code Playgroud)

但是这给了我一个编译器错误,说"makeRestartActivityTask"是一个未定义的符号.

我猜这意味着我没有正确地将android-support-v4.jar添加到我的构建环境(IntelliJ IDEA 12社区版),但我尝试过几种不同的方式,但它仍然不起作用.

所以我有两个问题:

  1. 我尝试使用IntentCompat看起来是否正确?

  2. 如何让编译器停止说"makeRestartActivityTask"是一个未定义的符号?

Byt*_*ter 26

更新

Google已删除IntentCompat.makeRestartActivityTask()当前支持库版本中的方法.相反,您可以使用普通的Android API:

ComponentName cn = intent.getComponent();
Intent.makeRestartActivityTask(cn);
Run Code Online (Sandbox Code Playgroud)

我希望这可以节省一些时间寻找替代品;)

  • 删除该方法的支持库27不再与Android 2.3**兼容,这个5年前的问题针对的是**. (4认同)
  • 这对我有帮助.谢谢. (2认同)

Mar*_*ues 21

这就是我使用IntentCompat的方式

    Intent intentToBeNewRoot = new Intent(this, MainActivity.class);
    ComponentName cn = intentToBeNewRoot.getComponent();

    Intent mainIntent = IntentCompat.makeRestartActivityTask(cn);

    startActivity(mainIntent);
Run Code Online (Sandbox Code Playgroud)

这有效地用MainActivity替换了我不再需要的任务根.它适用于Gingerbeard和ICS.我还没有看到"是一个未定义的符号"的消息.

  • 此解决方案适用于Android 4,但不适用于Android 2.3.它什么都没做!任何的想法? (4认同)