Проверьте, есть ли в устройстве Android определенная аппаратная кнопка в коде - PullRequest
4 голосов
/ 05 сентября 2011

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

Ответы [ 3 ]

8 голосов
/ 05 сентября 2011

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

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

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

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

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

4 голосов
/ 13 марта 2012

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

ViewConfiguration.get(context).hasPermanentMenuKey();

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

2 голосов
/ 12 июля 2013

Я знаю, что этому посту больше года, но он все еще отображается в поиске 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 работает MikMik GingerGrits)

...