В
Android M
permissions нужно также проверять во время выполнения.
Поэтому нужно сначала посмотреть , получили ли мы разрешение от
пользователя.Если да - выполняем работу;нет - просим разрешение:
public static final int NUMBER_OF_REQUEST = 23401;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
int canRead = ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE);
int canWrite = ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE);
if (canRead != PackageManager.PERMISSION_GRANTED || canWrite != PackageManager.PERMISSION_GRANTED) {
//Нужно ли нам показывать объяснения , зачем нам нужно это разрешение
if (ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
//показываем объяснение
} else {
//просим разрешение
requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.READ_EXTERNAL_STORAGE}, NUMBER_OF_REQUEST);
}
} else {
//ваш код
}
}
Теперь проверяем, получили ли мы разрешение:
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
switch (requestCode) {
case NUMBER_OF_REQUEST: {
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
Log.e("TAG", "Пользователь дал разрешение");
} else {
Log.e("TAG", "Пользователь отклонил разрешение");
}
return;
}
}
}