Подтвердить что ты не робот

Когда мне нужно android.hardware.location.gps и android.hardware.location.network?

Google сообщает по электронной почте об изменениях в разрешениях на местоположение Android:

Внесены изменения 15 октября 2016 года, которые повлияют на приложения таргетинг на API версии 21 (Android 5.0, Lollipop) или выше, которые используют ACCESS_FINE_LOCATION, но явно не имеют Используется функция "android.hardware.location.gps" . Двигаясь вперед, эти приложения будут доступны для установки на устройствах, у которых нет GPS аппаратное обеспечение. В большинстве случаев это не будет проблемой, поскольку Wi-Fi и Cell-ID основанное на местоположении обеспечивает достаточно высокую точность для типичной операции из этих приложений. Тем не менее, любые приложения, для которых требуется оборудование GPS, например GPS-навигаторы, должны явно добавить "android.hardware.location.gps" использует функцию для своего манифеста.

Если ваше приложение требует, чтобы GPS функционировал правильно, и вы не включаете в декларации манифеста ваши пользователи могут иметь плохое приложение опыт.

Кроме того, если вы используете провайдера плавного доступа и хотите получить наиболее точные выборки местоположения из GPS (т.е. с PRIORITY_HIGH_ACCURACY), вы должны включить "android.hardware.location.gps" в манифесте приложений убедитесь, что Google Play только распространяет ваше приложение на устройства с GPS датчики.

Подробнее об этом изменении можно узнать в Справка разработчиков Android Центр.

В Справочном центре Android разработчиков

Чтобы получать обновления местоположения от NETWORK_PROVIDER или GPS_PROVIDER, вы должны запросить разрешение пользователя, объявив соответственно разрешение ACCESS_COARSE_LOCATION или ACCESS_FINE_LOCATION в файле манифеста Android. Без этих разрешений приложение будет терпеть неудачу во время выполнения при запросе обновлений местоположения.

Если вы используете как NETWORK_PROVIDER, так и GPS_PROVIDER, вам необходимо запросить только разрешение ACCESS_FINE_LOCATION, поскольку оно включает разрешение для обоих поставщиков. Разрешение для ACCESS_COARSE_LOCATION позволяет получить доступ только к NETWORK_PROVIDER.

Внимание. Если ваше приложение предназначено для Android 5.0 (уровень API 21) или выше, вы должны заявить, что ваше приложение использует аппаратную функцию android.hardware.location.network или android.hardware.location.gps в файле манифеста, в зависимости от о том, получает ли ваше приложение обновления местоположения от NETWORK_PROVIDER или от GPS_PROVIDER. Если ваше приложение получает информацию о местоположении от любого из этих источников провайдера, вам необходимо объявить, что приложение использует эти аппаратные функции в вашем манифесте приложения. На устройствах, работающих с версиями до Android 5.0 (API 21), запрос разрешения ACCESS_FINE_LOCATION или ACCESS_COARSE_LOCATION включает подразумеваемый запрос на аппаратные функции местоположения. Однако при запросе этих разрешений автоматически не запрашиваются аппаратные функции местоположения на Android 5.0 (уровень API 21) и выше.

Я использую провайдера плавного доступа, ориентированного на API 21 и используя ACCESS_FINE_LOCATION. Я не забочусь о том, доступен ли GPS, только о том, что сообщается о самом точном месте.

  • Основываясь на первой цитате, я думаю, что мне не нужно вносить какие-либо изменения.
  • Основываясь на второй цитате, мне кажется, мне нужны как android.hardware.location.gps, так и android.hardware.location.network. Или это только для LocationManager, а не для слияния?

Нужно ли мне android.hardware.location.gps и android.hardware.location.network или нет?

4b9b3361

Ответ 1

Вторая цитата говорит вам, что вам нужно либо android.hardware.location.network, либо android.hardware.location.gps, если вам определенно нужен тот или иной провайдер.

Если вам нужны обновления через GPS, вам нужно android.hardware.location.gps. Если вам нужны обновления через WiFi и сотовые сети, вам нужно android.hardware.location.network.

Если вам нужны обновления из сети и GPS, вы должны включить оба элемента <uses-feature>.

Если вы также не укажете, ваше устройство может быть установлено на устройствах без этого провайдера. Например, он может быть установлен на устройстве без GPS, сотовой сети или чипа Wi-Fi.

