これまで見てきたように、Chromecastとの接続・通信にはいくつものライブラリのAPIを使用しなければならず、やや面倒です。そこで、なるべくアプリ開発の負担を軽くするために、これらライブラリのAPIをラップしたCast Companion Library(以下、CCL)が公開されています。
CCLは他のChromecastサンプルプログラムと一緒にGitHub上で公開されています。Android用サンプルプログラムの一つであるCastVideos-androidは、CCLの利用を前提としています。
CCLを使うと、どの程度アプリ側の実装が簡単になるかを確認するため、実装例を以下に記します(コード18)。「// for Cast」のコメントがある個所がChromecast関連の処理です。これだけの実装で、CastアイコンやCastメニューの表示、選択したChromecastデバイスとの接続とReceiverアプリの起動までできます。ここまでに紹介してきたCCLを使用しない実装と比較してみてください。
- public class CCLSampleMainActivity extends ActionBarActivity {
- private static VideoCastManager sCastMgr; // for Cast
- private static String APPLICATION_ID = "APPLICATION_ID"; // for Cast
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_cclsample_main);
- initializeCastManager(); // for Cast
- }
- @Override
- public boolean onCreateOptionsMenu(Menu menu) {
- getMenuInflater().inflate(R.menu.cclsample_main, menu);
- sCastMgr.addMediaRouterButton(menu, R.id.media_route_menu_item); // for Cast
- return true;
- }
- @Override
- public boolean onOptionsItemSelected(MenuItem item) {
- int id = item.getItemId();
- if (id == R.id.action_settings) {
- return true;
- }
- return super.onOptionsItemSelected(item);
- }
- @Override
- protected void onResume() {
- super.onResume();
- sCastMgr.incrementUiCounter(); // for Cast
- }
- @Override
- protected void onPause() {
- super.onPause();
- sCastMgr.decrementUiCounter(); // for Cast
- }
- // for Cast
- // CCLのVideoCastManager初期化
- private void initializeCastManager() {
- sCastMgr = VideoCastManager.initialize(getApplicationContext(),
- APPLICATION_ID, null, null);
- sCastMgr.enableFeatures(VideoCastManager.FEATURE_NOTIFICATION
- | VideoCastManager.FEATURE_LOCKSCREEN
- | VideoCastManager.FEATURE_WIFI_RECONNECT
- | VideoCastManager.FEATURE_CAPTIONS_PREFERENCE
- | VideoCastManager.FEATURE_DEBUGGING);
- }
- }
CCLが提供する主な機能とUIを列挙します。
CCLのメリットの一つは、先に述べたように、依存ライブラリのAPIを使った面倒な手続きを省略できる点です。
もう一つのメリットとして、上で列挙した機能とUIがGoogle Cast Design Checklistに準拠してる点が挙げられます。例えば動画再生アプリの場合は、グーグルが定めた基準仕様により、Notificationやロックスクリーンなどの画面に再生・一時停止ボタンなどの基本的操作ができるUIを配置する必要がありますが、CCLが提供するUIはこうした基準を満たしています。
CCLの詳しい利用方法の説明はここでは割愛しますが、CCLに同梱されている 「CastCompanionLibrary.pdf」に記載されているので参考にしてください。
非常に強力な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の実装の解説を終わります。