fireTVのManifest設定

リモコン操作
開発環境自体はAndroidと全く変わりませんし、作り方も変わりません。スマホ向けに作ったアプリはそのまま動作します。
ただし、fireTVの操作はリモコンです。その点を考慮しなければ全く操作ができない。ということになってしまいます。
リモコンですべてを操作します。
では実際、どのように操作を検知するのでしょうか。
@Override
public boolean onKeyDown(int keyCode, KeyEvent event){
switch (keyCode){
case KeyEvent.KEYCODE_MENU:
break;
case KeyEvent.KEYCODE_DPAD_CENTER:
break;
case KeyEvent.KEYCODE_DPAD_UP:
break;
case KeyEvent.KEYCODE_DPAD_DOWN:
break;
case KeyEvent.KEYCODE_DPAD_LEFT:
break;
case KeyEvent.KEYCODE_DPAD_RIGHT:
break;
case KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE:
break;
case KeyEvent. KEYCODE_MEDIA_REWIND:
break;
case KeyEvent.KEYCODE_MEDIA_FAST_FORWARD:
break;
}
return super.onKeyDown(keyCode, event);
}
上記の通り、実は特に新しい知識は必要ありません。
DPADは上部の大きな○を指します。NavigationとSelectです。あとは、お分かりいただけるかと思います。
ここで注意しなければいけないことが1点。
MEDIA関係のKeyEventです。fireTVではAmazonMusicで音楽を聴いていて、そのままアプリを起動した場合、音楽が停止されずにそのままアプリでも再生され続けます。
もし、ユーザーがアプリを操作するつもりでMEDIAキーを押した場合、AmazonMusicが操作されてしまいますし、逆もしかりです。
ですからメディアを使うアプリでない場合、MEDIAキーは使わないほうが良いでしょう。
これは実際に割り当ててみると強く感じることです。無効にするわけにもいきませんし・・。
DPAD、MENUのみで操作するよう設計することが良いかなと、思います。
onKeyLongPressも使えはしますが、あまりおすすめしません。スマートフォン以上にユーザーが分かりにくいので・・。
無効化したい場合はそれぞれのcaseについてreturn trueとなるようにします。
全てをできる限りButton、ImageButtonで
fireTVではすべての操作を、Button、ImageButtonで操作するよう設計することをお勧めします。通常であれば下のZoom設定などはSeekBarでもよさそうですが、Buttonを使っています。

onClickだけでなく、自分の位置がどこにあるのかをわかりやすくするため、focusも設定しておきましょう。
以下のように。
setButton.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View view, boolean b) {
if(b)setButton.setBackgroundResource(R.drawable.ic_circle_black_24dp);
else setButton.setBackground(null);
}
});
setButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
setButtonFlag = !setButtonFlag;
if(setButtonFlag){
setButton.setImageResource(R.drawable.ic_check_box_black_24dp);
}
else {
setButton.setImageResource(R.drawable.ic_check_box_outline_blank_black_24dp);
}
}
});
KeyEvent.KEYCODE_BACKについて
KeyEvent.KEYCODE_BACKは想定した動きにならないことが多いです。実装したい場合、
@Override
public void onBackPressed() {
moveTaskToBack(true); //fireTVのメニューに戻る
}
といった具合にonBackPressedを使ってみてください。
おわりに
スマートフォンと違って、動くか動かないかの心配は1台の確認で済みますからその点は楽です。
ただし、メモリ管理はしっかり行ってください。stickなどはRAMが少なめですので。。
また、あまり使うこともありませんが、SearchFragmentなど利用できない機能もあります。
ちなみに、、、ButtonはTextViewの子、ImageButtonはImageViewの子です。さらにその上はお互い、Viewとなります。 ImageButtonはButtonの子ではありません。だから何?という話でもありますが。