Android, comment faire pour effacer la récente liste des tâches qui pourraient obtenir de la Maison de bouton dans la plupart des téléphone? La réflexion est une voie possible?

Je suis en train d'écrire un Lanceur, il faut bien le récent app/liste des tâches du système, et non pas "à ne pas montrer mes applications au cours des dernières de la liste des tâches", mais je n'ai aucune idée à ce sujet maintenant.
J'ai cherché dans le stackoverflow et seulement ce problème est assorti mais la réponse n'a pas d'aide.
Un gars a posé les mêmes questions, il a le dessus décrite RemoveTask qui vient d'Android 4.0.
Oui, j'ai vérifié le code source d'Android 2.3.7 et Android 4.0, un tour estime, je pense que j'aurais presque pu atteindre le point de fin si je peux effacer la liste des mRecentTasks qui sont définis dans le ActivityMangerService.Java :

final ArrayList<TaskRecord> mRecentTasks = new ArrayList<TaskRecord>();

Et un autre peut-être utile de définition:

static ActivityManagerService mSelf;
public static ActivityManagerService self() {
    return mSelf;
}

Parce que je ne suis pas familier avec Java&refelction, j'ai besoin d'aide sur la façon de désactiver cette liste, ci-dessous le code de mon:

    public static <T> void clearRecentTaskList(Launcher launcher){
ActivityManager am = (ActivityManager) launcher.getSystemService(Context.ACTIVITY_SERVICE);
Object systemRecentTask = new ArrayList<T>();
Object receiver = null;
Field recentTaskList = null;
Class<?> service = null;
Field self = null;        
try {
service = Class.forName("com.android.server.am.ActivityManagerService");
Log.d(LOG_TAG, "clearRecentTaskList, service gotton"+service.getName());
} catch (ClassNotFoundException e2) {
Log.d(LOG_TAG, "clearRecentTaskList, class service not found");
}
try {
self = service.getDeclaredField("mSelf");
} catch (SecurityException e2) {
Log.d(LOG_TAG, "clearRecentTaskList, SecurityException during get mSelf");
} catch (NoSuchFieldException e2) {
Log.d(LOG_TAG, "clearRecentTaskList, NoSuchFieldException during get mSelf");
}
Log.d(LOG_TAG, "clearRecentTaskList, self  gotton " + self.toGenericString());
try {
self.setAccessible(true);
receiver = self.get(null);
} catch (IllegalArgumentException e2) {
Log.d(LOG_TAG, "clearRecentTaskList, IllegalArgumentException during use self to get the receiver");
} catch (IllegalAccessException e2) {
Log.d(LOG_TAG, "clearRecentTaskList, IllegalAccessException during use self to get the receiver");
}
if ( receiver != null){
Log.d(LOG_TAG, "clearRecentTaskList, receiver is : "+receiver.toString());
} else {
Log.d(LOG_TAG, "clearRecentTaskList, receiver is NULL");
}
try {
recentTaskList = service.getDeclaredField("mRecentTasks");
recentTaskList.setAccessible(true);
Log.d(LOG_TAG, "clearRecentTaskList, recentTaskList gotton"+recentTaskList.toGenericString());
try {
systemRecentTask = recentTaskList.get(receiver);
} catch (IllegalArgumentException e1) {
Log.d(LOG_TAG, "IllegalArgumentException during try to clearRecentTask");
} catch (IllegalAccessException e1) {
Log.d(LOG_TAG, "IllegalAccessException during try to clearRecentTask");
}
Log.d(LOG_TAG, "Try to print the size of recent task: "+((ArrayList<T>) systemRecentTask).size());
} catch (SecurityException e) {
Log.d(LOG_TAG, "SecurityException during try to clearRecentTask");
} catch (NoSuchFieldException e) {
Log.d(LOG_TAG, "NoSuchFieldException during try to clearRecentTask");
}   
}

Avec cette fonction, je rencontre toujours le "NullPointerException" parce que le récepteur est null, qui a obtenu par soi-même. Et j'ai essayé une autre manière comme cela(Si j'ai supprimer tous les try/catch):

self = service.getDeclaredMethod("mSelf", null);
receiver = self.invoke(null, null); //mSelf is a static method which in ActivityMangerService class

Le même résultat, je ne peux pas obtenir l'instance de ActivityManagerService et puis je ne peux pas obtenir le mRecentTasks.
Tout commentaire est apprécié, et bien que je ne sais pas "comment faire pour supprimer tous les éléments dans cette liste, mais ce pourrait être un autre questions.

Grâce.

Je ne comprends pas ce genre de lanceur vous sont écrit...pourquoi devriez-vous supprimer la récente liste des programmes? Ça sonne pour moi comme un exploit de sécurité, ou, au moins, comme vous l'écrasez Android comportement par défaut dans une très mauvaise façon. Par exemple, un programme malveillant pourrait se cacher...
Non exposée de l'API est susceptible de changer à chaque mise à jour/mise à jour, qui va break votre application. Mieux vaut avoir votre propre applications récentes de la liste composant.
J'espère que cela est protégé par une permission que seul le firmware applications peuvent tenir, même si il y a une lame de script-kiddie façon de pirater votre chemin.
certains le gestionnaire des tâches de permettre à l'utilisateur de nettoyer la trace, les Applications cibles de Lanceur comme Go Launcher, il pourrait vraiment clair "la récente liste de tâches". J'ai besoin d'effacer d'autres applications de l'histoire mais pas se cacher moi, même si je savais comment le faire:). La question actuelle est de savoir comment obtenir l'instance de ActivityManagerService, j'ai fait quelques tests, mais quand même eu un résultat négatif.
il me semble que c'est plus sur un pied d'égalité avec la suppression de l'historique du navigateur, ou d'effacer les cookies que "l'autorisation que seul le firmware applications peut s'en tenir". Le "pédo-lock" s'agit d'une situation qui est mal géré dans Android en général.

OriginalL'auteur Red Zhen | 2012-10-15