以编程方式从最近的应用删除应用

pan*_*dre 49 android

我知道可以在清单中声明活动,因为它们被排除在以下位置android:excludeFromRecents:http: //developer.android.com/guide/topics/manifest/activity-element.html#exclude

但是,这不是我想要的,我想知道是否有办法以编程方式从最近的应用程序中删除应用程序

kab*_*uko 39

是的,通常当你想要一个特殊的属性Activity时,你可以提供特殊的标志Intent.在这种情况下FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS.

更新:

如果您需要隐藏当前已在运行的活动,您可以将此标志结合使用FLAG_ACTIVITY_CLEAR_TOP,以便将新Intent发送到现有活动Activity.您将不得不考虑并尝试使用用户在堆栈中移动时会发生什么,以及是否会使您的应用重新出现在最近的应用中.


Hir*_*tel 33

我以最简单的方式做到了:

添加新活动:

public class ExitActivity extends Activity
{
    @Override protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);

        if(android.os.Build.VERSION.SDK_INT >= 21)
        {
            finishAndRemoveTask();
        }
        else
        {
            finish();
        }
    }

    public static void exitApplicationAndRemoveFromRecent(Context context)
    {
        Intent intent = new Intent(context, ExitActivity.class);

        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK  | Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS | Intent.FLAG_ACTIVITY_NO_ANIMATION);

        context.startActivity(intent);
    }
}
Run Code Online (Sandbox Code Playgroud)

现在退出 其他活动:

@Override
public void onBackPressed() {
 ExitActivity.exitApplicationAndRemoveFromRecent(OtherActivity.this);
 super.onBackPressed();
}
Run Code Online (Sandbox Code Playgroud)

做完了.

  • 你从其他用户的帖子中拿到了这个吗?http://stackoverflow.com/a/28198765/1738090在信用到期时给予信贷. (9认同)

小智 15

这可以使用ActivityManager.AppTask功能完成(从API 21开始)

    ActivityManager am = (ActivityManager)getSystemService(Context.ACTIVITY_SERVICE);
    if(am != null) {
        List<ActivityManager.AppTask> tasks = am.getAppTasks();
        if (tasks != null && tasks.size() > 0) {
            tasks.get(0).setExcludeFromRecents(true);
        }
    }
Run Code Online (Sandbox Code Playgroud)

  • 我如何在低于 21 的 API 级别上使用这种方法? (2认同)

Pra*_*gar 10

以下是旗帜的定义android:excludeFromRecents(我知道你已经看过):

是否应从最近使用的应用程序列表("最近的应用程序")中排除此活动启动的任务.也就是说,当此活动是新任务的根活动时,此属性确定该任务是否不应出现在最近的应用列表中.如果任务应从列表中排除,则为"true"; "假"如果应该包括在内.默认值为"false".

因此,要从最近的应用程序列表中删除应用程序,您可以在应用程序的第一个活动上设置此标志,因为该活动会启动应用程序的任务.如果您的应用程序中有多个任务(大多数应用程序不太可能),那么您需要为所有任务的根活动设置此标志.

  • 但是如果我想在启动"活动"之后将应用程序从最近的*中排除怎么办? (3认同)

Viv*_*rai 7

将这些行添加到退出应用程序的Activity:

@Override
public void finish() {
    if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
        super.finishAndRemoveTask();
    }
    else {
        super.finish();
    }
}
Run Code Online (Sandbox Code Playgroud)


Kan*_*ngh 5

当您的活动完成并且应该关闭并且任务应该作为完成任务的根活动的一部分被完全删除时调用它。

finishAndRemoveTask();
Run Code Online (Sandbox Code Playgroud)