Есть ли разница между разрешениями ACCESS_FINE_LOCATION и ACCESS_COARSE_LOCATION между SDK 22 и 25? - PullRequest
0 голосов
/ 12 марта 2019

Я пытаюсь получить текущее местоположение либо от GPS, либо от сетевого провайдера, для которого я использую эти разрешения, объявив его в AndroidManifest.xml,

<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>

Я проверяю разрешениево время выполнения, как,

ActivityCompat.checkSelfPermission(context, android.Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED)

и

ActivityCompat.checkSelfPermission(context, android.Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED

Это прекрасно работает для меня с Android SDK версии 22, тогда как в SDK версии 25, хотя разрешение объявлено в AndroidManifest.xml, оно не получаетотражается во время выполнения.

Я проверил, предоставляются ли эти разрешения,

adb shell dumpsys package com.abc.xyz

Разрешенияне были предоставлены для моего приложения, которое работает на SDK-25, когда я пытался предоставить разрешение с помощью оболочки adb как,

adb shell pm grant com.abc.xyz android.Manifest.permission.ACCESS_COARSE_LOCATION

Я подозреваю, что Android сделал эти разрешения доступными для SDK версии 25 (исправьте меня, если я ошибаюсь).Я просто не могу понять, как изменился уровень / уровень разрешений между версиями SDK.

Пожалуйста, помогите мне узнать об этом.

Ответы [ 2 ]

3 голосов
/ 12 марта 2019

Во всех версиях Android ваше приложение должно декларировать как обычные, так и опасные разрешения, которые ему необходимы, в манифесте приложения, как описано в разделе Объявление разрешений. Однако эффект этого объявления различается в зависимости от версии системы и целевого уровня SDK вашего приложения:

Если целевой SDK вашего приложения равен 22 или ниже: если вы указываете опасное разрешение в своем манифест, пользователь должен предоставить разрешение при установке приложение; если они не дают разрешения, система вообще не устанавливает приложение.

Если целевой SDK вашего приложения равен 23 или выше: приложение должно перечислить разрешения в манифесте, и оно должно запрашивать каждое опасное разрешение, в котором оно нуждается во время работы приложения. Пользователь может предоставлять или отклонять каждое разрешение, и приложение может продолжать работать с ограниченными возможности, даже если пользователь отклоняет запрос на разрешение.

Вы можете обратиться к этому Ссылка

1 голос
/ 12 марта 2019

Попробуйте это.

 private boolean RequestPermissions() {

    int camera = ContextCompat.checkSelfPermission(getActivity(), android.Manifest.permission.CAMERA);
    int storage = ContextCompat.checkSelfPermission(getActivity(), android.Manifest.permission.WRITE_EXTERNAL_STORAGE);
    List<String> listPermissionsNeeded = new ArrayList<>();
    if (camera != PackageManager.PERMISSION_GRANTED) {
        listPermissionsNeeded.add(CAMERA);
    }
    if (storage != PackageManager.PERMISSION_GRANTED) {
        listPermissionsNeeded.add(WRITE_EXTERNAL_STORAGE);
        listPermissionsNeeded.add(READ_EXTERNAL_STORAGE);

    }
    if (!listPermissionsNeeded.isEmpty()) {
        ActivityCompat.requestPermissions(getActivity(), listPermissionsNeeded.toArray
                (new String[listPermissionsNeeded.size()]), REQUEST_ID_MULTIPLE_PERMISSIONS);
        return false;
    }

    return true;
}

Это функция, которая проверяет, нужно ли разрешение, и, если они недоступны, запрашивает у пользователя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...