¿Cómo se especifica en AndroidManifest.xml que desea prohibir la instalación en dispositivos más pequeños que un dispositivo de 4,7 pulgadas?

Tengo un juego que se siente mejor en tabletas de 7 pulgadas, y se siente aceptablemente agradable en tabletas de 10 pulgadas y dispositivos Samsung de 5 pulgadas de tamaño Note. Incluso es pasablemente divertido en algo del tamaño de un teléfono Nexus 4 o un S3. No es nada divertido jugar con algo más pequeño. Siendo así, ¿cómo se puede escribir un manifiesto de manera que pueda instalarse desde cualquier dispositivo de 4,7 pulgadas a una tableta de 10 pulgadas mientras se restringe a teléfonos más pequeños?

EDITAR

Retrocediendo por un momento, la razón de esta pregunta es porque creo que la documentación en el sitio web de desarrolladores de Android es increíblemente confusa y conflictiva. Vamos a dar algunos ejemplos para mostrar de dónde viene la confusión:

Tomemos por ejemplo un par de dispositivos diferentes.

Droid 3

  • Pantalla de 4 pulgadas
  • 540×960 px
  • 275 ppi

Mirando la documentación de soportes-pantallas, podemos inferir que …

  • A 4 pulgadas puede estar en el borde desnudo de "grande" pero probablemente medio
  • En 540×960 está bien dentro del mínimo para "grandes"
  • A 275 ppi que pretende ser una pantalla hdpi

Sin embargo, este dispositivo es mucho más pequeño que uno que me gustaría apoyar … pero la documentación hace que parezca en 2 de 3 cuentas, este dispositivo tiene una pantalla "grande". Por no sana definición del término es una pantalla de 4 pulgadas "grande". Ahora, vamos más lejos …

Nexus 4

  • Pantalla de 4.7 pulgadas
  • 768×1280 px
  • 318 ppi

Mirando la documentación de soportes-pantallas, podemos inferir que …

  • Las dimensiones físicas de esta pantalla están justo en el borde de Medio y Grande
  • Las dimensiones de píxeles indican que podría ser xlarge
  • El ppi indica que es un dispositivo xhdpi

Una vez más, ninguna definición sana es una pantalla de 4,7 pulgadas "xlarge" … El tamaño de la pantalla es posiblemente lo suficientemente grande para hacer el juego agradable, pero ¿es una pantalla "media"? ¿Una pantalla "grande"? ¿Como podrias saberlo?

¿Serían ambos de los teléfonos anteriores "Medio"? ¿El Droid sería "Medium" mientras que el Nexus "Large"? ¿Por qué o por qué no? Y si el Nexus es "grande" entonces cómo es que distinto de una tableta de 7 pulgadas, que también debe ser "grande"?

Y luego está el hecho de que los docs afirman que los soportes-pantallas / tamaño es obsoleto a partir de 3.2 de todos modos

Pero entonces no hay una guía clara sobre qué usar en su lugar si uno quiere apoyar tanto los teléfonos antiguos (asumiendo el tamaño físico adecuado de la pantalla en pulgadas) y las nuevas tabletas, o si hay es escondido bien en el bosque. ¿Puede alguien establecer claramente lo que cretieria realmente importa y por qué un dispositivo dado se ajustará a un determinado filtro o no?

5 Solutions collect form web for “¿Cómo se especifica en AndroidManifest.xml que desea prohibir la instalación en dispositivos más pequeños que un dispositivo de 4,7 pulgadas?”

Desafortunadamente, NO hay manera de filtrar-hacia fuera los dispositivos según sus tamaños "FÍSICOS", que es lo que usted quiere.

Hay dos razones.

  1. Sólo hay cuatro tipos de tamaños de pantalla: pequeño, normal, grande y x-grande. Esto es demasiado grosero. Desea granularidad mucho mayor: 'filtrar los dispositivos que LCD es menos de 4,7 pulgadas', que no es compatible con la plataforma actual de Android.
  2. El tamaño de la pantalla se determina por la densidad lógica que se puede establecer en un valor muy diferente de la densidad física. Para exaple, supongamos que un dispositivo tiene una pantalla de 5 pulgadas con una densidad física de 180 ppi. Esta es probablemente la pantalla que desea soportar. Sin embargo, por alguna razón, el fabricante decide establecer la densidad lógica del dispositivo como 320 dpi. A continuación, el dispositivo se clasifica como dispositivo de pantalla pequeña independientemente de su densidad física.

Para su referencia, permítame mostrarle la lógica interna que determina el tamaño de la pantalla a partir de la densidad lógica y el número de píxeles de la pantalla.

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

