Android スマートフォン、車、テレビ、ヘッドフォンで Google アシスタントと音声でやり取りするメディアアプリは、Android Media Session API を利用し、メディア アクションを使用します。メディア アクションのライフサイクルは、追跡が難しい場合があります。検索リクエストからのシンプルな再生でも、簡略化されたタイムラインに示すように、問題が発生する可能性のある中間ステップが多数あります。
メディア コントローラ テスト(MCT)アプリを使用すると、Android でメディア再生の詳細をテストし、メディア セッションの実装を確認できます。
メディア コントローラ テストアプリには、次の 2 つのバージョンがあります。
- クライアント アプリは、以前の
MediaControllerCompatの上に実装されています。これにより、以前のMediaSessionCompatまたは Media3MediaSessionをベースに構築されたメディア セッション アプリを、以前のMediaControllerCompatを介して外部アプリからアクセスされたときにテストできます。GitHub で以前のバージョンのソースコードを確認する。 - クライアント アプリは、最新の Media3
MediaControllerの上に実装されています。これにより、以前のMediaSessionCompatまたは Media3MediaSessionをベースに構築されたメディア セッション アプリを、外部アプリから Media3MediaController経由でアクセスされたときにテストできます。GitHub で Media3 バージョンのソースコードを確認します。
MCT は、アプリの MediaController に関する情報(PlaybackState やメタデータなど)を表示し、アプリ間のメディア コントロールのテストに使用できます。MCT には、QA テストを自動化できる検証テスト フレームワークも含まれています。
MCT を使用するには、アプリにメディア ブラウザ サービスを組み込み、MCT がそのサービスに接続できるようにする必要があります。詳細については、メディア ブラウザ サービスを構築するをご覧ください。
MCT の開始
MCT を起動すると、次の 2 つのリストが表示されます。
- アクティブな MediaSession - MCT を起動したとき、このリストは最初は空で、「メディアアプリが見つかりません。アクティブなメディア セッションをスキャンするには、通知リスナーの権限が必要です。」[設定] をクリックして権限画面に移動し、MCT の権限を有効にします。
- MediaBrowserService の実装 - このリストには、メディア ブラウザ サービスを実装しているアプリが表示されます。メディア ブラウザ サービスを実装している場合、アプリはこのリストに表示されますが、MCT を使用できるのは、すべての接続を受け入れるようにアプリを構成している場合か、MCT を許可リストに登録している場合のみです。詳しくは、onGetRoot() を使用してクライアント接続を制御するをご覧ください。
スマートフォン アプリを手動でテストする
MCT がアプリのメディア ブラウザ サービスに接続することを許可すると、アプリがメディア ブラウザ サービスの実装リストに表示されます。そこでアプリを見つけて [Control] をクリックし、バックグラウンドでアプリを起動します。
それ以外の場合は、まずバックグラウンドでアプリを起動し、アクティブなメディア セッションのリストに表示されたら [Control] をクリックする必要があります。
テストの準備とプレイ
MCT がアプリの制御を開始すると、アプリの現在のセッション メタデータ(現在選択されているメディアと、セッションが処理する準備ができているアクション)が表示されます。
MCT コントロール ページの上部には、[Search]、[URI]、[メディア ID]、[None] を選択できるプルダウン メニューがあります。また、これらのオプションのいずれかを選択した場合に、Search、URI、メディア ID に関連付けられた入力データを指定するためのテキスト フィールドもあります。
テキスト フィールドのすぐ下にある [Prepare] ボタンと [Play] ボタンは、選択したアクションに応じて適切な呼び出し(onPrepare()、onPrepareFromSearch()、onPrepareFromUri()、onPrepareFromMediaId()、onPlay()、onPlayFromSearch()、onPlayFromUri()、onPlayFromMediaId())を実行します。
音声フォーカスのテスト
適切に動作するメディアアプリは、音声フォーカスを処理できる必要があります。アプリと並行して別のオーディオ アプリを実行することで、オーディオ フォーカスをテストできます。MCT コントロール ページには、オーディオ フォーカスをリクエストして解放するボタンがあります。
オーディオ フォーカスをテストする手順は次のとおりです。
- [Audio Focus] プルダウン メニューを使用して、3 つの再生時間ヒント(
AUDIOFOCUS_GAIN、AUDIOFOCUS_GAIN_TRANSIENT、AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK)のいずれかを選択します。 - ボタンを押してフォーカスをリクエストします。
- ボタンをもう一度押すと、フォーカスが解除されます。
トランスポート コントロールのテスト
左にスワイプして MCT の UI ビューを表示します。このビューには、標準のメディア コントローラのトランスポート ボタンがあり、セッションの番組画像とデータが表示されます。無効になっているトランスポート ボタンはオレンジ色の丸で囲まれています。他のすべてのデバイスはアクティブです。
トランスポート ボタンを使用してプレーヤーをテストします。トランスポート ボタンの状態は想定どおりに変化するはずです。たとえば、[再生] ボタンを押すと、[再生] ボタンが無効になり、[一時停止] ボタンと [停止] ボタンが有効になります。
もう一度左にスワイプすると、オプションのアクションが表示されます。各アクションには、有効かどうかを示すコントロールがあります。アクティブな場合は、クリックしてアクションを実行できます。
メディア ブラウザ サービスを含むアプリのリストから接続した場合は、さらに 2 回左にスワイプすると、アプリのコンテンツ階層を上下に移動したり、コンテンツ ツリーを検索したりできるビューが表示されます。
動画アプリを手動でテストする
分割画面モードを使用して、動画アプリのコントローラをテストします。まず、1 つのウィンドウで動画アプリを開き、分割画面モードで MCT を開きます。
検証テストの実行
検証テスト フレームワークには、メディアアプリが再生リクエストに正しく応答することを確認するために実行できるワンクリック テストが用意されています。
電話アプリのテスト
検証テストにアクセスするには、メディアアプリの横にある [Test] ボタンをクリックします。
MCT の状態
次のビューには、MCT の MediaController に関する詳細情報(PlaybackState、メタデータ、キューなど)が表示されます。ツールバーの右上に 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 をご覧ください。
バグの修正や改善はいつでも歓迎します。投稿手順をご覧ください。