Проверьте, есть ли у Android-устройства определенная аппаратная кнопка в коде

Мне нужно проверить, есть ли у определенного Android-устройства аппаратная кнопка в коде. Например, только некоторые телефоны имеют кнопку поиска. Итак, как мне проверить, есть ли у устройства аппаратная кнопка (поиск, камера, d-pad и т. Д.) Или нет?

Вы можете использовать PackageManager.hasSystemFeature() .
Пример:

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

Вы также можете получить некоторые функции, которые не проверяются PackageManager через Configuration , например, DPAD.

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

Единственное исключение – кнопка поиска. Несколько дней назад здесь был вопрос, в основном, тот же вопрос. Я не помню ответа, и я не знаю способа обнаружить кнопку поиска, так как ее нет в списке функций. (Edit: Там вы идете, возможно, дублирующийся поток – тот, который я упомянул здесь)

Вот хороший чистый способ проверки наличия кнопки «Меню» оборудования:

 ViewConfiguration.get(context).hasPermanentMenuKey(); 

От: https://stackoverflow.com/a/9481965 См. Также: http://developer.android.com/reference/android/view/ViewConfiguration.html#hasPermanentMenuKey ()

Я знаю, что этот пост старше года, но с ним все еще появляется в поиске Google (на первой странице). Я полагал, что я бы опубликовал небольшое обновление или предложение с тем, что я использую в случае, если кто-то вроде меня ищет то же самое.

 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); } } 

Я поместил сторону onCreate () .. Это отлично работает на моем Thunderbolt (Rooted running MikMik GingerGrits)