メディア コントローラ テストアプリを使用する

Android スマートフォン、車、テレビ、ヘッドフォンで Google アシスタントと音声でやり取りするメディアアプリは、Android Media Session API を利用し、メディア アクションを使用します。メディア アクションのライフサイクルは、追跡が難しい場合があります。検索リクエストからのシンプルな再生でも、簡略化されたタイムラインに示すように、問題が発生する可能性のある中間ステップが多数あります。

メディア アクションのライフサイクル

図 1. メディア アクションのライフサイクル

メディア コントローラ テスト(MCT)アプリを使用すると、Android でメディア再生の詳細をテストし、メディア セッションの実装を確認できます。

メディア コントローラ テストアプリには、次の 2 つのバージョンがあります。

  • クライアント アプリは、以前の MediaControllerCompat の上に実装されています。これにより、以前の MediaSessionCompat または Media3 MediaSession をベースに構築されたメディア セッション アプリを、以前の MediaControllerCompat を介して外部アプリからアクセスされたときにテストできます。GitHub で以前のバージョンのソースコードを確認する。
  • クライアント アプリは、最新の Media3 MediaController の上に実装されています。これにより、以前の MediaSessionCompat または Media3 MediaSession をベースに構築されたメディア セッション アプリを、外部アプリから Media3 MediaController 経由でアクセスされたときにテストできます。GitHub で Media3 バージョンのソースコードを確認します。

MCT は、アプリの MediaController に関する情報(PlaybackState やメタデータなど)を表示し、アプリ間のメディア コントロールのテストに使用できます。MCT には、QA テストを自動化できる検証テスト フレームワークも含まれています。

MCT を使用するには、アプリにメディア ブラウザ サービスを組み込み、MCT がそのサービスに接続できるようにする必要があります。詳細については、メディア ブラウザ サービスを構築するをご覧ください。

MCT の開始

MCT の起動ページ
図 2. MCT の起動ページ

MCT を起動すると、次の 2 つのリストが表示されます。

  • アクティブな MediaSession - MCT を起動したとき、このリストは最初は空で、「メディアアプリが見つかりません。アクティブなメディア セッションをスキャンするには、通知リスナーの権限が必要です。」[設定] をクリックして権限画面に移動し、MCT の権限を有効にします。
  • MediaBrowserService の実装 - このリストには、メディア ブラウザ サービスを実装しているアプリが表示されます。メディア ブラウザ サービスを実装している場合、アプリはこのリストに表示されますが、MCT を使用できるのは、すべての接続を受け入れるようにアプリを構成している場合か、MCT を許可リストに登録している場合のみです。詳しくは、onGetRoot() を使用してクライアント接続を制御するをご覧ください。

スマートフォン アプリを手動でテストする

MCT がアプリのメディア ブラウザ サービスに接続することを許可すると、アプリがメディア ブラウザ サービスの実装リストに表示されます。そこでアプリを見つけて [Control] をクリックし、バックグラウンドでアプリを起動します。

それ以外の場合は、まずバックグラウンドでアプリを起動し、アクティブなメディア セッションのリストに表示されたら [Control] をクリックする必要があります。

テストの準備とプレイ

MCT がアプリの制御を開始すると、アプリの現在のセッション メタデータ(現在選択されているメディアと、セッションが処理する準備ができているアクション)が表示されます。

[コントロール] ページ
図 3. [コントロール] ページ

MCT コントロール ページの上部には、[Search]、[URI]、[メディア ID]、[None] を選択できるプルダウン メニューがあります。また、これらのオプションのいずれかを選択した場合に、Search、URI、メディア ID に関連付けられた入力データを指定するためのテキスト フィールドもあります。

テキスト フィールドのすぐ下にある [Prepare] ボタンと [Play] ボタンは、選択したアクションに応じて適切な呼び出し(onPrepare()、onPrepareFromSearch()、onPrepareFromUri()、onPrepareFromMediaId()、onPlay()、onPlayFromSearch()、onPlayFromUri()、onPlayFromMediaId())を実行します。

音声フォーカスのテスト

適切に動作するメディアアプリは、音声フォーカスを処理できる必要があります。アプリと並行して別のオーディオ アプリを実行することで、オーディオ フォーカスをテストできます。MCT コントロール ページには、オーディオ フォーカスをリクエストして解放するボタンがあります。

