Compruebe si un dispositivo Android tiene un determinado botón de hardware en el código

Necesito comprobar si un cierto dispositivo androide tiene un botón del hardware en código. Por ejemplo, sólo algunos teléfonos tienen el botón de búsqueda. Entonces, ¿cómo puedo comprobar si un dispositivo tiene un botón de hardware (búsqueda, cámara, d-pad, etc) o no?

3 Solutions collect form web for “Compruebe si un dispositivo Android tiene un determinado botón de hardware en el código”

Puede utilizar PackageManager.hasSystemFeature() .
Ejemplo:

 boolean hasCamera = getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA); 

También puede obtener algunas de las características que no son probables por PackageManager través de la Configuration , por ejemplo, la DPAD.

 Configuration c = getResources().getConfiguration(); if(c.navigation == Configuration.NAVIGATION_DPAD) hasDpad = true; 

La única excepción es el botón de búsqueda. Había una pregunta aquí hace unos días, preguntando básicamente lo mismo. No recuerdo ninguna respuesta y no sé una manera de detectar el botón de búsqueda, ya que no está en la lista de características. (Editar: Ahí tienes, posible hilo duplicado es el que he mencionado aquí)

Esta es una buena manera de comprobar si el botón "Menú" del hardware está presente:

 ViewConfiguration.get(context).hasPermanentMenuKey(); 

De: https://stackoverflow.com/a/9481965 Vea también: http://developer.android.com/reference/android/view/ViewConfiguration.html#hasPermanentMenuKey ()

Sé que este post es más de un año de edad, pero con él todavía aparece en las búsquedas de Google (en la primera página). Me imaginé, me gustaría publicar una ligera actualización o sugerencia con lo que estoy usando en caso de que alguien como yo está buscando lo mismo.

 public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN) { Toast.makeText(this,"VOL Down", Toast.LENGTH_LONG).show(); return true; } else if(keyCode == KeyEvent.KEYCODE_SEARCH){ Toast.makeText(this,"search", Toast.LENGTH_LONG).show(); return false; }else{ Toast.makeText(this,"Vol Up", Toast.LENGTH_LONG).show(); return true; //return super.onKeyDown(keyCode, event); } } 

He puesto fuera el lado de la onCreate () .. Esto funciona bien en mi Thunderbolt (enraizado corriendo MikMik GingerGrits)

  • Fondo transparente en ImageButton con efecto de ondulación?
  • Fragmento de Android y referencia de objeto nulo
  • Combinando varios sensores Android con clases de ayuda
  • Android M permiso de la prueba READ_PHONE_STATE (permisos peligrosos)
  • Simple Xml - orden de elementos no conservados?
  • Class Dimension para java en android
  • La aplicación de Amazon Marketplace rechazada por contener el archivo de configuración de Eclipse
  • Parse + Robolectric causando java.lang.VerifyError: Tipo incorrecto en pila de operandos
  • Obtener indicaciones para llegar con la API de Google Maps v2
  • ¿Por qué vamos a Android ya que tenemos J2ME y WML para crear aplicaciones móviles?
  • Android tapa teclado suave IME
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.