web-dev-qa-db-fra.com

Xiaomi ne reçoit pas de notification lorsque l'application n'est pas en cours d'exécution

Je travaille sur une application où j'utilise Google Push Notification. L'application reçoit une notification lorsqu'elle s'exécute sur le téléphone Xiaomi, sinon, lorsqu'elle est tuée, elle ne reçoit pas de notification.

Si nous voulons recevoir une notification si l'application est supprimée, nous devons autoriser manuellement l'application de redémarrage automatique à partir de l'application de sécurité de xiaomi. Je veux une astuce pour le faire par programme sans demander à l'utilisateur. Est-ce qu'il y a un moyen de faire ça ?

enter image description here

http://en.miui.com/thread-33826-1-1.html

36
N Sharma

Il y a cinq paramètres qui doivent être faits manuellement en cas de xiaomi pour exécuter correctement n'importe quelle application. J'ai fait beaucoup de recherches à ce sujet et il n'y a aucun moyen de corriger ces paramètres par programme. Ce sont les paramètres:

  1. Démarrage automatique -> ON (basculer et redémarrer votre application)
  2. Optimisation MIUI sous Options développeur -> OFF
  3. Optimisation de la mémoire sous Options développeur -> FAIBLE/NON
  4. Aucune restriction sur les activités d'arrière-plan sous Paramètres de batterie et de performances
  5. Économiseur de batterie -> OFF

Il existe de nombreux autres appareils dans lesquels les réglages manuels doivent être effectués pour que l'application fonctionne comme prévu, par exemple Lenovo, certains appareils Micromax. Les entreprises imposent ce type de restrictions sur les activités de fond pour améliorer la durée de vie globale de la batterie. Certaines applications comme Facebook et WhatsApp fonctionnent correctement car elles pourraient avoir été incluses en tant qu'applications système.

9
Aman Kaushik

Après MIUI 6 & 7:

Le mode d'économie d'énergie de MIUI est réglé par défaut sur "Standard" (l'accès en arrière-plan aux services de localisation et au réseau sera restreint)

Où placer:

Paramètres -> Paramètres supplémentaires -> Batterie et performances -> Gérer l'utilisation de la batterie des applications -> Modes d'économie d'énergie -> Désactivé (MIUI ne restreindra pas les activités en arrière-plan)

6
Tony Yeh

Quant à ma compréhension une fois que vous avez effacé les applications ou effacé la mémoire dans le menu des applications récentes, xiaomi (ou MIUI rom) forcera la fermeture de tous les services et de la mémoire liés à cette application similaire à l'utilisateur va dans les paramètres et force l'arrêt de l'application,

Ce lien parle du même problème, donc tous les récepteurs et services de diffusion seront arrêtés à moins qu'ils ne soient redémarrés par l'utilisateur, de sorte que la notification ne sera pas reçue,

Cependant, vous pouvez simplement activer le démarrage automatique pour les autorisations de votre application dans les paramètres et si cela ne fonctionne toujours pas, essayez de créer un service qui redémarre par lui-même et activez démarrage automatique dans les paramètres, AutoStart est très important dans MIUI, jusqu'à ce qu'il soit activé, toutes les notifications ou activités d'application seront fermées de force et ne démarreront jamais

2
Ujju

J'ai rencontré un problème similaire et l'ai résolu en ajoutant un récepteur BOOT_COMPLETED à mon application.

Ajoutez ce qui suit au manifeste:

<receiver
    Android:name=".receivers.BootReceiver"
    Android:enabled="true">
    <intent-filter>
       <action Android:name="Android.intent.action.BOOT_COMPLETED" />
    </intent-filter>
</receiver>

Créez ensuite votre classe BootReceiver

public class BootReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        if (intent.getAction().equals("Android.intent.action.BOOT_COMPLETED")) {

            Intent startServiceIntent = new Intent(context, FBTokenService.class);
            context.startService(startServiceIntent);

            Intent notificationServiceIntent = new Intent(context, FBNotificationService.class);
            context.startService(notificationServiceIntent);
        }
    }
}

Cela devrait fonctionner avec cela.

0
Nikhil Gupta