我有一个在前台模式下运行的IntentService
任务,但在Android M+中,在Doze模式下该任务会停止运行。我读到谷歌禁止应用程序使用意图将自己置于白名单中。但是,如果我使用权限并检查GRANT或DENIED,则会获得授予的结果,但什么也没有发生。我没有看到我的应用程序在白名单中。如何在不受禁止的情况下将应用程序添加到白名单中?(我已在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);
}
}
}
ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS
,直接跳转到一个特定于你的应用程序和白名单页面,你需要在清单文件中请求REQUEST_IGNORE_BATTERY_OPTIMIZATIONS
,但你不需要为此使用运行时权限代码。如果你想避免该权限,则可以改用ACTION_IGNORE_BATTERY_OPTIMIZATION_SETTINGS
。 - CommonsWare