最終更新日:190227原本2015-05-13 

Chromecastアプリ開発入門:
Google Cast SDKを使ったAndroid/iOSアプリの作り方と注意点 (4/6)

Cast Companion Library(CCL)の利用

CCLとは

 これまで見てきたように、Chromecastとの接続・通信にはいくつものライブラリのAPIを使用しなければならず、やや面倒です。そこで、なるべくアプリ開発の負担を軽くするために、これらライブラリのAPIをラップしたCast Companion Library(以下、CCL)が公開されています。

 CCLは他のChromecastサンプルプログラムと一緒にGitHub上で公開されています。Android用サンプルプログラムの一つであるCastVideos-androidは、CCLの利用を前提としています。

 CCLを使うと、どの程度アプリ側の実装が簡単になるかを確認するため、実装例を以下に記します(コード18)。「// for Cast」のコメントがある個所がChromecast関連の処理です。これだけの実装で、CastアイコンやCastメニューの表示、選択したChromecastデバイスとの接続とReceiverアプリの起動までできます。ここまでに紹介してきたCCLを使用しない実装と比較してみてください。

  1. public class CCLSampleMainActivity extends ActionBarActivity {
  2. private static VideoCastManager sCastMgr; // for Cast
  3. private static String APPLICATION_ID = "APPLICATION_ID"; // for Cast
  4. @Override
  5. protected void onCreate(Bundle savedInstanceState) {
  6. super.onCreate(savedInstanceState);
  7. setContentView(R.layout.activity_cclsample_main);
  8. initializeCastManager(); // for Cast
  9. }
  10. @Override
  11. public boolean onCreateOptionsMenu(Menu menu) {
  12. getMenuInflater().inflate(R.menu.cclsample_main, menu);
  13. sCastMgr.addMediaRouterButton(menu, R.id.media_route_menu_item); // for Cast
  14. return true;
  15. }
  16. @Override
  17. public boolean onOptionsItemSelected(MenuItem item) {
  18. int id = item.getItemId();
  19. if (id == R.id.action_settings) {
  20. return true;
  21. }
  22. return super.onOptionsItemSelected(item);
  23. }
  24. @Override
  25. protected void onResume() {
  26. super.onResume();
  27. sCastMgr.incrementUiCounter(); // for Cast
  28. }
  29. @Override
  30. protected void onPause() {
  31. super.onPause();
  32. sCastMgr.decrementUiCounter(); // for Cast
  33. }
  34. // for Cast
  35. // CCLのVideoCastManager初期化
  36. private void initializeCastManager() {
  37. sCastMgr = VideoCastManager.initialize(getApplicationContext(),
  38. APPLICATION_ID, null, null);
  39. sCastMgr.enableFeatures(VideoCastManager.FEATURE_NOTIFICATION
  40. | VideoCastManager.FEATURE_LOCKSCREEN
  41. | VideoCastManager.FEATURE_WIFI_RECONNECT
  42. | VideoCastManager.FEATURE_CAPTIONS_PREFERENCE
  43. | VideoCastManager.FEATURE_DEBUGGING);
  44. }
  45. }
コード18 CCL利用時の実装例

CCLが提供する機能

 CCLが提供する主な機能とUIを列挙します。

  • Chromecastデバイスの検出
  • カスタマイズされたCastメニュー
  • カスタマイズされたコントロール画面
  • カスタマイズされたNotification
  • ロックスクリーンでのコンロトーラー
  • Receiverアプリとのセッションリカバリ

CCLのメリット

 CCLのメリットの一つは、先に述べたように、依存ライブラリのAPIを使った面倒な手続きを省略できる点です。

 もう一つのメリットとして、上で列挙した機能とUIがGoogle Cast Design Checklistに準拠してる点が挙げられます。例えば動画再生アプリの場合は、グーグルが定めた基準仕様により、Notificationやロックスクリーンなどの画面に再生・一時停止ボタンなどの基本的操作ができるUIを配置する必要がありますが、CCLが提供するUIはこうした基準を満たしています。

 CCLの詳しい利用方法の説明はここでは割愛しますが、CCLに同梱されている 「CastCompanionLibrary.pdf」に記載されているので参考にしてください。

CCLの注意点

 非常に強力なCCLですが、いくつか注意点もあります。

【1】Googleの公式ライブラリではない

 依存ライブラリのAndroid Support LibrariesやGoogle Play Services SDKなどとは異なります。CCLはソースコードを含めたプロジェクト一式として提供されています。パッケージ名が「com.google.sample.castcompanionlibrary」であることからも分かるように、あくまでサンプルの一つという位置付けなので、その点をわきまえて利用しましょう。パッケージ名も作成するアプリに合わせて変更します。

【2】場合によってはCCLのコードにアプリ開発者が手を加える必要がある

 コントロール画面やNotificationなどのデザインはCCL内部で定義されています。ユーザーのアプリに合わせてデザインを変更したい場合は、CCLの実装を変更します。また、Notification用に使うNotification IDがVideoCastNotificationServiceクラス内で固定で1に設定されているため、開発するアプリがすでに同じIDを使っている場合には、重複しない値にしなければなりません。

 以上のことから、CCLは「Library」という名前が付いているものの、ブラックボックス化された一般的なライブラリとは毛色が異なります。CCLを使えば多くの面倒な実装を省けますが、ベースとなるGoogle Cast SDKなどのライブラリの知識が全く不要になるわけではなく、カスタマイズしたい場合には、それらの知識を使いながらCCLのコードを読み進め、改修する作業が必要です。

 以上でAndroidの実装の解説を終わります。