次の手順に沿って、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 では、検出プロセスの開始と停止は、
アプリがフォアグラウンドに移って、バックグラウンドに移動したときに、
できます。MediaRouteSelector
と MediaRouter.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
クラスがセッションのライフサイクルを処理し、セッションを自動的に開始および停止する
ユーザーの操作への応答: ユーザーがキャストを選択すると、セッションが開始されます。
デバイスに表示され、ユーザーが [キャストを停止] をタップすると終了します。
戻るボタンや、送信側アプリ自体が終了したときにも表示されます。送信者
セッション ライフサイクル イベントを通知したい場合は、
SessionManagerListener
を SessionManager
に置き換えます。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 を使用することにしました