Android:アプリのAndroid TV 対応
アプリを Chromecast with Google TV で 動作するように対応してみました。 対応するアプリは拙作 PicturePuzzle(絵合わせパズルゲーム) です。 成果物は Google Play で確認できます。
- PicturePuzzle(Google Play)
https://play.google.com/store/apps/details?id=okinawa.flat_e.picture_puzzle
工程は以下の通りです。
- リモコン対応
- 構成の変更
- 動作確認
開発環境は以下の通りです。
- Windows 11
- Android Studio Arctic Fox | 2020.3.1 Patch 1
- Chromecast with Google TV
リモコン対応
Android TV では、アプリの操作はリモコン(D-Pad)で行うことになります。
各画面(フラグメント)毎に、リモコンの各ボタン(上、下、左、右、決定、戻る)が押されたときの処理を記述していきます。
- TV コントローラを管理する https://developer.android.com/training/tv/start/controllers?hl=ja
- 十字キーの入力を処理する https://developer.android.com/training/game-controllers/controller-input?hl=ja#dpad
構成の変更
ドキュメントに従って、アプリの構成を変更しました。
Android TV から起動するアクティビティを作成するには、intent-filter に専用のランチャ(android.intent.category.LEANBACK_LAUNCHER)を指定する必要があります。
ドキュメントでは、TVアプリ向けのアクティビティとモバイル向けのアクティビティを別々に設けていましたが、今回はどちらの場合も同一のアクティビティを実行するようにしました。
動作確認
アプリの開発作業は、Android 10 の Android TV エミュレータで行いましたが、アプリが Android 10 以外でも動作するか確認しました。
動作確認は実機およびエミュレータで行いました。
実機での確認
Chromecast with Google TV (Android 10。以下 Chromecast と記載)でアプリをデバッグ実行させるには、 ドキュメントにあるように、1度 Chromecast と直接 USB 接続する手順を踏む必要がありました。
- Wi-Fi 経由でデバイスに接続する(Android 10 以前)
https://developer.android.com/studio/command-line/adb?hl=ja#wireless
実施したことは次のとおりです。
- Android SDK 付属の adb コマンドを使用することになるので、当コマンドのあるディレクトリを環境変数 PATH に登録する。
- c:\Users\ユーザ名\AppData\Local\Android\Sdk\platform-tools
- 開発用PC と Chromecast を USBケーブルで接続する
- 使用しているPC に USB 3.2 Gen 2(Type-C)ポート があるので、これを Chromecast と接続する
- 上記ドキュメントに従って adb コマンドを実行する
対象デバイスでTCP/IP 接続をリッスンするように指定する
> adb tcpip 5555
デバイスに接続する
> adb connect IPアドレス:5555
接続するデバイスを確認する
> adb devices
エミュレータでの確認
アプリがサポートするSDKバージョン(minSdkVersion) 22 に対応するAPIレベルの Android TV エミュレータ(5.1 Lollipop) でアプリを動作確認してみましたが、当初、正常に動作しませんでした。
そこで、現在開発に使用したエミュレータより API レベルの低いエミュレータで動作確認し、それができたら より APIレベルの低いエミュレータで動作確認するようにしました。
動作確認で変更した箇所は以下の通りです。
- Android 10 未満では BlendModeColorFilter が使えない
- PorterDuffColorFilter で代用する
- Android 8 未満では View.focusable = View.FOCUSABLE が使えない
- isFoucasable = true で代用する
各API レベルでの変更点は以下で確認しました。
- Build.VERSION_CODES