Я работаю над приложением, в котором мне нужно показать изображение контакта пользователя, если оно доступно.
Ниже приведен код для запроса разрешения на чтение_контактов:
public void requestPermissionOrShowRationale(Permission permission) {
if (ActivityCompat.shouldShowRequestPermissionRationale(this, permission.permission)) {
PermissionRationaleDialogFragment dialogFragment =
PermissionRationaleDialogFragment.newInstance(permission);
dialogFragment.show(getSupportFragmentManager(), FRAGMENT_TAG_RATIONALE);
} else {
requestPermission(permission);
}
}
public void requestPermission(Permission permission) {
Timber.i("Requesting permission: " + permission.permission);
ActivityCompat.requestPermissions(this, new String[] { permission.permission }, permission.requestCode);
}
public enum Permission {
READ_CONTACTS(
Manifest.permission.READ_CONTACTS,
PERMISSIONS_REQUEST_READ_CONTACTS,
R.string.permission_contacts_rationale_title,
R.string.permission_contacts_rationale_message
),
WRITE_CONTACTS(
Manifest.permission.WRITE_CONTACTS,
PERMISSIONS_REQUEST_WRITE_CONTACTS,
R.string.permission_contacts_rationale_title,
R.string.permission_contacts_rationale_message
);
и вызов разрешения из действия, как показано ниже:
private void checkAndRequestPermissions() {
if (!hasPermission(Permission.READ_CONTACTS)) {
requestPermissionOrShowRationale(Permission.READ_CONTACTS);
}
}
Все работает нормально, когда я использую targetdk 23. После изменения targetdk до 26 или выше разрешение не работает,если я не выключу и не включу его вручную в настройках разрешений приложения для получения контактов.