¿Cómo detectar el dispositivo es un teléfono Android o una tableta Android?

Tengo dos aplicaciones para tabletas Android y teléfonos Android. Para la aplicación de tableta configuro android:minSdkVersion="11" . Pero hoy en día los teléfonos Android como Galaxy S3 tienen la versión de Android 4.0.4 para que los usuarios de S3 puedan descargar mi aplicación de tableta desde Google Play Store. Quiero advertir a los usuarios de teléfonos que descarguen la aplicación del teléfono cuando instalen la aplicación de la tableta. A la inversa, los usuarios de tabletas descargan la aplicación de la tableta cuando ejecutan la aplicación del teléfono.

¿Hay alguna manera fácil de detectar el tipo de dispositivo?

Editar:

Encontré una solución en este enlace .

En su archivo de manifiesto, puede declarar la función de pantalla para el teléfono y las tabletas, luego Google Play decide los permisos de descarga para el teléfono y la tableta.

Utilizar esta:

 public static boolean isTablet(Context context) { return (context.getResources().getConfiguration().screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK) >= Configuration.SCREENLAYOUT_SIZE_LARGE; } 

que devolverá verdadero si el dispositivo está funcionando en una pantalla grande.

Algunos otros métodos útiles se pueden encontrar aquí .

también puedes probar esto
Agregue un parámetro booleano en el archivo de recursos.
en el archivo res / values ​​/ dimen.xml agregue esta línea

 false 

mientras que en el archivo res / values-sw600dp / dimen.xml agregue esta línea:

 true 

luego en tu archivo java obtén este valor:

 if(getResources().getBoolean(R.bool.isTab)) { System.out.println("tablet"); } else { System.out.println("mobile"); } 

Este fragmento de código indicará si el tipo de dispositivo es de 7 “pulgadas o más y Mdpi o una resolución más alta. Puede cambiar la implementación según su necesidad.

  private static boolean isTabletDevice(Context activityContext) { boolean device_large = ((activityContext.getResources().getConfiguration().screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK) == Configuration.SCREENLAYOUT_SIZE_LARGE); if (device_large) { DisplayMetrics metrics = new DisplayMetrics(); Activity activity = (Activity) activityContext; activity.getWindowManager().getDefaultDisplay().getMetrics(metrics); if (metrics.densityDpi == DisplayMetrics.DENSITY_DEFAULT || metrics.densityDpi == DisplayMetrics.DENSITY_HIGH || metrics.densityDpi == DisplayMetrics.DENSITY_MEDIUM || metrics.densityDpi == DisplayMetrics.DENSITY_TV || metrics.densityDpi == DisplayMetrics.DENSITY_XHIGH) { AppInstance.getLogger().logD("DeviceHelper","IsTabletDevice-True"); return true; } } AppInstance.getLogger().logD("DeviceHelper","IsTabletDevice-False"); return false; } 

Use las capacidades de la tienda de Google Play y solo permita descargar la aplicación de su tableta en las tabletas y la aplicación del teléfono en los teléfonos.

Si el usuario luego instala la aplicación incorrecta, entonces deben haberla instalado usando otro método.

Tuvimos un problema similar con nuestra aplicación que debería cambiar según el tipo de dispositivo: ficha / teléfono. IOS nos dio el tipo de dispositivo perfectamente pero la misma idea no funcionaba con Android. el método de resolución / DPI falló con pequeñas res tabs, teléfonos de alta resolución. después de una gran cantidad de pelos rotos y golpeando la cabeza contra la pared, intentamos una idea extraña y funcionó excepcionalmente bien que no dependerá de las resoluciones. esto debería ayudarte también.

en la clase principal, escriba esto y debe obtener el tipo de dispositivo como nulo para TAB y móvil para teléfono.

 String ua=new WebView(this).getSettings().getUserAgentString(); if(ua.contains("Mobile")){ //Your code for Mobile }else{ //Your code for TAB } 

Use el siguiente código para identificar el tipo de dispositivo.

 private boolean isTabletDevice() { if (android.os.Build.VERSION.SDK_INT >= 11) { // honeycomb // test screen size, use reflection because isLayoutSizeAtLeast is only available since 11 Configuration con = getResources().getConfiguration(); try { Method mIsLayoutSizeAtLeast = con.getClass().getMethod("isLayoutSizeAtLeast"); Boolean r = (Boolean) mIsLayoutSizeAtLeast.invoke(con, 0x00000004); // Configuration.SCREENLAYOUT_SIZE_XLARGE return r; } catch (Exception x) { return false; } } return false; } 

Creo que esto debería detectar si algo puede hacer una llamada telefónica, todo lo demás sería una tableta / TV sin capacidades de teléfono.

Por lo que he visto, esto es lo único que no depende de la captura de pantalla.

 public static boolean isTelephone(){ //pseudocode, don't have the copy and paste here right know and can't remember every line return new Intent(ACTION_DIAL).resolveActivity() != null; }