如何从最近应用程序列表中删除应用程序?

60

我猜Android不会让人们这样做,因为他们认为他们已经完美地处理了任务/应用程序。然而,在我的情况下,我确实需要这样做。

我有一个Activity A作为我的应用程序的入口点。在该活动中,它读取首选项并决定启动哪个活动,比如B或C。之后,它就结束了自己。因此,活动A从未出现在用户面前。

我的应用程序将东西存储在sdcard上,并不断地从中读取。所以,当sdcard卸载时,我需要向用户显示一条消息,表明sdcard不可用,而不是打开B或C。我在A中设置了一个检查,以在sdcard不可用时显示该消息。当显示该消息时,A将不会尝试启动B或C。

如果用户只从应用程序启动器进入我的应用程序,则一切正常。但是,我发现如果用户最近打开过它,则用户也可以通过长按主屏幕键并从最近使用的应用程序列表中选择它进入我的应用程序。当用户这样做时,它会跳过A直接进入B或C。由于我没有在它们两个中进行检查,所以在我尝试访问sdcard时抛出异常,并强制关闭对话框弹出。

我可以简单地将我的检查移动到B和C中来解决这个问题。但是,在未来,从A启动的活动数量将增加。如果有6个,我就需要将这个检查复制到6个位置。不用说,这看起来非常丑陋,并且是一个维护噩梦。

因此,最好的解决办法应该是当sdcard被卸载时,从最近使用的应用程序列表中删除我的应用程序。然而,我找不到如何做到这一点。即使杀死进程或使用ActivityManager.restartPackage,它仍然会出现在列表中。有人能告诉我如何从列表中删除它吗?


5
我很需要在我的情况下这样做。那么你的设计是错误的。 - Falmarri
这个答案 https://dev59.com/7G865IYBdhLWcg3wi_I2#6468975 对我没用,@user412759 你试过其他额外的解决方案吗? - Ashvin solanki
9个回答

210

尝试

<activity android:name=".MainActivity"
        android:excludeFromRecents="true" ...
在你的 AndroidManifest.xml 的活动声明中。

如果我点击概览(最近使用的应用)按钮,活动将显示在最近列表中。 - user4774371

20

其他属性可以帮助您的活动与同一包中的其他活动隔离开来。

<activity 
android:name=".aActivity"
android:excludeFromRecents="true"
android:taskAffinity=""
android:launchMode="singleInstance">

17

只需在清单文件中的活动标记中添加 android:excludeFromRecents="true",就可以了解它的易用性。


14

您需要在AndroidManifest.xml中的启动器活动中设置以下代码:

<activity>
  ...
  android:excludeFromRecents="true"
  ...
</activity>

或从这个活动开始

intent.setFlags(Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);

还需要在 AndroidManifest.xml 文件中进行相应配置。

<activity>
  ...
  android:label=""
  ...
</activity>

将标签设置为空将使此活动不显示在“最近使用的应用”列表中。


4
我建议您不要这么做,但您可以尝试以下选项:
选项1:
在B和C上添加以下内容:
protected void onPause() {
  finish();
}

选项2:
AndroidManifest中添加以下内容到B和C:
android:noHistory= "true"

3

从最近应用列表中删除您的应用程序可能是不可能的,而且绝对不是最好的解决方案。这只会让用户感到困惑,因为他们期望所有应用程序的行为都是相似的。

无论如何,我认为这并不能解决您的问题。如果用户在B活动上按下主页键,然后从主页选择您的应用程序,它将再次启动B活动。

有很多方法可以解决真正的问题。一个简单的方法可能是创建一个基本的活动,执行SD卡检查,并让所有活动都从它继承。这样检查只需要在一个地方进行。


2

好的,我知道在Android版本2.3.4中可以实现。当打开Toddler Lock应用程序时,它会清除最近使用的应用程序列表,因此当你“锁定”手机并长按Home键时,列表为空。不幸的是,我还没有找到如何实现这一点。所以对于任何正在寻找并阅读说这是不可能的帖子的人,请不要放弃。我肯定不会。


1

如果你想在按钮点击时退出应用程序,请使用以下代码:

Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
startActivity(intent);

为了杀死整个应用并将其从运行应用列表中移除,请通过其pid(它很讨厌)杀死该应用程序…在上述代码之前使用以下代码行。
int pid = android.os.Process.myPid();
android.os.Process.killProcess(pid);

1

试试这个,它将完成所有活动并从最近使用列表中删除应用程序

private fun killCurrentApp() {
    val am = this.getSystemService(Context.ACTIVITY_SERVICE) as ActivityManager?
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
        val appTasks = am!!.getAppTasks()
        if (appTasks.size > 0) {
            val appTask = appTasks.get(0)
            appTask.finishAndRemoveTask()
        }
    }
}

完美运行!而且不需要最低API版本21。 - Adrian Grygutis

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接