Я написал приведенный ниже скрипт, чтобы получить несколько разрешений на выполнение для контактов и местоположения.Я использую два переключателя в макете для контактов и местоположений соответственно.Если я нажимаю переключатель «Контакт», он запрашивает разрешение для контактов и местоположения, как и ожидалось.Затем я вручную удалил разрешение местоположения из действия настроек «Разрешения приложения».Теперь, если я нажму на переключатель местоположения, он снова запросит контакты и местоположение.
У меня вопрос, поскольку я разрешил контакты вв первый раз, и я вижу, что разрешение предоставлено в действии настроек «Разрешения приложения», зачем снова запрашивать разрешение контактов?Даже я проверяю это в методе hasPermissions.
public static final int REQUEST_ID_MULTIPLE_PERMISSIONS = 1001;
String[] PERMISSIONS = {Manifest.permission.READ_CONTACTS, Manifest.permission.WRITE_CONTACTS,
Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.basic_permissions);
CONTACTS_ACCESS_SWITCH = (Switch) findViewById(R.id.contactsPermissionSwitch);
LOCATION_ACCESS_SWITCH = (Switch) findViewById(R.id.locationPermissionSwitch);
CONTACTS_ACCESS_SWITCH.setOnClickListener(requestPermissionMethod);
LOCATION_ACCESS_SWITCH.setOnClickListener(requestPermissionMethod);
}
private void requestPermissionMethod() {
if (!hasPermissions(BasicPermissions.this, PERMISSIONS)) {
ActivityCompat.requestPermissions(BasicPermissions.this, PERMISSIONS, REQUEST_ID_MULTIPLE_PERMISSIONS);
}
}
private boolean hasPermissions(Context context, String... permissions) {
if (context != null && permissions != null) {
for (String permission : permissions) {
if (ContextCompat.checkSelfPermission(BasicPermissions.this, permission) != PackageManager.PERMISSION_GRANTED) {
return false;
}
}
}
return true;
}
Файл манифеста:
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.WRITE_CONTACTS"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
Конфиг:
Тестирование в Android 6.0 android studio emulator device.
compileSdkVersion 27.
minSdkVersion 18
targetSdkVersion 27