Cómo comprobar el dispositivo es Tablet, Mobile o Android TV en android

Estoy haciendo una aplicación que se comportará de manera diferente en diferentes dispositivos. ¿Hay alguna manera de comprobar que mi aplicación se está ejecutando en TV Device, Mobile o Tablet? Incluso quiero comprobar que estoy ejecutando mi aplicación en Emulator. En algunos enlaces que he visto podemos comprobar el número de construcción o cosas como estas. Sólo quiero asegurarse de que es lo principal que puede hacernos saber que los dispositivos son diferentes?

Por definición, una tableta es de 7 "o mayor. Aquí hay un método para comprobarlo:

/** * Checks if the device is a tablet (7" or greater). */ private boolean checkIsTablet() { Display display = ((Activity) this.mContext).getWindowManager().getDefaultDisplay(); DisplayMetrics metrics = new DisplayMetrics(); display.getMetrics(metrics); float widthInches = metrics.widthPixels / metrics.xdpi; float heightInches = metrics.heightPixels / metrics.ydpi; double diagonalInches = Math.sqrt(Math.pow(widthInches, 2) + Math.pow(heightInches, 2)); return diagonalInches >= 7.0; } 

Y aquí es cómo comprobar si el dispositivo es Android TV:

 /** * Checks if the device is Android TV. */ @TargetApi(Build.VERSION_CODES.HONEYCOMB_MR2) private boolean checkIsTelevision() { int uiMode = mContext.getResources().getConfiguration().uiMode; return (uiMode & Configuration.UI_MODE_TYPE_MASK) == Configuration.UI_MODE_TYPE_TELEVISION; } 

Editar : Según lo señalado por el usuario de Redshirt a continuación, el fragmento de código anterior solo detectará si la aplicación se está ejecutando en MODE_TYPE_TELEVISION. Así que para detectar específicamente Android TV, puede utilizar este control booleano: context.getPackageManager().hasSystemFeature("com.google.android.tv")

televisión

Primero verifique si el dispositivo es un televisor o no. Aquí está cómo la documentación recomienda hacerlo:

 public static final String TAG = "DeviceTypeRuntimeCheck"; UiModeManager uiModeManager = (UiModeManager) getSystemService(UI_MODE_SERVICE); if (uiModeManager.getCurrentModeType() == Configuration.UI_MODE_TYPE_TELEVISION) { Log.d(TAG, "Running on a TV Device") } else { Log.d(TAG, "Running on a non-TV Device") } 

Más lectura

  • Creación de aplicaciones de TV
  • Creación de diseños para TV
  • Diseño para Android TV

Notas

  • Como desalentado en la documentación , no utilice exactamente los mismos diseños para TV como para teléfonos y tabletas.

Teléfono y tableta

Haga que los archivos de recursos diferentes para utilizar con los distintos tamaños de dispositivo.

  • Teléfono: puede ser el predeterminado.

  • Tableta – Utilice sw600dp o large para determinar esto.

Consulte esta respuesta para obtener más información al respecto.

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