Другими словами, для получения местоположения требуется либо функция определения местоположения сети, либо функция GPS. Если вы не заявляете, что ваше приложение нуждается в том или ином, вы можете вообще не получать обновления местоположения.

API 21 против 20 и ниже

Обратите внимание, что приведенное выше верно только для API 21 и выше. До API 21 запрос на запрос ACCESS_COARSE_LOCATION подразумевал функцию location.network, если запрос ACCESS_FINE_LOCATION подразумевал функцию location.gps (см. <uses-feature>).

Единственное изменение прямо сейчас в том, что для API 21+ любое приложение с запросом ACCESS_FINE_LOCATION скоро будет доступно для установки на устройства без GPS. Если ваше приложение ранее предполагало, что GPS был доступен (и нужен GPS), вам нужно убедиться, что у вас есть явный запрос для android.hardware.location.gps.

Google говорит, что поставщики сетевых местоположений теперь достаточно хороши для прекрасного местоположения, таким образом, изменения.

Ответ 2

TL; DR: Нет, вам не нужно добавлять uses-feature к вашему манифесту, но в зависимости от этого вы можете.

полный ответ:

uses-feature манифеста заключается только в том, что Google Play может отфильтровывать устройства, которые не содержат функции, необходимые для правильного выполнения приложения. (Примеры - GPS для пошагового навигационного приложения или Camera для приложения камеры).

Внимательно прочитайте эту цитату:

любые приложения, для которых требуется аппаратное обеспечение GPS, например навигаторы GPS, должны явно добавлять в свой манифест функцию использования android.hardware.location.gps.

(...)

и хотите получить наиболее точные образцы местоположения из GPS

Как вы заметили, вам все равно, что FusedLocationProvider дает вам лучшее место, доступное для устройства. Это означает, что даже если вы запрашиваете PRIORITY_HIGH_ACCURACY, ваше приложение может быть установлено на устройствах, которые не содержат GPS, и никогда не смогут получить точное местоположение, например GPS, или, может быть, даже (в очень редком нечетном случае), установленного на устройстве, которое не содержит провайдера местоположения.

изменить

Основываясь на второй цитате, мне кажется, что мне нужны как android.hardware.location.gps, так и android.hardware.location.network. Или это только для LocationManager, а не для плавного расположения?

Я просто перешел на docs https://developer.android.com/guide/topics/manifest/uses-feature-element.html#hw-features и нашел, что это очень интересно, есть 3 возможности:

  • android.hardware.location
  • android.hardware.location.gps
  • android.hardware.location.network

поэтому на основании этого, если ваше приложение не может работать без какой-либо формы, вы должны использовать первый android.hardware.location, иначе, если ваше приложение использует местоположение, но это не является существенным для его функциональности, вы можете быть свободным не включать что-нибудь

Ответ 3

Быстрое и простое решение:

Приложение нуждается в обновлении через использование GPS android.hardware.location.gps. Если вам нужны обновления через Wi-Fi и сотовые сети, вам нужна андроида .hardware.location.network.

Добавьте ниже строки в файл манифеста в соответствии с вашими данными о местоположении:

<uses-feature android:name="android.hardware.location" android:required="false" />
<uses-feature android:name="android.hardware.location.gps" android:required="false" />

Надеюсь, что это поможет.

Ответ 4

В соответствии с вами Вопросы

Основываясь на первой цитате, я думаю, что мне не нужно делать никаких изменения.

Вам не нужно делать какие-либо изменения, потому что вы используете FusedLocation, которые автоматически обнаруживают GPS и NetworkProvider в соответствии с доступностью и дают наилучшее местоположение оценки (вам нужно добавить ACCESS_FINE_LOCATION Точность). Так что даже если вы ориентируетесь выше API версии 21, вам не нужно ничего менять в своем приложении. FusedLocation Будет работать как раньше.

И по Второе предложение

Вам просто нужно игнорировать его, потому что вы используете FusedLocation API, и вы не используете API LocationManager, который вы заменили на FusedLocation. Так что второе предложение предназначено только для приложений, которые используют LocationManagar.

NETWORK_PROVIDER и GPS_PROVIDER является частью LocationManager Не FusedLocation API

