2015-02-08 51 views
0

的时候我会打开标志noHistoryexcludeFromRecents,当活动已在运行。 例如,当谷歌浏览器在隐身模式下生成通知时,会生成 ,当您单击它时会消除堆栈的所有活动并从最近删除。我想通过我的应用程序的一些活动来做这样的事情。删除操作,在应用程序运行

编辑: 由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:开始为意图的结果。我希望这个活动被排除在堆栈之外,并且排除From recent。 ActivityRecive可以启动ActivityPasswordToIncognito。

ActivityPasswordToIncognito:“正常”活动。 ActivityPasswordToIncognito可以启动ActivityIncognitoMode(X)。 ActivityIncognitoMode(X):他们可以启动ActivityIncognitoMode(x + 1),我希望当用户从无痕模式退出并从堆栈中删除时。

问题是,根Activity(ActivityRecive)使用了android:excludeFromRecents =“true”,那么最近排除了任务中的所有活动。我曾尝试使用FLAG_ACTIVITY_NEW_TASK启动ActivityPasswordToIncognito,但无法正常工作。

+0

你有什么尝试?你看到什么bejaviour?什么不起作用?更加详细一些。 – 2015-02-09 11:12:26

+0

@DavidWasser我想在活动已经运行时模拟标志noHistory和excludeFromRecents的操作。就像我所知道的完成()该活动一样。但是这不会从最近删除,如果它是重新创建堆栈的最后一个。对不起我的英语不好。 – user60108 2015-02-09 15:24:46

回答

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 =发射器),然后将根活动将退出。由于根目录活动使用Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS启动,因此它不应显示在最近的任务列表中。

注意:只有当您的根活动保留在活动堆栈中时,它才会在您的应用程序中启动其他活动(即:不调用finish())时起作用。

+0

谢谢!在我的情况下,fakerootactivity开始于接收intent.action.send的结果。 fakerootactivity与国旗cleartop和excludefromrecent发射rootactivity。然后rootactivity创建其他活动(例如activityX),然后使用activityX中的“完成”来清理启动rootactivity。但是这并不会从最近删除(显示activityX在最近,但是当打开然后开始rootactivity)。我在manifest.xml中为rootActivity添加ACTION = MAIN和CATEGORY = LAUNCHER – user60108 2015-02-09 20:34:59

+1

请发布您的清单。我完全不了解这一点。 – 2015-02-10 09:21:37

+0

非常感谢。我编辑了这个问题。 – user60108 2015-03-01 14:20:40

相关问题