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

Как вы указываете в AndroidManifest.xml, что вы хотите запретить установку на устройствах размером менее 4,7-дюймового устройства?

У меня есть игра, которая лучше всего подходит на 7-дюймовых планшетах и ​​чувствует себя приемлемо на 10-дюймовых планшетах и ​​5-дюймовых Samsung Note-size устройствах. Это даже просто пассивное удовольствие от чего-то размера телефона Nexus 4 или S3. Совсем не весело играть на чем-то меньшем. В этом случае, как можно написать Манифест, чтобы он мог установить на что-либо от 4,7-дюймового устройства до 10-дюймового планшета, будучи ограниченным от меньших телефонов?

ИЗМЕНИТЬ

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

Возьмем, например, несколько разных устройств.

Droid 3

  • 4-дюймовый дисплей
  • 540x960 px
  • 275 ppi

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

  • В 4 дюйма он может быть на голом краю "большого", но, возможно, среднего
  • В 540x960 он находится в пределах минимума для "больших"
  • в 275 ppi он утверждает, что это экран hdpi.

Однако это устройство намного меньше, чем тот, который я бы хотел поддержать... но в документации это похоже на 2 из 3 подсчетов, у этого устройства есть экран "Большой" . Понятно, что определение термина - это 4-дюймовый экран "Большой" . Теперь отпустите еще...

Nexus 4

  • 4,7-дюймовый дисплей
  • 768x1280 px
  • 318 ppi

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

  • Физические размеры этого экрана находятся прямо на границе Medium и Large
  • Размеры пикселей указывают на то, что это может быть xlarge
  • ppi указывает, что это устройство xhdpi

Опять же, никакое здравомыслящее определение - это 4,7-дюймовый экран "xlarge"... Размер экрана, возможно, достаточно большой, чтобы сделать игру приятной, но разве это "средний" экран? "Большой" экран? Как вы можете знать?

Оба вышеупомянутых телефона будут "Medium"? Будет ли Droid "средним", а Nexus "Большой" ? Почему или почему нет? И если Nexus "Большой" , то как это отличается от 7-дюймового планшета, который также должен быть "Большой?"

И тогда есть тот факт, что документы требуют, чтобы поддержка-экраны/размер устарела, начиная с 3.2 в любом случае

Но тогда нет четких указаний относительно того, что использовать на своем месте, если вы хотите поддерживать как старые телефоны (при условии правильного физического размера экрана в дюймах), так и новые планшеты, или если в лесу они хорошо скрыты. Может ли кто-то четко изложить, что такое cretieria действительно имеет значение и почему данное устройство будет соответствовать данному фильтру или не сможет его выполнить?

4b9b3361

Ответ 1

К сожалению, нет способа отфильтровать устройства в соответствии с их размерами "ФИЗИЧЕСКИЕ", что вам нужно.

Есть две причины.

  • Существует только четыре типа размеров экрана: маленький, нормальный, большой и х-большой. Это слишком грубо. Вы хотите гораздо более высокую степень детализации: "отфильтруйте устройства, ЖК-дисплей которых составляет менее 4,7 дюйма", который не поддерживается на текущей платформе Android.
  • Размер экрана определяется логической плотностью, которая может быть установлена ​​на значение, значительно отличающееся от физической плотности. Для примера предположим, что устройство имеет 5-дюймовый экран с физической плотностью 180 точек на дюйм. Это, вероятно, экран, который вы хотите поддержать. Однако по какой-то причине производитель решил установить логическую плотность устройства как 320 dpi. Затем устройство классифицируется как небольшое экранное устройство независимо от его физической плотности.

Для справки позвольте мне показать вам внутреннюю логику, определяющую размер экрана по логической плотности и количеству пикселей экрана.

http://androidxref.com/4.0.4/xref/frameworks/base/services/java/com/android/server/wm/WindowManagerService.java#5899

Ответ 2