Ответ 5

Да, вам нужны оба разрешения, если вы используете плавный провайдер.

ACCESS_COARSE_LOCATION - получать обновления местоположений от NETWORK_PROVIDER. Добавление разрешения android.hardware.location.network достаточно.

ACCESS_FINE_LOCATION - получать обновления местоположения от NETWORK_PROVIDER и GPS_PROVIDER. Вы должны добавить как разрешения android.hardware.location.gps, так и android.hardware.location.network. Применяется также для плавки.

Ответ 6

По моему мнению, достаточно прочитать документацию для use-feature element, чтобы понять, как приложения фильтруются в Google Play на основе на неявные и явные записи использования-функции:

Google Play фильтрует приложения, видимые пользователям, чтобы пользователи могли видеть и загружать только те приложения, которые совместимы с их устройствами. Одним из способов фильтрации приложений является совместимость с функциями.

Чтобы определить совместимость функций приложения с данным пользовательским устройством, Google Play сравнивает:

Функции, требуемые приложением - приложение объявляет функции в элементах своего манифеста с... Функции, доступные на устройстве, в аппаратном или программном обеспечении - устройство сообщает о функциях, которые оно поддерживает как свойства системы только для чтения.

...

Если функция явно объявлена ​​необходимой, Google Play добавляет эту функцию в список необходимых функций для приложения. Затем он фильтрует приложение от пользователей на устройствах, которые не предоставляют эту функцию.

Если функция явно объявлена ​​не требуемой, Google Play не добавляет эту функцию в список необходимых функций. По этой причине явно заявленная необязательная функция никогда не рассматривается при фильтрации приложения. Даже если устройство не предоставляет заявленную функцию, Google Play по-прежнему будет рассматривать приложение, совместимое с устройством, и покажет его пользователю, если не применяются другие правила фильтрации.


Неявные элементы uses-feature для разрешений на доступ:

ACCESS_COARSE_LOCATION

  • android.hardware.location
  • android.hardware.location.network (Только в том случае, если целевой уровень API равен 20 или ниже.)

ACCESS_FINE_LOCATION

  • android.hardware.location
  • android.hardware.location.gps (Только при уровне целевого API 20 или ниже.)

Изменение, описанное в сообщении электронной почты Google, заключается в том, что неявные uses-feature элементы для android.hardware.location.gps не будут присутствовать в API 21+ с помощью ACCESS_FINE_LOCATION. Аналогичная ситуация, по-видимому, справедлива для ACCESS_COARSE_LOCATION и android.hardware.location.network.

Google поощряет явное перечисление всех записей uses-feature, но все же предоставляет неявные записи на основе разрешений. Из следующего отрывка документации, я думаю, нет никакой разницы между пропуском uses-feature и объявлением, что это не требуется, если не существует неявной записи uses-feature.

Если функция явно объявлена ​​не требуемой, Google Play не добавляет эту функцию в список необходимых функций.


Ваш пример использования приложения определяет, что должны присутствовать записи uses-feature. Вот несколько примеров использования, при которых требуются все uses-feature записи, если не указано иное:

  • Приложение использует GPS явно из LocationManager, а приложение требует высокой точности GPS. Это пример, приведенный в электронной почте Google.

    • ACCESS_FINE_LOCATION
    • android.hardware.location (неявный)
    • android.hardware.location.gps (подразумевается до API 20)
  • Явное использование сетевого расположения

    • ACCESS_COARSE_LOCATION
    • android.hardware.location (неявный)
    • android.hardware.location.network (подразумевается до API 20)
  • Использует как GPS, так и сеть

    • ACCESS_FINE_LOCATION
    • android.hardware.location (неявный)
    • android.hardware.location.gps (подразумевается до API 20)
    • android.hardware.location.network
  • Использует хотя бы один из GPS и Network. Это мой случай FusedLocationProviderApi в исходном вопросе.

    • ACCESS_FINE_LOCATION/ACCESS_COARSE_LOCATION
    • android.hardware.location (неявный)
  • Использование местоположения, если доступно, по-прежнему позволяет установку приложения, если он недоступен

    • ACCESS_FINE_LOCATION
    • android.hardware.location required = false (переопределить неявный)
    • android.hardware.location.gps required = false (переопределить неявный до API 20)