ゲームコントローラー入力
Amazon Fire TVゲームコントローラー(日本では現在お取り扱いできません)や、Bluetooth HIDゲームパッドプロファイルに準拠したコントローラー全般には、各種ボタン、Androidモーション、キーイベント定数が備わっています。この情報を使用して、アプリで入力イベントをキャプチャします。
サポート対象コントローラーのボタン動作に関するガイドラインについては、コントローラー動作のガイドラインを参照してください。Fire TVリモコンの入力を処理する方法について詳しくは、Amazon Fire TVリモコン入力を参照してください。
ボタン
最新のFire TVゲームコントローラーのボタンは次のとおりです。
旧バージョンのゲームコントローラーのボタンは次のとおりです。
入力のキャプチャ
Amazon Fire TVで使用されるゲームコントローラーでは、デジタルボタン(Aボタンなど)を押すとAndroid KeyEvent
イベントが生成され、アナログコントロール(ジョイスティックなど)を動かすとMotionEvent
イベントが生成されます。
単純なボタン入力は、標準のAndroidイベントリスナーインターフェイスとコールバック(onClick()
、onFocusChange()
など)を使用して処理できます。
View
で特定のボタン押下イベントをキャプチャするには、onKeyDown()
などの入力イベントハンドラーをオーバーライドします。
特定のキーをキャプチャするには、KeyEvent
クラスの入力定数に一致するかどうかをテストします。たとえば、Aボタンが押されたことをキャプチャするには、次のコードを使用します。
@Override
public boolean onKeyDown(int keyCode, KeyEvent event){
boolean handled = false;
switch (keyCode){
case KeyEvent.KEYCODE_BUTTON_A:
// ... 選択処理
handled = true;
break;
}
return handled || super.onKeyDown(keyCode, event);
}
モーションイベントをキャプチャするには、View
でonGenericMotionEvent()
イベントをオーバーライドします。モーションイベントを生成したコントロールを特定するにはMotionEvent
クラスの入力定数を使用し、モーションイベントの値を特定するにはMotionEvent
クラスのgetAxisValue()
などのイベントを使用します。
@Override
public boolean onGenericMotionEvent(MotionEvent event){
// 左のジョイスティックから値の変更を取得します
float deltaX = event.getAxisValue(MotionEvent.AXIS_X);
float deltaY = event.getAxisValue(MotionEvent.AXIS_Y);
if (deltaX > 0.5 && deltaY > 0.5) {
// 何かを実行します
handled = true;
}
return handled || super.onGenericMotionEvent(event);
}
プライマリおよびセカンダリ入力イベント
Amazon Fire TVデバイスのゲームコントローラー操作では、1つの操作に対して複数の入力イベントが生成されることもあります。たとえば、Amazon Fire TVゲームコントローラー(日本未対応)のD-Pad(十字キー)は、モーションイベントを生成するアナログの方向コントロールですが、Fire TVリモコンのD-Pad(ナビゲーション)は、キーイベントを生成するデジタルコントロールです。
同様に、選択操作は、ゲームコントローラーではAボタンですが、Fire TVリモコンではD-Padの選択ボタンです。Amazon Fire TVの一部のゲームコントローラー操作では、最初にプライマリ入力イベント(通常はモーションイベント)が生成されます。これらのイベントがアプリで処理されなければ、セカンダリ入力イベント(通常はキーイベント)が生成されます。プライマリとセカンダリの入力イベントについては、下記の入力イベントリファレンスの表をご覧ください。
セカンダリ入力イベントを利用すると、ゲームコントローラー入力の処理プロセスを簡略化できます。ゲームコントローラーからのボタンイベントおよびD-Padイベントだけをアプリで処理する場合、セカンダリイベントを使用することで、モーションイベントをすべて無視し、キーイベントだけを対象にすることができます。
同様に、AボタンはKEYCODE_BUTTON_A
とKEYCODE_DPAD_CENTER
の両方を生成するので、アプリがFire TVリモコンのD-Padの選択ボタンに対応している場合、Aボタンのテストは必要ありません。
プライマリ入力イベントを適切に処理しないと、アプリが入力を二重に受信しているように動作する可能性があることに注意してください。イベントがキャプチャされて処理されると、入力イベントハンドラーはtrue
を返します。プライマリ入力イベントがキャプチャされた場合、セカンダリ入力イベントは生成されません。
入力イベントリファレンス
各ゲームコントローラーボタンのモーションイベント定数とキーイベント定数、ユーザー側での推奨動作、Amazon Fire TVユーザーインターフェイスにおける各ボタンのデフォルトの動作を次の表に示します。
デジタルボタンはキーイベント(KeyEvent
)を、アナログコントロールはモーションイベント(MotionEvent
)を通知します。コントローラー入力に対するアプリの推奨動作については、コントローラー動作のガイドラインを参照してください。
MotionEvent
列またはKeyEvent
列に示されているプライマリイベントをアプリが処理しない場合、これらのイベントに加えてセカンダリイベント列のイベントも生成されます。これらのセカンダリイベントについては、上記のプライマリとセカンダリの入力イベントを参照してください。
この表で、ゲームとは、Amazonアプリストアのゲームカテゴリーに申請され、Amazonアプリストアからデバイスにインストールされたアプリのことです。
ゲームコントローラーボタン | MotionEvent | KeyEvent | セカンダリイベント | デフォルトの動作 |
---|---|---|---|---|
ホーム | なし | なし | なし | ゲームでは「ゲームが一時停止されました」というダイアログを表示します。それ以外のアプリの場合、ホーム画面に戻ります。 |
戻る | なし | KEYCODE_BACK |
なし | 前の操作または画面(アクティビティ)に戻ります。 |
メニュー | なし | KEYCODE_MENU |
なし | Androidコンテキストメニュー(OptionsMenu)が起動されます。 |
A | なし | KEYCODE_BUTTON_A |
KEYCODE_DPAD_CENTER |
現在フォーカスがあるアイテムが選択されます。 |
B | なし | KEYCODE_BUTTON_B |
KEYCODE_BACK |
前の画面(アクティビティ)に戻ります(戻ると同じ)。 |
X | なし | KEYCODE_BUTTON_X |
なし | 何も起こりません。 |
Y | なし | KEYCODE_BUTTON_Y |
なし | 何も起こりません。 |
左(D-Pad)右(D-Pad) | AXIS_HAT_X (正の値は右方向を表します) |
なし | KEYCODE_DPAD_LEFT KEYCODE_DPAD_RIGHT |
ユーザーインターフェイスでフォーカスが左方向または右方向に移動します。 |
上(D-Pad)下(D-Pad) | AXIS_HAT_Y (正の値は下方向を表します) |
なし | KEYCODE_DPAD_UP KEYCODE_DPAD_DOWN |
ユーザーインターフェイスでフォーカスが上方向または下方向に移動します。 |
左側のジョイスティック(左/右) | AXIS_X (正の値は右方向を表します) |
なし | KEYCODE_DPAD_LEFT KEYCODE_DPAD_RIGHT (移動が0.5を超える場合) |
ユーザーインターフェイスのフォーカスが特定の方向に移動します。 |
左側のジョイスティック(上/下) | AXIS_Y (正の値は下方向を表します) |
なし | KEYCODE_DPAD_UP KEYCODE_DPAD_DOWN (移動が0.5を超える場合) |
ユーザーインターフェイスのフォーカスが特定の方向に移動します。 |
左側のジョイスティックの押し下げ | なし | KEYCODE_BUTTON_THUMBL |
なし | 再生/一時停止 |
右側のジョイスティック(左/右) | AXIS_Z (正の値は右方向を表します) |
なし | なし | 何も起こりません。 |
右側のジョイスティック(上/下) | AXIS_RZ (正の値は下方向を表します) |
なし | なし | 何も起こりません。 |
右側のジョイスティックの押し下げ | なし | KEYCODE_BUTTON_THUMBR |
なし | 再生/一時停止 |
再生/一時停止(第1世代のFireゲームコントローラーのみ) | なし | KEYCODE_MEDIA_PLAY_PAUSE |
なし | 再生/一時停止 |
早戻し(第1世代のFireゲームコントローラーのみ) | なし | KEYCODE_MEDIA_REWIND |
なし | 早戻し |
早送り(第1世代のFireゲームコントローラーのみ) | なし | KEYCODE_MEDIA_FAST_FORWARD |
なし | 早送り |
左側のトリガー(L2) | AXIS_BRAKE |
なし | なし | 音量+ |
左側のショルダー(L1) | なし | KEYCODE_BUTTON_L1 |
なし | 早戻し |
右側のトリガー(R2) | AXIS_GAS |
なし | なし | 音量- |
右側のショルダー(R1) | なし | KEYCODE_BUTTON_R1 |
なし | 早送り |
Last updated: 2020年10月29日