Android センダーアプリを Cast SDK v2 から Cast Application Framework(CAF)に移行する

次の手順に沿って、Android の送信側アプリを Cast から変換できます。 これは、SDK v2 から CAF Sender への CastContext あります。

Cast CAF Sender SDK は CastContext を使用して GoogleAPIClient を管理します。 CastContext はライフサイクル、エラー、コールバックを管理してくれます。 Cast アプリの開発が簡単になります。

はじめに

  • CAF 送信者は引き続き Google Play 開発者サービスの一部として配布されます。 Android SDK Manager を使用する
  • コンプライアンスの責任を持つ新しいパッケージが Google Cast Design チェックリスト(com.google.android.gms.cast.framework.*
  • CAF Sender は Cast UX 要件を満たすウィジェットを提供します。 v2 では UI コンポーネントが用意されていないため、これらを実装する必要がありました。 説明します。
  • Cast API を使用するために GoogleApiClient を使用する必要がなくなりました。
  • CAF Sender の字幕は v2 と同様です。

依存関係

V2 と CAF はサポート ライブラリと Google Play に対して同じ依存関係を持ちます。 (Support Library Features を参照)にサービス(9.2.0 以降)を提供します。 ガイド

CAF がサポートする最小 Android SDK バージョンは 9(Gingerbread)です。

初期化

CAF では、キャスト フレームワークに明示的な初期化ステップが必要です。この 初期化が含まれます。 CastContext 使用して適切なレイヤを OptionsProvider Web Receiver アプリケーション ID とその他のグローバル オプションを指定します。

public class CastOptionsProvider implements OptionsProvider {

    @Override
    public CastOptions getCastOptions(Context context) {
        return new CastOptions.Builder()
                .setReceiverApplicationId(context.getString(R.string.app_id))
                .build();
    }

    @Override
    public List<SessionProvider> getAdditionalSessionProviders(Context context) {
        return null;
    }
}

「application」内で OptionsProvider を宣言するアプリのタグ AndroidManifest.xml ファイル:

<application>
...
    <meta-data
        android:name=
            "com.google.android.gms.cast.framework.OPTIONS_PROVIDER_CLASS_NAME"
        android:value="com.google.sample.cast.refplayer.CastOptionsProvider" />
</application>

各アクティビティの onCreate メソッドで CastContext を遅延初期化します。

private CastContext mCastContext;

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.video_browser);
    setupActionBar();

    mCastContext = CastContext.getSharedInstance(this);
}

この手順は v2 では不要でした。

デバイス検出

CAF では、検出プロセスの開始と停止は、 アプリがフォアグラウンドに移って、バックグラウンドに移動したときに、 できます。MediaRouteSelectorMediaRouter.Callback は使用できません。 分析できます

キャスト アイコンとキャスト ダイアログ

v2 と同様に、これらのコンポーネントは MediaRouter のサポート ライブラリ

キャスト アイコンは、 MediaRouteButton アクティビティに追加できます( ActionBar または Toolbar), 選択します。

<item
    android:id="@+id/media_route_menu_item"
    android:title="@string/media_route_menu_title"
    app:actionProviderClass="android.support.v7.app.MediaRouteActionProvider"
    app:showAsAction="always"/>

以下を使用して、各アクティビティの onCreateOptionMenu() メソッドをオーバーライドします。 CastButtonFactory MediaRouteButton を Cast フレームワークに接続します。

private MenuItem mediaRouteMenuItem;

public boolean onCreateOptionsMenu(Menu menu) {
    super.onCreateOptionsMenu(menu);
    getMenuInflater().inflate(R.menu.browse, menu);
    mediaRouteMenuItem =
        CastButtonFactory.setUpMediaRouteButton(getApplicationContext(),
                                                menu,
                                                R.id.media_route_menu_item);
    return true;
}

誰かがボタンをタップすると、キャスト ダイアログが自動的に表示されます。

デバイス コントロール

CAF では、デバイス コントロールの大部分がフレームワークによって処理されます。送信者 接続を処理する必要も(処理を試みる必要もありません) Web Receiver アプリケーションを GoogleApiClient。送信者とウェブ受信者間のやり取りを表示 「セッション」として識別されます。「 SessionManager クラスがセッションのライフサイクルを処理し、セッションを自動的に開始および停止する ユーザーの操作への応答: ユーザーがキャストを選択すると、セッションが開始されます。 デバイスに表示され、ユーザーが [キャストを停止] をタップすると終了します。 戻るボタンや、送信側アプリ自体が終了したときにも表示されます。送信者 セッション ライフサイクル イベントを通知したい場合は、 SessionManagerListenerSessionManager に置き換えます。SessionManagerListener コールバックは、 コールバック メソッドを呼び出せます。

CastSession クラスはキャスト デバイスとのセッションを表します。このクラスには、 デバイスの音量とミュート状態を制御する(これまで v2 で行われていた機能) Cast.CastApi のメソッドを使用します。

v2 では、 Cast.Listener デバイスの状態の変化を通知するコールバックによって、 音量、ミュート状態、スタンバイ状態などです。

CAF では、引き続きコールバックを介して音量/ミュート状態の変化の通知が配信されます。 Cast.Listener のメソッドこれらのリスナーは、イベントに関連付けられた CastSession。 デバイスの状態に関する残りの通知はすべて、 CastStateListener コールバックこれらのリスナーは CastSession に登録されます。必ず 関連付けられているフラグメント、アクティビティ、アプリが バックグラウンドに移ります。

