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

Uses-Permission vs Uses-Feature

Я видел много конкретных случаев, когда люди спрашивали, а люди объясняли разницу между ними, но я не могу и, похоже, не понимаю общую разницу. Являются ли эти два синонима? Означает ли это другое?

4b9b3361

Ответ 1

Являются ли эти два синонима?

Нет. <uses-permission> говорит: "Эй, Android (и связанные каналы распространения), пожалуйста, попросите пользователя разрешить мне делать X". <uses-feature> говорит: "Эй, Android (и связанные каналы распространения), меня интересует работа на аппаратном обеспечении с функцией Y".

<uses-feature> может отфильтровать вас из Play Store (и других каналов), если оборудование не соответствует вашим требованиям, но пользователь не участвует.

Означает ли это другое?

Иногда. Если вы запрашиваете определенные разрешения, например CAMERA, Android предполагает по умолчанию, что вам нужно соответствующее оборудование. Вы можете использовать <uses-feature> и android:required="false" для переопределения этого поведения по умолчанию, если это необходимо.

Ответ 2

Рекомендуется использовать <uses-feature> вместе с <uses-permission>. Для каждой функции вашего приложения требуется <uses-feature> с атрибутом android:required="false" , если ваше приложение может работать без него. Причиной этого является то, что Google Play отфильтровывает приложения, функции которых реализованы программно, но не поддерживаются аппаратными средствами, и в результате вы их не видите.

Например, среди других разрешений ваше приложение имеет разрешение <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>. Если есть устройство, у которого нет возможности GPS, это устройство не увидит это приложение в Google Play. Если ваше приложение полностью работоспособно без подключения GPS, тогда решение должно добавить:

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

Таким образом, как уже упоминалось @CommonsWare, <uses-feature> переопределяет поведение по умолчанию <uses-permission>