Creo que basado en documentos de Google esto sirve a sus necesidades (5 "y más pequeño):

 <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> 

O usando esto (4.7 "y más pequeño):

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

Recomiendo el segundo método porque es más exacto.

¿Cómo se calcula 536? Basado en http://developer.android.com/guide/practices/screens_support.html tenemos (altura x ancho):

  • Xlarge pantallas son al menos 960dp x 720dp
  • Las pantallas grandes son al menos 640dp x 480dp
  • Las pantallas normales son al menos 470dp x 320dp
  • Las pantallas pequeñas son al menos 426dp x 320dp

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

Y no te preocupes por la "advertencia obsoleta", ya que el nuevo método sugerido es para aplicaciones de tableta (IMO) que la interfaz de usuario no es de pantalla completa y algunos espacios de abajo y arriba de la pantalla ocupada por Title-bar y / Etc botones, mientras que su juego probablemente se ejecuta en modo de pantalla completa.

Compruebe esto desde Documentos de Google en http://developer.android.com/guide/practices/screens_support.html#DeclaringTabletLayouts :

Nota: Los tamaños que especifica utilizando estos calificadores no son los tamaños de pantalla reales . Por el contrario, los tamaños son para el ancho o la altura en unidades dp que están disponibles para la ventana de su actividad . El sistema Android podría utilizar parte de la pantalla de la interfaz de usuario del sistema (como la barra del sistema en la parte inferior de la pantalla o la barra de estado en la parte superior), por lo que es posible que parte de la pantalla no esté disponible para su diseño. Por lo tanto, los tamaños que declara deben ser específicamente sobre los tamaños necesarios para su actividad, el sistema cuenta para cualquier espacio utilizado por la interfaz de usuario del sistema al declarar cuánto espacio proporciona para su diseño. También tenga cuidado de que la Barra de Acción se considere parte del espacio de ventana de su aplicación, aunque su diseño no lo declare, por lo que reduce el espacio disponible para su diseño y debe tener en cuenta en su diseño.

Echa un vistazo aquí: soportes-pantallas

Siendo así, ¿cómo se puede escribir un manifiesto de manera que pueda instalarse desde cualquier dispositivo de 4,7 pulgadas a una tableta de 10 pulgadas mientras se restringe a teléfonos más pequeños?

Técnicamente hablando, no puedes.

android:requiresSmallestWidthDp se aproxima más a su objetivo deseado. Puesto que esto se mide en píxeles independientes de la densidad, y dado que un píxel independiente de la densidad se supone que es 1 / 160th de una pulgada, usted puede venir para arriba con un valor de dp para cualquier número de pulgadas multiplicando por 160.

Sin embargo, esto no se refiere a una diagonal, según su solicitud. Esto se refiere al ancho del lado más corto (por ejemplo, ancho en el retrato, altura en el paisaje).

Por lo tanto, si usted puede reformular su deseo en términos de menor ancho, use android:requiresSmallestWidthDp , y rezar para que la documentación se deshaga cuando se refiere a si Google Play la honra. Podrás determinar que cuando subas la aplicación a la Consola para desarrolladores de Play Store y veas qué dispositivos son compatibles con ella, busca algún dispositivo que sepas que es demasiado pequeño (pero de lo contrario debería ejecutar tu aplicación) y ver si está filtrado.

Si la documentación para android:requiresSmallestWidthDp es correcta, y Play Store la está ignorando para propósitos de filtrado (grrrrr …), entonces usted está en gran parte atornillado. La siguiente solución más cercana sería utilizar <compatible-screens> por la otra respuesta, alegando que solo soporta tamaños de pantalla large y xlarge . Eso eliminará varios dispositivos que están en el extremo inferior de la gama que le gustaría apoyar, pero normal tamaño de pantalla normal hace mucho más pequeño (hasta 3 "de diagonal) que lo que desea.

BTW, normal es de 3 "-5" de diagonal, por lo que el Droid 3 es normal , no es large . Las dimensiones de píxeles no tienen absolutamente nada que ver con el tamaño de la pantalla.

Parece que no hay una manera adecuada de hacerlo en la aplicación real. Y estoy de acuerdo con usted acerca de cómo horriblemente confuso y contradictorio el guía de dev Android es. En mi experiencia, sin embargo, un buen trabajo en torno a ese tipo de cosas es simplemente cambiar qué dispositivos pueden ejecutar su aplicación cuando vaya a publicarlo en la consola de desarrollo. Hice un rápido vistazo, sin embargo, y encontré una pregunta similar aquí:

Filtrar el tamaño de la pantalla del dispositivo en el Android Market

Parece ser la mejor manera de hacerlo. ¡Buena suerte!

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.