Cast SDK v2에서 Cast 애플리케이션 프레임워크 (CAF)로 Android Sender 앱 이전

Cast에서 Android 발신기 앱을 변환할 수 있는 절차는 다음과 같습니다. CAF 발신자로 전달되며 이는 CastContext 싱글톤입니다.

Cast CAF 발신자 SDK는 CastContext를 사용하여 사용자 대신 GoogleAPIClient를 관리합니다. CastContext는 수명 주기, 오류, 콜백을 자동으로 관리하므로 Cast 앱 개발을 간소화할 수 있습니다.

소개

  • CAF 발신자는 계속 Google Play 서비스의 일부로 배포됩니다. Android SDK Manager를 사용하여
  • Google Cast 디자인 체크리스트 (com.google.android.gms.cast.framework.*)
  • CAF 발신자는 Cast UX 요구사항을 준수하는 위젯을 제공합니다. v2에서는 UI 구성요소를 제공하지 않았으며 이를 구현해야 했습니다. 있습니다.
  • 더 이상 Cast API를 사용하기 위해 GoogleApiClient를 사용할 필요가 없습니다.
  • CAF Sender의 자막 방송은 v2와 유사합니다.

종속 항목

V2와 CAF가 지원 라이브러리와 Google Play에 동일한 종속 항목을 보유함 서비스 (9.2.0 이상)에 설명된 대로 사용 가능합니다. 지원 라이브러리 기능 가이드

CAF가 지원하는 최소 Android SDK 버전은 9 (Gingerbread)입니다.

초기화

CAF에서는 Cast 프레임워크에 명시적 초기화 단계가 필요합니다. 이 포드의 상태를 CastContext 이때 적절한 OptionsProvider 를 사용하여 웹 수신기 애플리케이션 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에서 검색 프로세스는 파일 시스템에 의해 자동으로 시작 및 중지되고 프레임워크가 포그라운드로 나와 백그라운드로 이동하면 각각 1개의 값으로 사용합니다. MediaRouteSelectorMediaRouter.Callback은 있습니다.

전송 버튼 및 전송 대화상자

v2에서와 같이 이러한 구성요소는 MediaRouter 지원 라이브러리를 사용하여 v3 지도에 통합할 수 있습니다.

전송 버튼은 여전히 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에서 기기 제어는 주로 프레임워크에 의해 처리됩니다. 발신자 애플리케이션이 애플리케이션을 실행하고 GoogleApiClient 이제 발신자와 웹 수신자 간의 상호작용이 표시됨 '세션'으로 정의합니다. 이 SessionManager 클래스는 세션 수명 주기를 처리하고 세션을 자동으로 시작 및 중지합니다. 사용자 동작에 대한 응답으로: 사용자가 Cast를 선택하면 세션이 시작됩니다. 기기에 표시되며 사용자가 '전송 중지'를 탭하면 종료됩니다. 전송 대화상자의 전송 대화상자 또는 발신기 앱 자체에서 종료되는 알림을 전송합니다. 발신자 수명 주기 이벤트를 알리기 위해 애플리케이션에 SessionManagerListener SessionManager로 교체합니다. SessionManagerListener 콜백은 모든 세션 수명 주기 이벤트에 대한 콜백 메서드를 제공합니다.

CastSession 클래스는 Cast 기기 세션을 나타냅니다. 클래스에는 이전에 v2에서 수행했던 기기 볼륨 및 음소거 상태 제어 Cast.CastApi의 메서드 사용

v2에서 Cast.Listener 다음과 같은 기기 상태 변경에 대한 알림을 제공하는 콜백입니다. 음소거 상태, 대기 상태 등이 있습니다.

CAF에서 볼륨/음소거 상태 변경 알림은 여전히 콜백을 통해 전달됩니다. Cast.Listener의 메서드 이러한 리스너는 CastSession 나머지 기기 상태 알림은 모두 CastStateListener 콜백 이러한 리스너는 CastSession에 등록됩니다. 반드시 연결된 프래그먼트, 활동 또는 앱이 실행될 때 여전히 리스너가 등록 취소되고 할 수 있습니다.

재연결 로직

v2와 마찬가지로 CAF는 v2의 네트워크 연결을 다시 설정하려고 일시적인 Wi-Fi 신호 손실 또는 기타 네트워크 오류로 인해 손실될 수 있습니다. 지금은 세션 수준에서 수행되며 세션이 '정지됨' 상태로 전환되고 상태가 되면 연결이 끊어지고 '연결됨' 상태로 다시 전환됩니다. 상태를 연결이 복원됩니다. 프레임워크는 이 API에 다시 연결하여 웹 수신기 애플리케이션을 연결하고 Cast 채널을 다시 연결하는 과정입니다.

또한 CAF는 자동 세션 재개를 추가하며 이 기능은 기본값이며 CastOptions 발신기 애플리케이션이 백그라운드로 전송되거나 애플리케이션이 종료되는 경우( 비정상 종료로 인해) 전송 세션이 진행 중일 때 발신자 애플리케이션이 해당 세션을 재개할 때 포그라운드로 돌아가거나 다시 실행되는 경우 이 작업은 포드 내에서 SessionManager - 등록된 모든 애플리케이션에서 적절한 콜백을 실행합니다. SessionManagerListener 인스턴스.

맞춤 채널 등록

v2에서는 맞춤 채널( Cast.MessageReceivedCallback) Cast.CastApi에 등록되어 있습니다. CAF에서는 맞춤 채널이 CastSession 인스턴스. 등록은 다음에서 수행할 수 있습니다. SessionManagerListener.onSessionStarted 콜백 메서드를 호출합니다. 미디어 애플리케이션의 경우 더 이상 Cast.CastApi.setMessageReceivedCallbacks를 통해 미디어 제어 채널을 등록합니다. 자세한 내용은 다음 섹션을 참고하세요.

미디어 제어

v2 클래스 RemoteMediaPlayer 지원 중단되었으므로 사용해서는 안 됩니다. CAF에서는 새로운 RemoteMediaClient 클래스에 포함되어 있으며 이는 보다 편리한 API에서 동일한 기능을 제공합니다. 그것은 이 객체를 명시적으로 초기화하거나 등록할 필요가 없습니다. 프레임워크 자동으로 객체를 인스턴스화하고 기본 미디어를 등록하고 웹 수신기 애플리케이션이 미디어 네임스페이스를 지원합니다

RemoteMediaClientCastSession 객체의 getRemoteMediaClient 메서드

v2에서 RemoteMediaPlayer에서 발행된 모든 미디어 요청은 PendingResult 콜백을 통한 RemoteMediaPlayer.MediaChannelResult

CAF에서 RemoteMediaClient에서 실행된 모든 미디어 요청은 RemoteMediaClient.MediaChannelResult 을 통해 PendingResult 이 콜백은 광고의 진행 상황과 최종 결과를 추적하는 데 사용할 수 있는 요청을 수행합니다.

v2 RemoteMediaPlayer는 미디어 변경사항에 관한 알림을 전송합니다. 플레이어 상태를 RemoteMediaPlayer.OnStatusUpdatedListener입니다.

CAF에서 RemoteMediaClientRemoteMediaClient.Listener 인터페이스에 추가되었습니다. 모든 리스너는 RemoteMediaClient를 사용하면 여러 발신자 구성요소가 세션과 연결된 RemoteMediaClient의 단일 인스턴스입니다.

v2에서 발신기 애플리케이션은 사용자를 보호해야 하는 인터페이스에 있어야 합니다.

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 튜토리얼샘플 앱 사용자 인증 정보를 얻을 수 있습니다