Android スマートフォン、自動車、テレビ、ヘッドフォンで Google アシスタントと音声でやり取りするメディアアプリは、Android メディア セッション API を利用し、メディア アクションを使用します。メディア アクションのライフサイクルに従うのは容易ではない。シンプルなタイムラインで示すように、検索からの単純な再生リクエストでも、問題が発生する可能性がある中間ステップが多数あります。
メディア コントローラ テスト(MCT)アプリを使用すると、Android でメディア再生の詳細をテストし、メディア セッションの実装を確認できます。
MCT は、アプリの MediaController
に関する情報(PlaybackState
やメタデータなど)を表示し、アプリ間のメディア コントロールをテストするために使用できます。MCT には、QA テストを自動化できる検証テスト フレームワークも含まれています。
MCT を使用するには、アプリにメディア ブラウザ サービスがあり、MCT から接続できるようにする必要があります。詳しくは、メディア ブラウザ サービスの構築をご覧ください。
MCT の開始

MCT を起動すると、次の 2 つのリストが表示されます。
- Active MediaSessions - MCT を起動すると、このリストは最初は空で、「No media apps found.(メディアアプリが見つかりません。アクティブなメディア セッションをスキャンするには、通知リスナー権限が必要です。[設定] をクリックして権限画面に移動し、MCT の権限を有効にします。
- MediaBrowserService の実装 - メディア ブラウザ サービスを実装しているアプリの一覧です。メディア ブラウザ サービスを実装している場合、アプリはこのリストに表示されますが、MCT を使用できるのは、アプリがすべての接続を受け入れるように構成されているか、MCT の許可リストに登録されている場合のみです。詳細については、onGetRoot() を使用してクライアント接続を制御するをご覧ください。
電話アプリを手動でテストする
MCT にアプリのメディア ブラウザ サービスへの接続を許可した場合、メディア ブラウザ サービスのリスト実装のリストにアプリが表示されます。その場所を見つけ、[コントロール] をクリックしてアプリをバックグラウンドで起動します。
それ以外の場合は、まずバックグラウンドでアプリを起動し、アクティブなメディア セッションのリストに表示された [コントロール] をクリックします。
テストの準備とプレイ
MCT がアプリの制御を開始すると、アプリの現在のセッション メタデータ(現在選択されているメディアと、セッションで処理できるアクション)が表示されます。

[MCT コントロール] ページの上部には、[検索]、[URI]、[メディア ID]、または [なし] を選択できるプルダウン メニューがあり、検索、URI、メディア ID(これらのオプションのいずれかを選択した場合)に関連付けられた入力データを指定するためのテキスト フィールドも用意されています。
テキスト フィールドのすぐ下にある [Prepare] ボタンと [Play] ボタンを使用すると、選択したアクションに応じて適切な呼び出し(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 を開きます。
検証テストの実施
検証テスト フレームワークにはワンクリック テストが用意されており、これを実行することで、メディアアプリが再生リクエストに正しく応答することを確認できます。
電話アプリのテスト

検証テストにアクセスするには、メディアアプリの横にある [Test] ボタンをクリックします。
MCT の状態

次のビューには、PlaybackState
、メタデータ、キューなど、MCT の MediaController
の詳細情報が表示されます。ツールバーの右側には
2 つのボタンがあります左側のボタンで、解析可能なログとフォーマット済みログの表示が切り替わります。右側のボタンを押すとビューが更新され、最新の情報が表示されます。
テストの選択

左にスワイプすると、検証テストビューが表示されます。このビューでは、スクロール可能な使用可能なテストのリストが表示されます。図 7 の「検索から再生」テストのように、テストでクエリを使用する場合、クエリ文字列を入力するテキスト フィールドがあります。
MCT には、次のメディア アクションのテストが含まれており、プロジェクトに継続的にテストが追加されています。
- 再生
- 検索結果から再生
- メディア ID から再生
- URI から再生
- 一時停止
- 停止
- 次にスキップする
- 前にスキップ
- キュー項目にスキップ
- 移動先
テスト結果

ビューの下部にある結果領域は、最初は空です。テストを実行すると、結果が表示されます。たとえば、検索再生テストを実行するには、テキスト フィールドに検索クエリを入力して、[Run Test] をクリックします。次のスクリーンショットは、正常なテスト結果を示しています。
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
テストを作成する
便利と思われるテストを追加して pull リクエストを送信できます。新しいテストを作成する方法については、MCT GitHub Wiki にアクセスして、検証テストの手順をご覧ください。
資金提供の手順をご確認ください。
参考情報
MCT は、メディア API を実装するアプリと組み合わせて使用することが想定されています。そのようなアプリの例については、Universal Android Music Player をご覧ください。
バグ修正や改善は、いつでも歓迎します。コントリビューションの手順はこちらをご覧ください。