Запрос игнорировать оптимизацию батареи, как это сделать правильно

Я IntentService задача в режиме переднего плана, но в Android M + задача останавливается в режиме Doze. Я читал Google запрещен, если приложение использует намерение установить себя в белый список. Но если я использую разрешение и проверяю грант или отказ, я получаю предоставленный результат, но ничего не происходит. Я не вижу свое приложение в белом списке. Как добавить приложение в белый список без запрета? (Я добавил разрешение в 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);
                }
            }
        }

2 ответов


REQUEST_IGNORE_BATTERY_OPTIMIZATIONS не dangerous разрешения. Вам не нужен и не нужен этот код. Цитата документация REQUEST_IGNORE_BATTERY_OPTIMIZATIONS:

разрешение приложение должно содержать для использования ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS. Это обычное разрешение: приложение, запрашивающее его, всегда будет получать разрешение без необходимости его утверждения или просмотра пользователем.

Итак, удалите весь этот код.

Я не вижу свое приложение в белом списке.

это потому, что пользователь не добавит вас в белый список, видимо.

С просьбой REQUEST_IGNORE_BATTERY_OPTIMIZATIONS предоставляет вам полномочия, с точки зрения безопасности, начать действие с an ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS Intent. Не забудьте включить пакет вашего приложения в качестве Uri:

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

пользователь будет доставлен на экран, где они могут указать, что они готовы приостановить части режима Doze эффекты для вашего приложения.

как я могу добавить приложение в белый список без запрета?

если вы не хотите быть запрещены, не делайте ничего из этого. Есть что-то в вашем приложении, которое начинает действие с an ACTION_IGNORE_BATTERY_OPTIMIZATION_SETTINGS Intent. Это приводит пользователя к общему списку приложений, где пользователь может переключать, какие из них находятся и не находятся в белом списке. Для этого не требуется никакого разрешения.

акт запроса REQUEST_IGNORE_BATTERY_OPTIMIZATIONS в манифест что может вам запрещен.


помните об использовании настроек.ACTION_IGNORE_BATTERY_OPTIMIZATION_SETTINGS намерение для деятельности, это не работает на всех телефонах, и вы получите android.содержание.ActivityNotFoundException. В частности, он не работает на телефонах Samsung под управлением Android 6. Единственная комбинация, которую я нашел, работает на этих телефонах, - объявить REQUEST_IGNORE_BATTERY_OPTIMIZATIONS в манифесте, а затем запустить действие с настройками намерения.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS. Т. е. комбинация, которая не нравится Google.