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

我想Android不会让人们这样做,因为他们认为他们有完美的任务/应用程序处理。 但是,我真的需要在我的情况下这样做。

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

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

如果用户只从应用程序启动器进入我的应用程序,事情完美的作品。 但是,我发现用户也可以通过长时间按住家里的应用程序进入我的应用程序,如果他最近打开了应用程序列表,就从最近的应用列表中select。 当用户这样做,它跳过A,并直接进入B或C.我没有在他们的支票,所以exception是在我试图访问SD卡,并强制closures对话框popup。

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

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

尝试

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

在你的AndroidManifest.xml的活动声明中。

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

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

只需在清单文件的活动标签中添加android:excludeFromRecents="true"即可

你需要设置AndroidManifest.xml:

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

或从此开始此活动

 intent.setFlags(Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS); 

也在AndroidManifest.xml中

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

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

我不会推荐这样做,但我会尝试以下选项:

选项1:

在B和C上添加:

 protected void onPause() { finish(); } 

选项2:

AndroidManifest添加到B和C中:

 android:noHistory= "true" 

从最近的应用程序列表中删除应用程序可能是不可能的,绝对不是最好的解决scheme。 这只会混淆期望所有应用程序行为相似的用户。

无论如何,我不认为这会解决你的问题。 如果用户在活动B时打开家庭,则从主页select您的应用程序,它将再次启动活动B.

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

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

如果你想退出button上的应用程序点击使用此代码:

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