#android #manifest #android-screen-support #hdpi #screen-density
#Android #манифест #android-поддержка экрана #hdpi #плотность экрана
Вопрос:
Я разрабатываю приложение для Android, которое предназначено только для устройств с высокой плотностью экрана. я хочу ограничить мое приложение на устройствах с плотностью экрана 1,5 или ниже. Я много искал об этой проблеме и выяснил, что мы можем справиться с этим с помощью разных тегов в манифесте, таких как
<supports-screens android:smallScreens="false"
android:normalScreens="false"
android:largeScreens="true"
android:xlargeScreens="true"/>
У меня есть два устройства, и оба относятся к категории normalScreens. Один из них имеет плотность, равную 1,5, а другой — 2,0. Мой вопрос заключается в том, как я могу ограничить свое приложение на устройствах на основе плотности экрана.
Использование <compatible-screens>
тега не должно быть решением этой проблемы, поскольку в документации Google говорится: «Любая комбинация размера и плотности, явно не заявленная в этом теге, будет ограничена в установке приложения».
Что делать, ребята, пожалуйста, помогите мне.
Ответ №1:
Любая комбинация размера и плотности, явно не указанная в этом теге, будет ограничена в установке приложения.
Похоже, <compatible-screens>
это то, что вы хотите. Вам придется перечислить все возможные комбинации экранов, которые вы поддерживаете. Это все, кроме ldpi
, mdpi
и hdpi
.
https://developer.android.com/guide/topics/manifest/compatible-screens-element
https://developer.android.com/guide/practices/screens-distribution#FilteringHandsetApps
Итак, это хорошее начало:
<compatible-screens>
<screen android:screenSize="small" android:screenDensity="xhdpi"/>
<screen android:screenSize="small" android:screenDensity="xxhdpi"/>
<screen android:screenSize="small" android:screenDensity="xxxhdpi"/>
<screen android:screenSize="normal" android:screenDensity="xhdpi"/>
<screen android:screenSize="normal" android:screenDensity="xxhdpi"/>
<screen android:screenSize="normal" android:screenDensity="xxxhdpi"/>
<screen android:screenSize="large" android:screenDensity="xhdpi"/>
<screen android:screenSize="large" android:screenDensity="xxhdpi"/>
<screen android:screenSize="large" android:screenDensity="xxxhdpi"/>
<screen android:screenSize="xlarge" android:screenDensity="xhdpi"/>
<screen android:screenSize="xlarge" android:screenDensity="xxhdpi"/>
<screen android:screenSize="xlarge" android:screenDensity="xxxhdpi"/>
</compatible-screens>
В документации перечислены другие поддерживаемые значения плотности экрана:
- 320 (xhdpi)
- 360
- 420
- 480 (xxhdpi)
- 560
- 640 (xxxhdpi)
Проблема в том, что если есть устройство с другим значением, которое вы не включаете в свой манифест, оно не увидит ваше приложение в магазине. Например, Sony Xperia Z5 Premium имеет плотность ~ 800 точек на дюйм, и вы не получите приложение, если не укажете плотность экрана 800
в своем манифесте.
<screen android:screenSize="normal" android:screenDensity="800"/>
Это только мое предположение.
Поэтому, прежде чем идти по этому пути, спросите себя, действительно ли вам это нужно. Если вместо этого было бы приемлемо информировать пользователя при первом запуске приложения о том, что визуальная точность может быть не такой высокой, как предполагалось, из-за нетипичной плотности отображения (или чего-то еще, я действительно не знаю ваш вариант использования). Позвольте пользователю решать.
Комментарии:
1. На самом деле я не хочу использовать этот тег, потому что Google заявляет в своей документации, что,
Normally, you should not use this manifest element. Using this element can dramatically reduce the potential user base for your application, by not allowing users to install your application if they have a device with a screen configuration that you have not listed
. Может быть, есть какой-то другой способ сделать это. Спасибо2. Позвольте мне сформулировать это так: блокировка всех устройств с определенной плотностью экрана, как правило, имеет побочный эффект «сокращения потенциальной пользовательской базы» ровно на количество пользователей, использующих устройства с такой плотностью заблокированного экрана. Ваш случай определенно попадает в эту ненормальную категорию. Другого способа нет, потому что обычно вы хотите, чтобы приложение запускалось на любом устройстве. Ваше приложение является особенным в этом отношении. Имеет смысл?
3. Если вы не хотите потерять пользователей, которые не смогут запускать ваше приложение из-за низкой плотности экранов, ваш единственный другой вариант — купить им всем новые телефоны.
4. Хотя совет верен, что вы должны указать все доступные значения для плотности экрана, иначе потенциальное устройство будет исключено, я пока не могу найти ни одного примера устройства, которое использует плотность экрана 800. Я только что проверил каталог устройств в Google Play Console, и Sony Xperia Z5 Premium по какой-то причине имеет плотность 480.