Android スマートフォン、自動車、テレビ、ヘッドフォンで Google アシスタントと音声操作でやり取りするメディアアプリは、Android Media Session API を基盤とし、メディア アクションを使用します。メディア アクションのライフサイクルは追跡しづらい場合があります。簡略化されたタイムラインに示すように、検索リクエストからの単純な再生でも、問題が発生する可能性のある中間ステップが多数あります。
メディア コントローラ テスト(MCT)アプリを使用すると、Android でメディア再生の詳細をテストし、メディア セッションの実装を確認できます。
メディア コントローラ テストアプリには、次の 2 つのバージョンがあります。
- クライアント アプリは、従来の
MediaControllerCompat上に実装されています。これにより、レガシーMediaSessionCompatまたは Media3MediaSession上に構築されたメディア セッション アプリを、レガシーMediaControllerCompatを介して外部アプリからアクセスしたときにテストできます。以前のバージョンのソースコードは GitHub にあります。 - クライアント アプリは、最新の Media3
MediaController上に実装されています。これにより、以前のMediaSessionCompatまたは Media3MediaSession上に構築されたメディア セッション アプリを、Media3MediaControllerを介して外部アプリからアクセスしたときにテストできます。Media3 バージョンのソースコードは GitHub にあります。
MCT は、アプリの MediaController に関する情報(PlaybackState やメタデータなど)を表示し、アプリ間メディア コントロールのテストに使用できます。MCT には、QA テストを自動化できる検証テスト フレームワークも含まれています。
MCT を使用するには、アプリにメディア ブラウザ サービスが実装されており、MCT がそのサービスに接続できるようにする必要があります。詳細については、メディア ブラウザ サービスを構築するをご覧ください。
MCT の開始
MCT を起動すると、次の 2 つのリストが表示されます。
- アクティブな MediaSessions - MCT を起動すると、このリストは最初は空で、「メディアアプリが見つかりません。アクティブなメディア セッションをスキャンするには、通知リスナーの権限が必要です。」[設定] をクリックして権限画面に移動し、MCT の権限を有効にします。
- MediaBrowserService の実装 - メディア ブラウザ サービスを実装したアプリの一覧です。メディア ブラウザ サービスを実装している場合、アプリはこのリストに表示されます。ただし、MCT を使用できるのは、すべての接続を受け入れるようにアプリを構成した場合、または MCT を許可リストに登録した場合のみです。詳しくは、onGetRoot() によるクライアント接続の制御をご覧ください。
スマートフォン アプリを手動でテストする
MCT がアプリのメディア ブラウザ サービスに接続できるようにした場合、アプリはメディア ブラウザ サービス リストの実装のリストに表示されます。アプリを見つけて [管理] をクリックし、バックグラウンドでアプリを起動します。
そうでない場合は、まずアプリをバックグラウンドで起動してから、アクティブなメディア セッションのリストに表示されたら [コントロール] をクリックする必要があります。
テスト、準備、プレイ
MCT がアプリの制御を開始すると、アプリの現在のセッション メタデータ(現在選択されているメディアと、セッションで処理する準備が整っているアクション)が表示されます。
MCT コントロール ページの上部には、[検索]、[URI]、[メディア ID]、[なし] を選択できるプルダウン メニューと、検索、URI、メディア ID のいずれかのオプションを選択した場合に、それらに関連付けられた入力データを指定できるテキスト フィールドがあります。
テキスト フィールドのすぐ下にある [準備] ボタンと [再生] ボタンは、選択したアクションに応じて適切な呼び出し(onPrepare()、onPrepareFromSearch()、onPrepareFromUri()、onPrepareFromMediaId()、onPlay()、onPlayFromSearch()、onPlayFromUri()、onPlayFromMediaId())を実行します。
音声フォーカスのテスト
マナーの良いメディアアプリは、音声フォーカスを処理できる必要があります。音声フォーカスをテストするには、アプリと一緒に別の音声アプリを実行します。MCT コントロール ページには、音声フォーカスをリクエストして解放するボタンがあります。
オーディオ フォーカスをテストする手順は次のとおりです。
- [音声フォーカス] プルダウン メニューを使用して、3 つの時間ヒント(
AUDIOFOCUS_GAIN、AUDIOFOCUS_GAIN_TRANSIENT、AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK)のいずれかを選択します。 - ボタンを押してフォーカスをリクエストします。
- フォーカスを解除するには、ボタンをもう一度押します。
トランスポート コントロールのテスト
左にスワイプして MCT の UI ビューを表示します。このビューには、標準のメディア コントローラ トランスポート ボタンがあり、セッションのプログラム画像とデータが表示されます。無効になっている交通機関のボタンは、オレンジ色の円で囲まれています。他のすべてはアクティブです。
再生ボタンを使用してプレーヤーをテストします。トランスポート ボタンの状態が想定どおりに変更されているはずです。たとえば、[再生] ボタンを押すと、[再生] ボタンが無効になり、[一時停止] ボタンと [停止] ボタンが有効になります。
もう一度左にスワイプすると、オプションの操作が表示されます。各アクションには、アクティブかどうかを示すコントロールがあります。アクティブな場合は、クリックしてアクションを実行できます。
メディア ブラウザ サービスがあるアプリのリストから接続した場合は、左に 2 回スワイプすると、アプリのコンテンツ階層を上下移動したり、コンテンツ ツリーを検索したりできるビューが表示されます。
動画アプリを手動でテストする
分割画面モードを使用して、動画アプリのコントローラをテストします。まず、1 つのウィンドウで動画アプリを開き、分割画面モードで MCT を開きます。
検証テストの実行
検証テスト フレームワークには、ワンクリック テストが用意されています。このテストを実行すると、メディアアプリが再生リクエストに正しく応答していることを確認できます。
スマートフォン アプリのテスト
確認テストにアクセスするには、メディアアプリの横にある [テスト] ボタンをクリックします。
MCT の状態
次のビューには、MCT の MediaController に関する詳細情報(PlaybackState、メタデータ、キューなど)が表示されます。ツールバーの右上には 2 つのボタンがあります。左側のボタンは、解析可能なログと書式付きログを切り替えます。右側のボタンをクリックすると、ビューが更新され、最新の情報が表示されます。
テストの選択
左にスワイプすると、検証テストのビューが表示されます。ここで、利用可能なテストのスクロール可能なリストを確認できます。テストでクエリを使用する場合(図 7 の検索からの再生テストなど)は、クエリ文字列を入力するテキスト フィールドがあります。
MCT には、次のメディア アクションのテストが含まれています。また、プロジェクトには継続的にテストが追加されます。
- 再生
- 検索から再生
- メディア ID から再生
- URI から再生
- 一時停止
- 停止
- 次の曲にスキップ
- 前の曲にスキップ
- キュー内のアイテムにスキップ
- シーク先
テスト結果
ビューの下部にある結果領域は、最初は空です。テストを実行すると結果が表示されます。たとえば、検索からの再生テストを実行するには、テキスト フィールドに検索クエリを入力し、[テストを実行] をクリックします。次のスクリーンショットは、テストが成功したことを示しています。
Android TV アプリのテスト
Android TV で MCT を起動すると、インストールされているメディアアプリのリストが表示されます。アプリがこのリストに表示されるのは、メディア ブラウザ サービスを実装している場合のみです。
アプリを選択すると、右側に検証テストのリストが表示されるテスト画面が表示されます。
テストを実行すると、画面の左側に選択した MediaController に関する情報が表示されます。詳細については、Logcat で MCT ログを確認してください。
クエリが必要なテストには、キーボードのアイコンが表示されます。これらのテストのいずれかをクリックすると、クエリの入力フィールドが開きます。Enter キーを押してテストを実行します。
テキスト入力を簡単にするには、adb コマンドを使用することもできます。
adb shell input text your-query
「%s」を使用すると、単語の間にスペースを追加できます。たとえば、次のコマンドは入力フィールドに「hello world」というテキストを追加します。
adb shell input text hello%sworld
テストの作成
役立つと思われるテストを追加してプル リクエストを送信できます。新しいテストを作成する方法については、MCT GitHub Wiki で検証テストの手順をご覧ください。
拠出手順をご確認ください。
参考情報
MCT は、メディア API を実装するアプリと組み合わせて使用することを目的としています。このようなアプリの例については、Universal Android Music Player をご覧ください。
バグの修正や改善はいつでも歓迎いたします。投稿手順をご覧ください。