当活动已经运行时,我会转动标志 noHistory 和 excludeFromRecents 。 例如,当谷歌浏览器以隐身模式打开时会生成通知, 当你点击它时,它会删除堆栈的所有活动并从最近删除。我希望通过我的应用程序的一些活动来做这样的事情。
修改 David Wasser的解决方案提案有效,但我的问题有点复杂。 这是我的manifest.xml
...
<activity
android:name=".ActivityRecive"
android:excludeFromRecents="true"
android:noHistory="true">
<intent-filter>
<action android:name="android.intent.action.SEND" />
<action android:name="android.intent.action.SEND_MULTIPLE" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="image/*" />
<data android:mimeType="video/*" />
</intent-filter>
</activity>
<activity
android:name=".ActivityPasswordToIncognito">
</activity>
<activity
android:name=".ActivityIncognitoMode1">
</activity>
<activity
android:name=".ActivityIncognitoMode2">
</activity>
<activity
android:name=".ActivityIncognitoMode3"
</activity>
...
ActivityRecive:由于意图而开始。我希望此活动从堆栈中排除并从最近排除。 ActivityRecive可以启动ActivityPasswordToIncognito。
ActivityPasswordToIncognito:&#34; normal&#34;活动。 ActivityPasswordToIncognito可以启动ActivityIncognitoMode(X)。
ActivityIncognitoMode(X):他们可以启动ActivityIncognitoMode(x + 1),我希望当用户从隐身模式中退出时从最近和堆栈中删除。
问题是root Activity(ActivityRecive)使用了android:excludeFromRecents =&#34; true&#34 ;,然后从最近的任务中排除任务中的所有活动。我尝试使用FLAG_ACTIVITY_NEW_TASK启动ActivityPasswordToIncognito,但无效。
答案 0 :(得分:1)
如果你想让你的整个应用程序消失,并且在“最近的任务”列表中没有留下任何痕迹,你应该能够做到这样的事情:
Intent intent = new Intent(this, MyRootActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP |
Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
intent.putExtra("finish", true);
startActivity(intent);
在根活动中,将以下代码添加到onCreate()
:
super.onCreate();
if (getIntent().hasExtra("finish")) {
// Need to finish now
finish();
return;
}
... rest of your onCreate() code...
这将清除堆栈返回到您的根活动(具有ACTION = MAIN和CATEGORY = LAUNCHER的那个),然后根活动将退出。由于根活动是使用Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS
启动的,因此它不应显示在最近任务列表中。
注意:这仅在您的根活动在应用程序中启动其他活动时保留在活动堆栈中时才有效(即:不会调用finish()
)。