web-dev-qa-db-ja.com

Android:デバイスにハードウェアメニューボタンがあるかどうかをプログラムで検出する

私は現在、この問題に苦労しています。アプリがインストールされているデバイスにハードウェアメニューキーがあるかどうかを確認する必要があります。 Galaxy Nexusなどの一部のデバイスには存在しないため、この場合はUIに直接表示しています。

PackageManager.hasSystemFeature()を既に見てきましたが、そこには何の有用性も見つかりませんでした。

すでにこれを行っている人はいますか?

42
NiThDi
_ViewConfiguration.get(context).hasPermanentMenuKey()
_

詳細については、 ViewConfiguration#hasPermanentMenuKey() を参照してください。これは、APIレベル14+(Android 4.0アイスクリームサンドイッチ以降)でのみ利用可能です。

92
fhucho
if(Build.VERSION.SDK_INT <= 10 || (Build.VERSION.SDK_INT >= 14 &&    
                              ViewConfiguration.get(this).hasPermanentMenuKey()))
{
   // menu key is present
}
else
{
  //No menu key
}
23
TheMan

Honeycomb以降を実行しているデバイスでも、システムはAndroidの2。xバージョン用に作成されたアプリに「メニューボタン」を提供します。それだけが「オーバーフローメニュー」と呼ばれます。そのため、そのようなボタンがあるかどうかをチェックする意味はありません。必要な場合はそこにあります。

一般的なガイドラインとして、システム/ APIのバージョン番号ではなく、特定の機能を確認する必要があります。利用可能な場合はActionBarクラスを使用し、それ以外の場合は2。xオプションメニューにフォールバックします。

Googleのアクションバーチュートリアル を見ましたか?これにより、何をすべきかが明確になります。

3

考えられるより良い解決策は、独自のアクションバーを追加することだと思います。したがって、すべてのデバイスがそれを見ることができ、ハードウェア構成やAPIバージョンを確認する必要はありません。

1
kinghomer

keysoft修飾子は、ナビゲーションバーではなくハードウェアキーボードを検出するために使用されます。

この記事はそれを解決します:

ナビゲーションバーを確認

1
Darren B