Comment obtenir tâches récentes sur Android “L”?

Fond

Mon application permet de trier une liste d'applications, le temps qu'ils ont récemment été lancé .

Le problème

Comme d'Android "L" , la fonction getRecentTasks va juste retourner la liste des applications que l'application actuelle a lancé, comme écrit dans le documentation:

Si votre application utilise ActivityManager.getRecentTasks()...

Avec l'introduction de la nouvelle concurrente des documents et des activités
les tâches de fonctionnalité dans la prochaine version (voir Simultanée des documents et des
activités dans les Récents écran ci-dessous), le
ActivityManager.getRecentTasks() la méthode est maintenant obsolète pour améliorer
la confidentialité de l'utilisateur. Pour des raisons de compatibilité ascendante, cette méthode renvoie toujours une
petit sous-ensemble de ses données, y compris l'application appelante propre
tâches et peut-être quelques autres non-sensibles tâches (comme la Maison). Si
votre application est l'utilisation de cette méthode pour récupérer ses propres tâches, de l'utiliser
android.app.ActivityManager.getAppTasks() au lieu de les récupérer
de l'information.

Même est écrit lors de l'utilisation de l'outil ADT pour afficher la documentation de cette fonction (pas actuellement disponible sur Internet) :

Cette méthode est obsolète. Comme de L, cette méthode n'est plus disponible
applications tierces: comme l'introduction du document-centric
les récents signifie qu'il peut y avoir des fuites de renseignements personnels à l'appelant. Pour
rétro-compatibilité, il retournera toujours un petit sous-ensemble de ses
données: au moins l'appelant tâches propres (cependant, voir getAppTasks() pour
la bonne façon de récupérer de l'information), et éventuellement
certains autres tâches telles que la maison qui sont connus pour ne pas être sensible.

Je ne comprends pas pourquoi cette loi a été prise, comme il est facile de voir les applications que l'utilisateur a, et même sans aucune permission.

Chose est, c'est une grande restriction de cette fonction que j'ai ajouté, donc j'espère qu'il y est une façon de surmonter ce problème.

Ce que j'ai essayé

Pour l'instant, j'ai seulement utilisé une heuristique sur la façon dont les applications qui ont été récemment lancé - je obtenir la liste des processus en cours d'exécution à la place.

Je pouvais aussi utiliser l'importance de la valeur du processus et peut-être la "importanceReasonComponent" , mais c'est juste tous les heuristiques et des suppositions ...

La question

Est-il un moyen de contourner cette limitation? Aucune solution de contournement, je n'ai pas pensé?

C'est peut-être possible avec la racine? Ou BusyBox ?

  • Eh bien, ils disent la raison: the ActivityManager.getRecentTasks() method is now deprecated to improve user privacy
  • Je n'ai pas vraiment de réponse, mais pour la "je ne comprends pas pourquoi cela a été retiré de la partie", je suppose qu'avec le nouveau "document-centric" tâches introduit par L que vous auriez été en mesure de savoir quels documents ou des pages web que l'utilisateur a ouvert.
  • Oui je l'ai lu. Je ne suis pas d'accord qu'il contribue à la vie privée, d'où ma petite remarque sur elle.
  • Oui, j'ai lu tous (ou au moins ce que j'ai posté ici), et aussi regardé les vidéos, mais je demande ici pour une autre façon, ou d'une solution, même si root/BusyBox est nécessaire. obtenir ce que l'application actuelle a lancé ne l'aide pas beaucoup...
  • Mettant en vedette ceci problème et espérer Google de changer leur esprit avant de L officiellement communiqués semble être le meilleur pari.
  • J'ai fait un fil similaire ici: code.google.com/p/android-developer-preview/issues/... . Au moins, ils peuvent en faire un la permission d'un administrateur, ou un système app seulement la permission...
  • A mon avis le bug je lien est mieux comme ça en disant: "donnez-nous une bonne API" plutôt que les vôtres, qui dit "garder l'feuilletée API travaille".
  • Vous avez souhaité un sous-ensemble de la fonctionnalité actuelle (obtenir une seule activité/tâche qui est sur le premier plan). Je voulais avoir la précédente, qui vous a donné plus que cela (vous a donné toutes les tâches récentes). Pour moi, la plus grande fonctionnalité est plus important, car il ruine l'une de mes application de la fonctionnalité. Désolé. De toute façon, j'ai joué le vôtre aussi.
  • Aussi, BTW, je pense que dans l'une de Google chats (qui Dianne Hackborn répondu elle-même) , ils ont dit qu'ils ne souhaitent pas les applications, afin de pouvoir contrôler le lancement d'autres applications. La question qui était posée était de savoir à propos des journaux de lecture étant obsolète, ce qui a empêché les applications de surveillance de lancement des applications. Je pense que c'est exactement ce que vous souhaitez. Bien sûr, je pense qu'ils sont mal avec cette décision, mais quand même...
  • tbh Google a été la prise de certains vraiment étrange étapes dans le nom de la vie privée dans Android L
  • vrai. Je ne comprends pas la logique, car il ne donne pas vraiment beaucoup de la vie privée.
  • J'espère que quelqu'un trouve un hack sans enracinement. Peut-être des réflexions peut résoudre ce problème. Qui sait, Google lui-même devient assez sage en ne limitant pas sa plate-forme, qui est célèbre/prospère en raison de la personnalisation
  • il y a déjà beaucoup de gens qui demandent à google de ne pas le faire. vous pouvez le faire aussi: code.google.com/p/android-developer-preview/issues/... code.google.com/p/android-developer-preview/issues/... . Je me souviens d'un autre qui était très populaire, mais ne peut pas le trouver.
  • Je veux garder la référence d'un objet/de l'instance, même lorsque le service est détruit, Est-il de toute façon à la faire?
  • Avez-vous un fil ici, demander à ce sujet? Si oui, mettez un lien vers elle, et je vais essayer de vous aider. J'ai besoin de comprendre l'intégralité de "l'histoire"... En tout cas, vous pouvez utiliser un point de référence fixe, mais si le processus lui-même est tué, vous aurez bien sûr de perdre l'objet. Vous pouvez également stocker l'objet dans l'intérieur de la/de stockage externe pour être utilisé plus tard.
  • Je suis sur Android d'accessibilité des services pour cela.