Разрешения манифеста против разрешений настроек приложения

Разрешения манифеста, такие как «SEND_SMS», переопределяют разрешения приложения в настройках, такие как «SMS», если они отключены? Кажется, не установить более поздний.

    <uses-permission android:name="android.permission.SEND_SMS" />
    <uses-permission android:name="android.permission.RECEIVE_SMS" />
    <uses-permission android:name="android.permission.READ_SMS" />

Ожидается SMS для настроек приложения, для которых установлено значение «включено». Сообщения об ошибках не отображаются.


person Marc George    schedule 16.08.2019    source источник
comment
Неа. Эти элементы <uses-permissions> просто объявляют, какие разрешения может использовать ваше приложение в какой-то момент. Переключатели на странице настроек переопределяют все, поэтому пользователь имеет право окончательного решения о том, что разрешено делать вашему приложению. Если у вас возникли проблемы с функцией SMS, вам необходимо предоставить минимально воспроизводимый пример, демонстрирующий проблема.   -  person Mike M.    schedule 16.08.2019


Ответы (1)


Проверьте все разрешения во время выполнения... в вашей MainActivity, так что, если разрешения отключены от настроек, он снова запросит разрешения при открытии приложения.

Вызовите этот метод в onCreate() вашей MainActivity.

private boolean checkAndRequestPermissions() {

    int SEND_SMS = ContextCompat.checkSelfPermission(this, Manifest.permission.SEND_SMS);
    int RECEIVE_SMS = ContextCompat.checkSelfPermission(this, Manifest.permission.RECEIVE_SMS);
    int READ_SMS = ContextCompat.checkSelfPermission(this, Manifest.permission.READ_SMS);

    List<String> listPermissionsNeeded = new ArrayList<>();

    if (SEND_SMS != PackageManager.PERMISSION_GRANTED) {
        listPermissionsNeeded.add(Manifest.permission.SEND_SMS);
    }
    if (RECEIVE_SMS != PackageManager.PERMISSION_GRANTED) {
        listPermissionsNeeded.add(Manifest.permission.RECEIVE_SMS);
    }
    if (READ_SMS != PackageManager.PERMISSION_GRANTED) {
        listPermissionsNeeded.add(Manifest.permission.READ_SMS);
    }

    if (!listPermissionsNeeded.isEmpty()) {
        ActivityCompat.requestPermissions(this, listPermissionsNeeded.toArray
                (new String[listPermissionsNeeded.size()]), 101);
        return false;
    }
    return true;
}
person Priya Vasoya    schedule 16.08.2019
comment
Ваш ответ создает для меня путь для изучения, который привел к нужному мне коду. - person Marc George; 18.08.2019