Comment faire l'application WhiteList au mode Doze Android 6.0

Cette question est liée à l'aperçu d'Android 6.0 3 qui sera publié finalement à la fin de ce mois.

Je teste quelques trucs dans Android 6.0 dans l'aperçu 3 de Google sur Nexus 5 'hammerhead'.

  • Android GCM avec des saveurs de produits
  • Comment convertir le double au numéro 2 après le point?
  • Comment implémenter un Callback asynchrone à l'aide de la bibliothèque de réseautage de Square's Retrofit
  • Comment pouvons-nous simuler des appels et des SMS dans Android?
  • Faire des demandes POST authentifiées avec Spring RestTemplate pour Android
  • Bibliothèque Android Microsoft Office (.doc, .docx, .xls, .ppt, etc.)
  • La nouvelle fonctionnalité est le «mode doze» – quelque chose comme le mode de sommeil profond lorsque le réseau est désactivé et que le téléphone dort, seul le SMS, les appels ou les messages GCM à haute priorité peuvent le réveiller. Mais comme WhatsApp – dans le mode doze, il reçoit les messages après 2 heures ou plus dépend des minuteries. Mais il existe une liste d'applications «non optimisées» appelées «liste blanche» où vous pouvez ajouter manuellement une application.

    Ok, j'aimerais trouver un moyen d'ajouter ma application par programme sans l'interaction de l'utilisateur à la «liste des applications de la liste blanche» qui existe dans l'appareil dans les paramètres de la batterie.

    En essayant d'utiliser la réflexion pour y entrer, j'ai trouvé:

    Dans l'android.os.IDeviceIdleController, il existe une méthode:

    Public abstract void addPowerSaveWhitelistApp (String packageNameOfApp)

    Mais c'est une interface … Nous ne pouvons donc pas faire une instance d'interface.

    Il n'y a pas encore de documentation sur cette interface ou sur les méthodes, ou sur tout arbre de succession.

    Peut-être que vous avez une idée où je devrais chercher une possibilité d'ajouter par programme là ma application?

    Il existe également une méthode

    Public abstract boolean isPowerSaveWhitelistApp (String packageName)

    Ce qui, je pense, devrait être possible d'accéder de quelque façon? Pour vérifier si l'application existe sur la liste blanche et peut-être à la fin, espérons-nous demander à l'utilisateur de l'ajouter à la liste blanche.

    Donc, ma question est de savoir si quelqu'un d'entre vous a essayé de faire quelque chose avec un meilleur résultat? Je suis coincé et je pense que c'est une impasse.

    Pour plus d'informations: https://newcircle.com/s/post/1739/2015/06/12/diving-into-android-m-doze

  • Autorisation de Android 6.0.GET_ACCOUNTS
  • Autorisations multiples de l'Android 6.0
  • Le bouton ALLOW ne fonctionne pas après la mise à jour
  • Android 6.0 doit être redémarré après avoir accordé l'autorisation de l'utilisateur au moment de l'exécution
  • Autorisations d'Android M: Confus sur l'utilisation de la fonction shouldShowRequestPermissionRationale ()
  • Problème de préférences partagées étranges d'Android M
  • 5 Solutions collect form web for “Comment faire l'application WhiteList au mode Doze Android 6.0”

    Il n'est pas possible de désactiver les optimisations de la batterie (= application de la liste blanche pour le mode doze) sans interaction de l'utilisateur sur Android M Aperçu 3.

    Cela peut être fait avec l'interaction de l'utilisateur de cette façon:

    Intent intent = new Intent(); String packageName = context.getPackageName(); PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE); if (pm.isIgnoringBatteryOptimizations(packageName)) intent.setAction(Settings.ACTION_IGNORE_BATTERY_OPTIMIZATION_SETTINGS); else { intent.setAction(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS); intent.setData(Uri.parse("package:" + packageName)); } context.startActivity(intent); 

    Ajouter une autorisation

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

    Demandez 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); } } 

    Pour autant que je sache, vous ne pouvez pas vous faire une liste blanche de Doze. Ignorer les optimisations de la batterie ne désactive pas le doze. Voir ici: https://code.google.com/p/android-developer-preview/issues/detail?id=2225 MISE À JOUR: Dans la version de M, vous pouvez demander d'ignorer les optimisations de la batterie qui vous donneront au moins normalement Accès à Internet en mode Doze.

    Si nous avons des autorisations root, les listes blanches peuvent être réalisées par programmation. Pour ajouter un périphérique dans les applications en liste blanche, exécutez la commande suivante à partir de l'application:

     adb shell dumpsys deviceidle whitelist +<package_name> 

    Pour supprimer un périphérique des applications en liste blanche, exécutez la commande suivante à partir de l'application:

     adb shell dumpsys deviceidle whitelist -<package_name> 

    METTRE À JOUR

    Lorsque l'appareil est à nouveau stationnaire, avec l'écran hors tension et sur la batterie pendant une période de temps, Doze applique la CPU complète et les restrictions de réseau sur les alarmes PowerManager.WakeLock, AlarmManager et les balayages GPS / Wi-Fi .

    Consultez les cas d'utilisation pour la liste blanche pour plus de détails.

    Le tableau ci-dessous met en évidence les cas d'utilisation acceptables pour demander ou être sur la liste blanche des exceptions de la batterie. En général, votre application ne doit pas être sur la liste blanche, à moins que Doze ou App Standby ne brise la fonction principale de l'application ou qu'il existe une raison technique pour laquelle votre application ne peut pas utiliser les messages de haute priorité de GCM.

    Android n developer dit

    Doze est particulièrement susceptible d'affecter les activités que les alarmes AlarmManager et les horloges gèrent , car les alarmes dans Android 5.1 (niveau API 22) ou inférieures ne déclenchent pas lorsque le système est dans Doze .

    Android 6.0 (niveau API 23) présente deux nouvelles méthodes setAndAllowWhileIdle() : setAndAllowWhileIdle() et setExactAndAllowWhileIdle() . Avec ces méthodes, vous pouvez configurer des alarmes qui disparaîtront même si l'appareil est à Doze.

    Remarque : Ni setAndAllowWhileIdle() ni setExactAndAllowWhileIdle() peuvent déclencher des alarmes plus d'une fois par 15 minutes par application.

    Test avec Doze et App Standby

    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.