ゲームコントローラー入力

Amazon Fire TVゲームコントローラー (Bluetooth HIDゲームパッドプロファイルに準拠したコントローラー全般) には、各種ボタン、Androidモーション、キーイベント定数があります。アプリ内で発生した入力イベントは、これらの情報を使用してキャプチャします。

サポートされるすべてのコントローラーにおけるボタンの動作に関するガイドラインについては、「コントローラー動作のガイドライン」を参照してください。Amazon Fire TVリモコンの入力を処理する方法の詳細については、「Amazon Fire TVリモコン入力」を参照してください。

ボタン

Amazon Fire TV (第 2 世代) ゲームコントローラーには次のボタンがあります。

Amazon Fire TV (第 1 世代) ゲームコントローラーには次のボタンがあります。

入力情報を取得する

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:
                // ... handle selections
                handled = true;
                break;
     }
     return handled || super.onKeyDown(keyCode, event);
}

モーションイベントをキャプチャするには、ViewonGenericMotionEvent() イベントをオーバーライドします。モーションイベントを生成したコントロールを特定するにはMotionEventクラスの入力定数を使用し、モーションイベントの値を特定するにはMotionEventクラスのgetAxisValue() などのイベントを使用します。

@Override
public boolean onGenericMotionEvent(MotionEvent event){
    // get changes in value from left joystick
    float deltaX = event.getAxisValue(MotionEvent.AXIS_X);
    float deltaY = event.getAxisValue(MotionEvent.AXIS_Y);

    if (deltaX > 0.5 && deltaY > 0.5) {
        // do something
        handled = true;
    }

    return handled || super.onGenericMotionEvent(event);
}

プライマリとセカンダリの入力イベント

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_AKEYCODE_DPAD_CENTERの両方を生成するので、アプリがFire TVリモコンのD-padの [選択] ボタンをサポートする場合、[A] ボタンもテストする必要はありません。

プライマリ入力イベントを適切に処理しないと、アプリが入力を二重に受信しているように動作する可能性があることに注意してください。イベントがキャプチャされて処理されたとき、入力イベントハンドラはtrueを返す必要があります。プライマリ入力イベントがキャプチャされた場合、セカンダリ入力イベントは生成されません。

入力イベントリファレンス

次の表は、各ゲームコントローラーボタンのモーションイベント定数およびキーイベント定数、それらのボタンでの推奨されるユーザーエクスペリエンス動作、およびAmazon Fire TVユーザーインターフェースでのそれらのボタンのデフォルトの動作を示します。

デジタルボタンはキーイベント (KeyEvent) を、アナログコントロールはモーションイベント (MotionEvent) を報告します。コントローラー入力に対するアプリの推奨される動作については、「コントローラー動作のガイドライン」を参照してください。

MotionEvent」列または「KeyEvent」列に示されているプライマリイベントをアプリが処理しない場合、これらのイベントに加えて「セカンダリイベント」列のイベントも生成されます。これらのセカンダリイベントについては、前の「プライマリとセカンダリの入力イベント」を参照してください。

この表におけるゲームとは、ゲームカテゴリでAmazonアプリストアに申請され、Amazonアプリストアから端末にインストールされたアプリのことです。

ゲームコントローラーボタン MotionEvent KeyEvent セカンダリイベント デフォルトの動作
ホーム なし なし なし GameCircleをサポートしているゲームの場合、GameCircleオーバーレイを起動します。GameCircleをサポートしていないゲームの場合、[Game Paused] ダイアログが表示されます。それ以外のアプリの場合、ホーム画面に戻ります。
バック なし KEYCODE_BACK なし 前の操作または画面 (アクティビティ) に戻ります。
メニュー なし KEYCODE_MENU なし Androidコンテキストメニュー (OptionsMenu) が起動されます。
GameCircle (第 1 世代のFireゲームコントローラーのみ) なし なし なし GameCircleをサポートしているゲームの場合、GameCircleオーバーレイを起動します。GameCircleをサポートしていないゲームの場合、[Game Paused] ダイアログが表示されます。それ以外のアプリの場合、ランチャーの [Games] 画面に戻ります。
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 (>0 is right) なし KEYCODE_DPAD_LEFT KEYCODE_DPAD_RIGHT ユーザーインターフェースのフォーカスが左方向または右方向に移動します。
上 (D-PAD) 下 (D-PAD) AXIS_HAT_Y (>0 is down) なし 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 なし 早送り