2010-09-21 113 views
50

我想Android不会让人们这样做,因为他们认为他们对任务/应用程序有完美的处理能力。不过,我真的需要在我的情况下这样做。如何从最近的应用程序列表中删除应用程序?

我有一个活动A充当我的应用程序的入口点。在该活动中,它读取首选项并决定开始哪个活动,比如说B或C.之后,它自行完成。所以,活动A永远不会显示给用户。

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

东西完美地工作,如果用户只输入从应用程序启动我的应用程序。但是,我发现用户也可以通过长时间按住家来进入我的应用程序,并从最近的应用程序列表中选择它,如果他最近打开了它。当用户这样做时,它跳过A并直接进入B或C.我没有在它们两个中的检查,所以当我尝试访问SD卡时抛出异常,并强制关闭对话框弹出。

我可以简单地将我的支票移到B和C上来解决这个问题。但未来,从A开始的活动数量将会增加。如果有6个,我需要把这张支票复制到6个地方。不用说,这看起来非常丑陋,而且是一个维护噩梦。

所以,最好的解决应该从最近的应用程序列表中,当SD卡被删除uunmounted我的应用程序。但是,我无法找到如何做到这一点。即使杀死进程或使用ActivityManager.restartPackage,它仍然会出现在列表中。任何人都可以告诉我如何从列表中删除它?

+5

'我真的需要在我的情况下这样做'然后你的设计是错误的 – Falmarri 2010-09-21 22:19:36

回答

182

尝试

<activity android:name=".MainActivity" 
     android:excludeFromRecents="true" ... 

AndroidManifest.xml的活动宣言。

+1

谢谢你!那就是诀窍! – Jakob 2012-10-30 22:50:16

+0

超棒的男人!帮助了很多:) – nithinreddy 2013-02-18 11:52:31

+2

这应该被标记为正确的答案。 – 2013-09-24 14:16:12

4

我不建议这样做,但我会尝试以下选项:

选项1:

在B和C地址:

protected void onPause() { 
    finish(); 
} 

选项2:

添加到B和C如下在AndroidManifest

android:noHistory= "true" 
4

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

无论如何,我不认为它会解决您的问题。如果用户在活动B时点击回家,然后从主页选择您的应用程序,它将再次启动活动B.

有很多方法可以解决真正的问题。一个简单的方法可能是创建一个执行SD卡检查的基本活动,并让您的所有活动都从其中延伸。这样的支票只在一个地方。

2

好的,我知道它可以在2.3.4中完成。应用程序幼儿锁定时打开清除最近的应用程序列表,以便当您“锁定”您的手机,如果你长按Home键列表是空白的。不幸的是,我还没有找到如何去做。所以对于任何正在阅读和阅读postf的人来说,这是不可能的,不要放弃。我确定你不是。

16

其他属性可以帮助您的活动在同一个包中的其他活动区分开添加android:excludeFromRecents="true"在活动的标签。

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

您需要设置的AndroidManifest.xml:

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

intent.setFlags(Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS); 

启动这一活动,并在AndroidManifest.xml

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

设置标签为空将让这个活动不会显示在最近的应用程序列表中。

+1

非常感谢,最近列表中显示活动。经过数周的搔抓,我终于从答案中找到了问题。 – 2015-07-27 15:40:04

0

如果你想上的按钮点击使用此代码退出应用:

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

杀完整的应用程序,并从Runningapp列表中删除它通过它的PID终止该应用(其讨厌)...使用此线上面的代码之前。

int pid = android.os.Process.myPid(); 
android.os.Process.killProcess(pid);