web-dev-qa-db-fra.com

REQUEST_IGNORE_BATTERY_OPTIMIZATIONS comment le faire correctement

J'ai IntentService tâche en mode premier plan, mais en Android M + la tâche s'arrête en mode Doze. J'ai lu Google interdit si l'application utilise l'intention de se mettre en liste blanche. Mais si J'utilise l'autorisation et je coche GRANT ou DENIED, j'obtiens le résultat accordé, mais rien ne se produit. Je ne vois pas mon application dans la liste blanche. Comment puis-je ajouter l'application dans la liste blanche sans interdire? (J'ai ajouté l'autorisation dans AndroidManifest.xml)

if(Build.VERSION.SDK_INT>=23){
    int permissionCheck= ContextCompat
                    .checkSelfPermission(this, Manifest.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS);

    if(permissionCheck == PackageManager.PERMISSION_DENIED){

        //Should we show an explanation
        if(ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS)){
            //Show an explanation
            final String message = "";
             Snackbar.make(coordinatorLayoutView,message,Snackbar.LENGTH_LONG)
                     .setAction("GRANT", new View.OnClickListener() {
                         @Override
                         public void onClick(View v) {
                             ActivityCompat.requestPermissions(MainActivity.this, new String[]{ Manifest.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS }, PERMISSION_REQUEST_CODE);
                         }
                     })
                     .show();

                }else{
                    //No explanation need,we can request the permission
                    ActivityCompat.requestPermissions(this, new String[]{ Manifest.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS }, PERMISSION_REQUEST_CODE);
                }
            }
        }
15
Delphian

REQUEST_IGNORE_BATTERY_OPTIMIZATIONS n'est pas une autorisation dangerous. Vous n'avez pas besoin, ni ne voulez, de ce code. Citation la documentation de REQUEST_IGNORE_BATTERY_OPTIMIZATIONS :

Autorisation qu'une application doit détenir pour utiliser ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS. Il s'agit d'une autorisation normale: une application qui en fait la demande obtiendra toujours l'autorisation, sans que l'utilisateur ait besoin de l'approuver ou de la voir.

Donc, supprimez tout ce code.

Je ne vois pas mon application dans la liste blanche.

C'est parce que l'utilisateur ne vous a pas ajouté à la liste blanche, apparemment.

Demande REQUEST_IGNORE_BATTERY_OPTIMIZATIONS vous autorise, du point de vue de la sécurité, à démarrer une activité avec an ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONSIntent . Assurez-vous d'inclure le package de votre application en tant que Uri:

startActivity(new Intent(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS, Uri.parse("package:"+getPackageName())));

L'utilisateur sera dirigé vers un écran où il pourra indiquer qu'il est disposé à suspendre des portions des effets du mode Doze sur votre application.

Comment puis-je ajouter l'application dans la liste blanche sans interdiction?

Si vous ne voulez pas être banni, ne faites rien de tout cela. Vous avez quelque chose dans votre application qui démarre une activité avec n ACTION_IGNORE_BATTERY_OPTIMIZATION_SETTINGSIntent. Cela conduit l'utilisateur à la liste globale des applications, où l'utilisateur peut basculer entre celles qui sont et ne sont pas sur la liste blanche. Cela ne nécessite aucune autorisation.

L'acte de demander REQUEST_IGNORE_BATTERY_OPTIMIZATIONS dans le manifeste est ce qui peut vous interdire .

26
CommonsWare

Soyez conscient de l'utilisation de l'intention de Settings.ACTION_IGNORE_BATTERY_OPTIMIZATION_SETTINGS pour l'activité, cela ne fonctionne pas sur tous les téléphones et vous obtiendrez une exception Android.content.ActivityNotFoundException. En particulier, cela ne fonctionne pas sur les téléphones Samsung exécutant Android 6. La seule combinaison que j'ai trouvée fonctionne sur ces téléphones est de déclarer les REQUEST_IGNORE_BATTERY_OPTIMIZATIONS dans le manifeste, puis de lancer une activité avec des paramètres d'intention. ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS. C'est-à-dire la combinaison qui n'est pas appréciée par Google.

3
John Bunyan