Я думаю, что на основе документов Google это будет отвечать вашим требованиям (5 "и меньше):

<compatible-screens>

    <screen android:screenSize="large" android:screenDensity="ldpi" />
    <screen android:screenSize="large" android:screenDensity="mdpi" />

    <screen android:screenSize="xlarge" android:screenDensity="ldpi" />
    <screen android:screenSize="xlarge" android:screenDensity="mdpi" />
    <screen android:screenSize="xlarge" android:screenDensity="hdpi" />
    <screen android:screenSize="xlarge" android:screenDensity="xhdpi" />

</compatible-screens>

Или используя это (4.7 "и меньше):

<supports-screens android:smallScreens="false"
                  android:normalScreens="true"
                  android:largeScreens="true"
                  android:xlargeScreens="true"
                  android:requiresSmallestWidthDp="536" />

Я рекомендую второй метод, потому что он более точен.

Как рассчитывается 536? На основе http://developer.android.com/guide/practices/screens_support.html у нас есть (высота x ширина):

  • xlarge экраны не менее 960dp x 720dp
  • большие экраны не менее 640dp x 480dp
  • обычные экраны не менее 470dp x 320dp
  • маленькие экраны не менее 426dp x 320dp

(720 - 480)/(7 - 4) = 80, 480 + (80 * 0,7) = 536

И не беспокойтесь о "устаревшем предупреждении", так как новый предложенный метод предназначен для приложений планшетов (IMO), которые пользовательский интерфейс не является полноэкранным, а некоторые места внизу и сверху экрана заняты для заголовка и/или назад, меню и т.д., когда ваша игра, вероятно, работает в полноэкранном режиме.

Проверьте это из документов Google на http://developer.android.com/guide/practices/screens_support.html#DeclaringTabletLayouts:

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

Ответ 4

В этом случае, как можно написать манифест, чтобы он мог установить что-либо с 4,7-дюймового устройства на 10-дюймовый планшет, будучи ограниченным от меньших телефонов?

С технической точки зрения, вы не можете.

android:requiresSmallestWidthDp приближается к вашей желаемой цели. Поскольку это измеряется в независимых от плотности пикселях, и поскольку размер, не зависящий от плотности пикселей, должен составлять 1/160-дюймовый дюйм, вы можете придумать значение dp для любого количества дюймов, умножив на 160.

Однако это не относится к диагонали, согласно вашему запросу. Это относится к ширине самой короткой стороны (например, ширина в портрете, высота в ландшафте).

Итак, если вы можете переделать свое желание с наименьшей шириной, используйте android:requiresSmallestWidthDp и молитесь, чтобы документация была просто испорчена, когда она ссылается на то, соответствует ли Google Play. Вы сможете определить, что при загрузке приложения в консоль разработчика Play Store и узнайте, какие устройства его поддерживают - найдите какое-то устройство, которое, как вы знаете, слишком мало (но в противном случае должно запускать ваше приложение) и проверьте, не фильтруется ли оно.

Если документация для android:requiresSmallestWidthDp верна, и Play Store игнорирует ее для целей фильтрации (grrrrr...), тогда вы в значительной степени завинчены. Следующим ближайшим решением было бы использовать <compatible-screens> для другого ответа, утверждая, что вы поддерживаете только размеры экрана large и xlarge. Это будет выбивать различные устройства, которые находятся на нижнем конце диапазона, который вы хотите поддержать, но размер экрана normal становится намного меньше (до 3 "по диагонали), чем вы хотите.

BTW, normal диагональ 3 "-5", поэтому Droid 3 normal, а не large. Размеры пикселей не имеют абсолютно никакого отношения к размеру экрана.

Ответ 5

Похоже, что нет правильного способа сделать это в реальном приложении. И я согласен с вами в том, насколько ужасно запутанным и противоречивым является руководство для разработчиков Android. По моему опыту, хорошая работа для такого рода вещей - просто изменить, какие устройства могут запускать ваше приложение, когда вы отправляетесь публиковать его в консоли разработчика. Я сделал быстрый взгляд, хотя, и нашел аналогичный вопрос здесь:

Отфильтровать размер экрана устройства в Android Market

Кажется, это лучший способ сделать это. Удачи!