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

Многие функции в Android требуют, чтобы в манифесте было задано разрешение на использование. Эти значения затем определяют, какие устройства будут видеть их в Маркете. Тем не менее, что следует сделать, если эта функция является необязательной... если она может быть запущена на многих устройствах, но потребуется разрешение только на нескольких устройствах?

Пример: скажем, приложение с несколькими функциями и большим количеством контента - и оно предоставляет кнопку для звонка в компанию. Это хорошая удобная функция, в отличие от записи номера или копирования и вставки его в приложение телефона. Это не важно, однако.

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

Каково общее решение этой проблемы?

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

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

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

Да, я в курсе, возможно ли иметь "необязательные" разрешения в Android? это похожий вопрос. Я надеюсь на более свежую информацию и на другие обходные пути, которые люди нашли, если таковые имеются... каково решение этой проблемы? У кого-нибудь есть другие подходы, кроме тех, которые я перечислил выше?

1 ответ

Решение

Каково общее решение этой проблемы?

Для этой конкретной проблемы добавьте <uses-feature android:name="android.hardware.telephony" android:required="false"/> в вашем манифесте, чтобы указать, что эта функция не является обязательной. Вы можете использовать PackageManager а также hasSystemFeature() определить, имеет ли устройство ненужную функцию во время выполнения.

Другие вопросы по тегам