Есть ли какая-либо разница между разрешениями ACCESS_FINE_LOCATION и ACCESS_COARSE_LOCATION между sdk 22 и 25?

#android #android-manifest #android-permissions #android-location

#Android #android-манифест #android-разрешения #android-расположение

Вопрос:

Я пытаюсь получить текущее местоположение либо от 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 com.abc.xyz

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

adb shell pm предоставляет com.abc.xyz Android.Манифест.разрешение.ACCESS_COARSE_LOCATION

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

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

Комментарии:

1. ACCESS_FINE_LOCATION охватывает оба. Когда у вас есть, ACCESS_FINE_LOCATION тогда вам не нужно ACCESS_COARSE_LOCATION .

2. Читать developer.android.com/guide/topics/location/… для уточнения.

Ответ №1:

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

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

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

вы можете обратиться к этой ссылке

Комментарии:

1. вы можете проверить вышеупомянутую ссылку для документов разработчика Android

Ответ №2:

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

  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;
}
  

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

Комментарии:

1. Это действительно необходимо для запроса от пользователя? Как я могу проверить, когда Android накладывает такие ограничения с версиями SDK?

2. Где я мог бы проверить эту информацию? Я не могу найти это в документе для разработчиков Android.

3. <использует разрешение android:name=»android.permission. ACCESS_COARSE_LOCATION»/> <использует разрешение android:name=»android.permission. ACCESS_FINE_LOCATION «/> сделайте это в манифесте и запишите обратный код в файл Java, и все готово.

Ответ №3:

ACCESS_FINE_LOCATION включает ACCESS_COARSE_LOCATION. Однако есть одна загвоздка:

ACCESS_COARSE_LOCATION предоставляет вам последнее известное местоположение, которое работает от батареиhttps://developer.android.com/training/location/retrieve-current.html#setup

Однако, если вам нужно что-то вроде местоположения в реальном времени, например Pokemon Go, используйте ACCESS_FINE_LOCATION, это дает вам местоположение в реальном времени.

Ответ №4:

Еще одна вещь, которую вы должны иметь в виду, которая ACCESS_FINE_LOCATION дает вам лучшее и точное местоположение и ACCESS_COARSE_LOCATION дает вам менее точное местоположение.