web-dev-qa-db-fra.com

Exécuter des services d'arrière-plan en mode économiseur de batterie Android

J'ai un service d'envoi de requête http qui fonctionne en arrière-plan et fonctionne correctement en "mode normal". Le problème est que lorsque je mets mon téléphone en "mode économiseur de batterie", le service ne fonctionne pas. Mais, des applications comme Whatsapp fonctionnent toujours. Avez-vous une idée de ce qui se passe?

5
mauriballes

Les applications mobiles telles que Whatsapp doivent demander l'autorisation de les exempter du mode Veille/Économie de batterie et du mode Veille de l'application.

Il est possible de configurer cela manuellement en configurant la liste blanche dans Paramètres> Batterie> Optimisation de la batterie

Sinon, à partir de l'API 23, vous pouvez utiliser le modèle d'autorisations pour demander aux utilisateurs de les ajouter à la liste blanche (voir this ). Depuis l'API Vous pouvez également vérifier si votre application est actuellement sur la liste blanche en appelant isIgnoringBatteryOptimizations ()

Cependant, vous devez satisfaire à certains critères pour pouvoir vous mettre en liste blanche. Sinon, vous rencontrez des problèmes lorsque vous maintenez l'application sur Google Play Store.

Mais la plupart des applications de messagerie telles que Whatsapp sont déclenchées par des notifications Push hautement prioritaires. Elles ont donc plus de chances d'être actives même si le processus en arrière-plan n'est pas en cours d'exécution.

4
Sagar

Ajouter une permission 

<uses-permission 
Android:name="Android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS"/>

demander la liste blanche de votre application

 if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            Intent intent = new Intent();
            String packageName = getPackageName();
            PowerManager pm = (PowerManager) getSystemService(POWER_SERVICE);
            if (!pm.isIgnoringBatteryOptimizations(packageName)) {
                intent.setAction(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS);
                intent.setData(Uri.parse("package:" + packageName));
                startActivity(intent);
            }
        }
0
Anirban

Les services d'arrière-plan sont en cours d'élaboration depuis Marshmallow et ne doivent pas être utilisés à des fins autres que celles de premier plan depuis Oreo.

Le mode assoupi interdira toute opération tant qu’il sera actif, le téléphone cessera de s’assoupir quelques ms toutes les X heures, une bibliothèque vous autorisant à effectuer certaines opérations pendant ce temps.

Si vous souhaitez effectuer des opérations en arrière-plan pendant l'assoupissement et l'économiseur de batterie, consultez le JobScheduler pour une opération exécutée toutes les 15 minutes ou plus tant que le téléphone n'est pas assoupi et si vous en avez besoin. plus souvent, je vous conseillerais de consulter le JobDispatcher . Les deux exécuteront votre tâche en sortant du mode assoupi

0
Flowwlol