Запрос игнорировать оптимизацию батареи, как это сделать правильно
Я 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.