オーディオ フォーカスをテストする手順は次のとおりです。

  1. [Audio Focus] プルダウン メニューを使用して、3 つの再生時間ヒント(AUDIOFOCUS_GAIN、AUDIOFOCUS_GAIN_TRANSIENT、AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK)のいずれかを選択します。
  2. ボタンを押してフォーカスをリクエストします。
  3. ボタンをもう一度押すと、フォーカスが解除されます。

トランスポート コントロールのテスト

トランスポート コントロールのテスト
図 4. トランスポート コントロールのテスト

左にスワイプして MCT の UI ビューを表示します。このビューには、標準のメディア コントローラのトランスポート ボタンがあり、セッションの番組画像とデータが表示されます。無効になっているトランスポート ボタンはオレンジ色の丸で囲まれています。他のすべてのデバイスはアクティブです。

トランスポート ボタンを使用してプレーヤーをテストします。トランスポート ボタンの状態は想定どおりに変化するはずです。たとえば、[再生] ボタンを押すと、[再生] ボタンが無効になり、[一時停止] ボタンと [停止] ボタンが有効になります。

もう一度左にスワイプすると、オプションのアクションが表示されます。各アクションには、有効かどうかを示すコントロールがあります。アクティブな場合は、クリックしてアクションを実行できます。

メディア ブラウザ サービスを含むアプリのリストから接続した場合は、さらに 2 回左にスワイプすると、アプリのコンテンツ階層を上下に移動したり、コンテンツ ツリーを検索したりできるビューが表示されます。

動画アプリを手動でテストする

分割画面モードを使用して、動画アプリのコントローラをテストします。まず、1 つのウィンドウで動画アプリを開き、分割画面モードで MCT を開きます。

検証テストの実行

検証テスト フレームワークには、メディアアプリが再生リクエストに正しく応答することを確認するために実行できるワンクリック テストが用意されています。

電話アプリのテスト

テストボタン
図 5. テストボタン

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

MCT の状態

メディア コントロールの状態
図 6. メディア コントロールの状態

次のビューには、MCT の MediaController に関する詳細情報(PlaybackState、メタデータ、キューなど)が表示されます。ツールバーの右上に 2 つのボタンがあります。左側のボタンで、解析可能なログとフォーマットされたログを切り替えます。右側のボタンをクリックすると、ビューが更新され、最新の情報が表示されます。

テストの選択

テスト選択ページ
図 7. [Test Selection] ページ

左にスワイプすると、検証テストビューが表示されます。このビューには、利用可能なテストのスクロール可能なリストが表示されます。図 7 に示す検索からの再生テストのように、テストでクエリを使用する場合は、クエリ文字列を入力するテキスト フィールドがあります。

MCT には、次のメディア アクションのテストが含まれています。また、プロジェクトには継続的にテストが追加されています。

  • 再生
  • 検索から再生
  • メディア ID から再生
  • URI から再生
  • 一時停止
  • 停止
  • 次へスキップ
  • 前へスキップ
  • キューアイテムにスキップ
  • シーク

テスト結果

テスト結果が成功の場合
図 8. テスト結果が成功の場合

ビューの下部にある結果領域は、最初は空です。テストを実行すると、結果が表示されます。たとえば、検索テストから再生を実行するには、テキスト フィールドに検索クエリを入力し、[Run Test] をクリックします。次のスクリーンショットは、成功したテスト結果を示しています。

Android TV アプリのテスト

Android TV で MCT を起動すると、インストールされているメディアアプリのリストが表示されます。アプリがこのリストに表示されるのは、メディア ブラウザ サービスを実装している場合のみです。

テレビの MCT 起動ページ

図 9. テレビの MCT 起動ページ

アプリを選択するとテスト画面が表示され、右側に検証テストのリストが表示されます。

テレビの検証テストページ

図 10. テレビの [Verification Tests] ページ

テストを実行すると、画面の左側に、選択した MediaController に関する情報が表示されます。詳しくは、Logcat の MCT ログを確認してください。

テレビのテスト情報ページ

図 11. テレビのテスト情報ページ

クエリが必要なテストには、キーボード アイコンが表示されます。これらのテストのいずれかをクリックすると、クエリの入力フィールドが開きます。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 をご覧ください。

バグの修正や改善はいつでも歓迎します。投稿手順をご覧ください。