I based my solution on guest’s above, as well as gilsaints88’s comments below (for Android L compatibility):
Add this activity to your AndroidManifest.xml file:
<activity
android:name="com.example.ExitActivity"
android:theme="@android:style/Theme.NoDisplay"
android:autoRemoveFromRecents="true"/>
Then create a class ExitActivity.java:
public class ExitActivity extends Activity
{
@Override protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
if(android.os.Build.VERSION.SDK_INT >= 21)
{
finishAndRemoveTask();
}
else
{
finish();
}
}
public static void exitApplication(Context context)
{
Intent intent = new Intent(context, ExitActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NO_ANIMATION | Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
context.startActivity(intent);
}
}
Then whenever you want to force close your application and remove it from the recent’s list, call:
ExitActivity.exitApplication(context);
This solution works for me instead of declaring android:excludeFromRecents=”true” because I want the user to be able to see the app in the recents list UNTIL the point where my app triggers closing the app programmatically.