web-dev-qa-db-fra.com

onTaskRemoved () ne reçoit pas d'appel sur les appareils HUAWEI et XIAOMI

J'ai utilisé la méthode onTaskRemoved() dans un service pour détecter le moment où une application a été supprimée de la liste RÉCENTE de l'appareil en la faisant glisser. J'effectue une journalisation et d'autres opérations qui doivent avoir lieu lorsque cela se produit. Cela fonctionne parfaitement.

J'ai ensuite vérifié cette méthode dans un appareil HUAWEI exécutant Android 6.0. La méthode n'est jamais appelée. J'ai également ajouté un appel Log.d et comme prévu, ce journal n'est jamais apparu. La même chose se produit sur un Dispositif XIOMI.

Des idées pourquoi cela se produit et comment résoudre ce problème? Ou existe-t-il un autre moyen de détecter que l'application a été supprimée de la liste RÉCENTE sans s'appuyer sur onTaskRemoved()?

Merci

32
Alon Minski

Lorsque l'utilisateur a installé votre application sur un appareil xiaomi, redirigez l'utilisateur vers l'activité de démarrage automatique et dites à l'utilisateur d'activer:

if (Build.BRAND.equalsIgnoreCase("xiaomi")) {
                Intent intent = new Intent();
                intent.setComponent(new ComponentName("com.miui.securitycenter", "com.miui.permcenter.autostart.AutoStartManagementActivity"));
                startActivity(intent);
            }

Utilisez le code ci-dessus pour lancer la page d'activité de démarrage automatique sur Xiaomi

16
Vishnu Prasad

Sur certains appareils (certains LG, Huawei, Xiaomi et autres), votre application doit être ajoutée manuellement à une liste d '"applications protégées" ou "d'applications autorisées à s'exécuter en arrière-plan" pour Android pour redémarrer les services STICKY. Si votre application n'a pas été ajoutée manuellement à cette liste, Android tue simplement vos processus et ne les redémarre pas et n'appelle pas non plus onTaskRemoved(). Ceci permet de préserver la durée de vie de la batterie en limitant le nombre d'applications pouvant avoir des services STICKY en arrière-plan.

Sur ces appareils, vous devriez voir une page dans les "Paramètres", parfois sous "gestion de l'alimentation", parfois à d'autres endroits, où vous devez ajouter explicitement votre application. Vous devrez également dire à vos utilisateurs d'ajouter explicitement votre application à cette liste.

27
David Wasser

J'ai utilisé la méthode onTaskRemoved () dans un service pour détecter le moment où une application a été supprimée de la liste RECENT de l'appareil en la balayant.

En donnant plus de lumière à la réponse fournie par David Wasser

Ce n'est pas nouveau sur Xiaomi parce que Xiaomi a une fonctionnalité appelée autorisation d'application, où un utilisateur doit autoriser l'application à démarrer automatiquement (Service). Dans votre cas, le Service n'est pas appelé, une fois qu'il est terminé depuis la pile.

Allez comme ceci et autorisez votre application à démarrer automatiquement:

Settings > permissions > Autostart

6
W4R10CK

Dans Mon Huawei, j'ai également rencontré un problème, allez simplement dans Paramètres => Économie d'énergie => Protéger l'application => trouvez votre application et activez-la .. Le service commencera à fonctionner ..

3
Sanjay Goswami

Avertissement: Ce n'est pas une bonne solution .. C'est le hack

Vous pouvez empêcher l'application de tuer par l'utilisateur

Dans votre manifeste -> à l'intérieur de la balise d'activité -> Ajouter la ligne suivante

Android: excludeFromRecents = "true"

Votre application n'apparaît pas dans l'historique des applications récentes. L'utilisateur ne peut donc pas tuer l'application.

1
Ranjith Kumar