再接続ロジック

v2 と同様に、CAF は、ネットワークと通信するための 一時的な Wi-Fi 信号の損失やその他のネットワーク エラーが原因で失われた。現在は セッションレベルで行われますセッションは「一時停止」ステータス、Pod が 切断され、「接続済み」状態に戻ります。状態を 接続が回復しますフレームワークはネットワークへの再接続を ウェブ レシーバー アプリを使用してキャスト チャンネルを再接続します。

さらに、CAF によってセッションの自動再開も追加され、 デフォルト(無効にすることも、 CastOptions。 送信側のアプリケーションがバックグラウンドに移行されるか、 (クラッシュなどによる)キャスト セッションの進行中に、 フレームワークは、送信側のアプリケーションがセッションを再開するときに、 フォアグラウンドに戻ったとき、または再起動されたとき。アラートの取り込み時に SessionManager: 登録済みの任意のコールバックに対して適切なコールバックを発行します。 SessionManagerListener 個のインスタンス。

カスタム チャンネル登録

v2 では、カスタム チャネル( Cast.MessageReceivedCallback) Cast.CastApi に登録されていることを確認します。CAF では、代わりにカスタム チャネルは CastSession インスタンス。登録は SessionManagerListener.onSessionStarted コールバック メソッドを指定します。メディア アプリケーションの場合、インフラストラクチャを Cast.CastApi.setMessageReceivedCallbacks でメディア コントロール チャンネルを登録する。 詳しくは次のセクションをご覧ください。

メディア コントロール

v2 クラス RemoteMediaPlayer サポートが終了しているため、使用しないでください。CAF では、 RemoteMediaClient 同等の機能を便利な API で提供します。内容 このオブジェクトを明示的に初期化または登録する必要はありません。フレームワーク オブジェクトが自動的にインスタンス化され、基になるメディアが登録されます。 接続中の Web Receiver アプリケーションがセッション開始時に メディア名前空間をサポートしています。

RemoteMediaClient には、次のようにしてアクセスできます。 CastSession オブジェクトの getRemoteMediaClient メソッド。

v2 では、RemoteMediaPlayer に対して発行されるすべてのメディア リクエストは、 PendingResult コールバック経由で RemoteMediaPlayer.MediaChannelResult

CAF では、RemoteMediaClient に対して発行されたすべてのメディア リクエストに対して RemoteMediaClient.MediaChannelResult 経由: PendingResult プロセスの進行状況と最終的な結果を追跡するために リクエストできます。

v2 RemoteMediaPlayer は、メディアの変更に関する通知を送信します。 プレーヤーの状態をウェブ レシーバーで RemoteMediaPlayer.OnStatusUpdatedListener

CAF では、RemoteMediaClient が同等のコールバックを RemoteMediaClient.Listener 行うことができます。任意の数のリスナーを RemoteMediaClient: 複数の送信者コンポーネントが セッションに関連付けられている RemoteMediaClient の単一インスタンス。

v2 では、ユーザーを維持する負担を送信者アプリケーションが担う必要がありました インターフェースは、Web Receiver のメディア プレーヤーの状態と同期します。

CAF では、クラスは UIMediaController この責任のほとんどを担います

案内用のオーバーレイ

V2 では、導入用のオーバーレイ UI は提供されていません。

CAF ではカスタムビューを作成し IntroductoryOverlay キャスト アイコンがハイライト表示されます。

ミニ コントローラ

v2 では、送信側アプリにミニ コントローラをゼロから実装する必要があります。

CAF では、SDK に用意されているカスタムビュー、 MiniControllerFragment 追加するアクティビティのアプリ レイアウト ファイルに追加できます。 選択します。

通知とロック画面

v2 では、通知とロック画面用のコントローラは SDK から提供されていません。 その SDK では、 Android フレームワーク API。

CAF では、SDK には NotificationsOptions.Builder 通知とロック画面用のメディア コントロールを作成できます。 。通知とロック画面のコントロールは 新しい CastOptions CastContext の初期化時。

public CastOptions getCastOptions(Context context) {
    NotificationOptions notificationOptions = new NotificationOptions.Builder()
            .setTargetActivityClassName(VideoBrowserActivity.class.getName())
            .build();
    CastMediaOptions mediaOptions = new CastMediaOptions.Builder()
            .setNotificationOptions(notificationOptions)
            .build();

    return new CastOptions.Builder()
            .setReceiverApplicationId(context.getString(R.string.app_id))
            .setCastMediaOptions(mediaOptions)
            .build();
}

拡張コントローラ

v2 では、拡張コントローラをゼロから実装する必要があります。 。

CAF を使用すると、 UIMediaController ヘルパークラスを使用すると、独自の拡張された 表示されます。

CAF に事前構築済みの拡張コントローラ ウィジェットを追加 ExpandedControllerActivity これをアプリに追加できます。今後、 UIMediaController を使用してカスタム拡張コントローラを実装する。

音声フォーカス

v2 では、MediaSessionCompat を使用して音声フォーカスを管理する必要があります。

CAF では、音声フォーカスは自動的に管理されます。

デバッグログ

CAF にはロギング オプションがありません。

サンプルアプリ

Google には Codelab チュートリアル および サンプルアプリ CAF を使用することにしました