Удалить приложение из последних приложений программно

Я знаю, что действия могут быть объявлены в манифесте как исключенные из recents с android:excludeFromRecents: http://developer.android.com/guide/topics/manifest/activity-element.html#exclude

Однако, это не то, что я ищу, я хотел бы знать, есть ли способ удалить приложение из последних приложений программно

Ответ 1

Да, обычно, когда вы хотите иметь специальные свойства для Activity при запуске, вы добавляете специальные флаги в Intent. В этом случае FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS.

Обновлено:

Если вам нужно скрыть текущую текущую активность, вы можете использовать этот флаг в сочетании с FLAG_ACTIVITY_CLEAR_TOP, который отправит новое намерение в существующее действие. Вам придется подумать и, возможно, поэкспериментировать с тем, что происходит, когда пользователь перемещается вокруг вашего стека, и будет ли это делать ваше приложение снова появляться в последних приложениях.

Ответ 2

Я сделал это самым простым способом:

Добавить новую активность:

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);
    }
}

Теперь выйти из другого действия:

@Override
public void onBackPressed() {
 ExitActivity.exitApplicationAnRemoveFromRecent(OtherActivity.this);
 super.onBackPressed();
}

Готово.

Ответ 3

Ниже приведено определение флага android:excludeFromRecents (который я знаю, что вы уже видели):

Следует ли исключить задачу, инициированную этим действием, из списка недавно использованных приложений ( "последние приложения" ). То есть, когда эта деятельность является основной деятельностью новой задачи, это атрибут определяет, должна ли задача не отображаться в списке последние приложения. "true", если задача должна быть исключена из списка; "false", если он должен быть включен. Значение по умолчанию - "false".

чтобы удалить приложение из списка последних приложений, вы можете установить этот флаг при первом действии в вашем приложении, так как это действие запускает задачу для вашего приложения. Если у вас есть несколько задач (маловероятно для большинства приложений) в вашем приложении, вам нужно установить этот флаг для корневой активности всей задачи.

Ответ 4

Это можно сделать, используя функциональность 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);
        }
    }

Ответ 5

После получения других ответов мне удалось перейти к следующему обходному пути: у меня есть Activity, пусть он вызывает XPTO, объявленный в манифесте с помощью

и в основном, когда я хочу, чтобы приложение исчезло из списка адресов, я завершаю все остальные действия, а затем запускаю XPTO, который в основном убивает приложение (вызов android.os.Process.killProcess(android.os.Process.myPid()); в onResume()

Если у кого-то есть лучший способ сделать это, поделитесь им.

Ответ 6

Добавьте эти строки в свою активность, поскольку они выходят из приложения.

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