ATV Uygulaması ile Connect'i yayınlayın

googlecastnew500.png

Bu kod laboratuvarı, mevcut bir Android TV uygulamasını nasıl değiştireceğinizi öğretir, böylece mevcut Cast gönderen uygulamalarınız içerik yayınlayabilir ve Android TV uygulamasıyla iletişim kurabilir.

Google Cast ve Cast Connect nedir?

Google Cast, kullanıcıların bir mobil cihazdan TV'ye içerik yayınlamasına olanak tanır. Tipik bir Google Cast oturumu iki bileşenden oluşur - bir gönderen ve bir alıcı uygulaması. Mobil uygulama veya Youtube.com gibi web sitesi gibi gönderen uygulamalar, bir Cast alıcı uygulamasının oynatılmasını başlatır ve kontrol eder. Yayın alıcı uygulamaları, Chromecast ve Android TV cihazlarında çalışan HTML 5 uygulamalarıdır.

Bir Cast oturumundaki durumun neredeyse tamamı alıcı uygulamasında saklanır. Durum güncellendiğinde, örneğin yeni bir medya öğesi yüklenirse, tüm gönderenlere bir medya durumu yayınlanır. Bu yayınlar, Cast oturumunun mevcut durumunu içerir. Gönderen uygulamalar, kullanıcı arayüzlerinde oynatma bilgilerini görüntülemek için bu medya durumunu kullanır.

Cast Connect, Android TV uygulamanızın bir alıcı görevi görmesiyle bu altyapının üzerine kurulur. Cast Connect kitaplığı, Android TV uygulamanızın mesajları almasına ve medya durumunu bir yayın alıcı uygulaması gibi yayınlamasına olanak tanır.

Ne inşa edeceğiz?

Bu kod laboratuvarını tamamladığınızda, videoları bir Android TV uygulamasına yayınlamak için Cast gönderen uygulamalarını kullanabileceksiniz. Android TV uygulaması, gönderen uygulamalarla Cast protokolü aracılığıyla da iletişim kurabilir.

Ne öğreneceksin

  • Cast Connect kitaplığını örnek bir ATV uygulamasına ekleme.
  • Bir Cast göndericisi nasıl bağlanır ve ATV uygulaması nasıl başlatılır.
  • Bir Cast gönderen uygulamasından ATV uygulamasında medya oynatma nasıl başlatılır.
  • Medya durumu ATV uygulamasından Cast gönderen uygulamalarına nasıl gönderilir.

Neye ihtiyacın olacak

Tüm örnek kodu bilgisayarınıza indirebilirsiniz ...

Kaynak Kodunu İndir

ve indirilen zip dosyasını açın.

İlk olarak, tamamlanmış örnek uygulamanın neye benzediğini görelim. Android TV uygulaması Leanback kullanıcı arayüzünü ve temel bir video oynatıcıyı kullanır. Kullanıcı, bir listeden bir video seçebilir ve ardından seçildiğinde TV'de oynatılabilir. Eşlik eden mobil gönderici uygulamasıyla, bir kullanıcı Android TV uygulamasına bir video da yayınlayabilir.

f9f98aa234e84bae.png

Geliştirici cihazlarını kaydettirin

Uygulama geliştirmeye yönelik Cast Connect özelliklerini etkinleştirmek için, Android TV cihazının Cast Developer Console'da kullanacağınız yerleşik Chromecast'in seri numarasını kaydetmeniz gerekir. Seri numarasını , Android TV'nizde Ayarlar> Cihaz Tercihleri> Chromecast yerleşik> Seri numarası'na giderek bulabilirsiniz. Bunun fiziksel cihazınızın seri numarasından farklı olduğunu ve yukarıda açıklanan yöntemden alınması gerektiğini unutmayın.

f74dfe19bc459b76.png

Kayıt olmadan, Cast Connect yalnızca güvenlik nedeniyle Google Play Store'dan yüklenen uygulamalar için çalışacaktır. Kayıt işlemini başlattıktan 15 dakika sonra cihazınızı yeniden başlatın.

Android gönderen uygulamasını yükleyin

Mobil cihazdan istek göndermeyi test etmek için Cast Videos adlı basit bir gönderen uygulaması sağladık. APK'yi yüklemek için ADB'den yararlanacağız. Cast Videos'un farklı bir sürümünü zaten yüklediyseniz, devam etmeden önce lütfen bu sürümü cihazda bulunan tüm profillerden kaldırın.

  1. Android telefonunuzda geliştirici seçeneklerini ve USB hata ayıklamayı etkinleştirin .
  2. Android telefonunuzu geliştirme bilgisayarınıza bağlamak için bir USB veri kablosu takın.
  3. Android telefonunuza mobile-sender.apk yükleyin.

93e35a0f0332f290.png

  1. Cast Videos gönderen uygulamasını Android telefonunuzda bulabilirsiniz. e29d89df484d9661.png

d6a0435ec3bac0af.png

Android TV uygulamasını yükleyin

Aşağıdaki talimatlar, tamamlanan örnek uygulamanın Android Studio'da nasıl açılacağını ve çalıştırılacağını açıklamaktadır:

  1. Karşılama ekranında Projeyi İçe Aktar'ı veya Dosya> Yeni> Projeyi İçe Aktar ... menü seçeneklerini seçin.
  2. Seçin android_studio_folder.png örnek kod klasöründen app-done dizini ve Tamam'ı tıklayın.
  3. Dosya> 1791b5212a8947d.png Gradle Files ile Projeyi Senkronize Edin .
  4. Android TV cihazınızda geliştirici seçeneklerini ve USB hata ayıklamasını etkinleştirin .
  5. ADB, Android TV cihazınıza bağlanırsa, cihaz Android Studio'da gösterilmelidir. 7bcf00bfb6877ad5.png
  6. Tıkla execute.png Çalıştır düğmesi, birkaç saniye sonra Cast Connect Codelab adlı ATV uygulamasının göründüğünü görmelisiniz .

Atv uygulamasıyla Cast Connect oynayalım

  1. Android TV Ana Ekranına gidin.
  2. Android telefonunuzdan Cast Videos gönderen uygulamasını açın. Yayın düğmesine tıklayın f77992b2cf0422a2.png ve ATV cihazınızı seçin.
  3. Cast Connect Codelab ATV uygulaması ATV'nizde başlatılacak ve göndericinizdeki Cast düğmesi bağlı olduğunu gösterecek 303287388679d79b.png .
  4. ATV uygulamasından bir video seçin ve video ATV'nizde oynamaya başlayacaktır.
  5. Cep telefonunuzda, gönderen uygulamanızın alt kısmında artık bir mini kumanda görünür. Oynatmayı kontrol etmek için oynat / duraklat düğmesini kullanabilirsiniz.
  6. Cep telefonundan bir video seçin ve oynatın. Video, ATV'nizde oynamaya başlayacak ve genişletilmiş kumanda, mobil göndericinizde görüntülenecektir.
  7. Telefonunuzu kilitleyin ve kilidini açtığınızda, medya oynatmayı kontrol etmek veya yayını durdurmak için kilit ekranında bir bildirim görmelisiniz.

a20257e816c913a.png

Tamamlanan uygulamanın Cast Connect entegrasyonunu doğruladığımıza göre, indirdiğiniz başlangıç ​​uygulamasına Cast Connect desteği eklememiz gerekiyor. Artık Android Studio'yu kullanarak başlangıç ​​projesinin üzerine inşa etmeye hazırsınız:

  1. Karşılama ekranında Projeyi İçe Aktar'ı veya Dosya> Yeni> Projeyi İçe Aktar ... menü seçeneklerini seçin.
  2. Seçin android_studio_folder.png örnek kod klasöründen app-start dizinini seçin ve Tamam'a tıklayın.
  3. Dosya> 1791b5212a8947d.png Gradle Files ile Projeyi Senkronize Edin .
  4. ATV cihazını seçin ve execute.png Uygulamayı çalıştırmak ve kullanıcı arayüzünü keşfetmek için Çalıştır düğmesi. 7bcf00bfb6877ad5.png

f9f98aa234e84bae.png

Uygulama tasarımı

Uygulama, kullanıcının göz atması için bir video listesi sağlar. Kullanıcılar Android TV'de oynatmak üzere bir video seçebilir. Uygulama iki ana etkinlikten oluşur: MainActivity ve PlaybackActivity .

Ana aktivite

Bu aktivite bir Fragment ( MainFragment ) içerir. Videoların listesi ve ilişkili meta verileri, MovieList sınıfında yapılandırılır ve setupMovies() yöntemi, Movie nesnelerinin bir listesini oluşturmak için çağrılır.

Bir Movie nesnesi, başlığı, açıklaması, küçük resimleri ve video url'si olan bir video varlığını temsil eder. Her Movie nesnesi, başlık ve stüdyo ile video küçük resmini sunmak için bir CardPresenter bağlıdır ve ArrayObjectAdapter iletilir.

Bir öğe seçildiğinde, karşılık gelen Movie nesnesi PlaybackActivity iletilir.

PlaybackActivity

Bu aktivite içeren bir Parça ( PlaybackVideoFragment bir barındıran) VideoView ile ExoPlayer Android TV'de video oynatmak için kullanıcı seçilen videonun açıklamasını göstermek, bazı medya kontrolleri ve bir metin alanı ve izin verir. Kullanıcı, videoları oynatmak / duraklatmak veya oynatmak için uzaktan kumandayı kullanabilir.

Cast Connect'in Ön Koşulları

Cast Connect, ATV uygulamanızın AndroidX ad alanını kullanacak şekilde güncellenmesini gerektiren yeni Google Play Hizmetleri sürümlerini kullanır.

Android TV uygulamanızda Cast Connect'i desteklemek için, bir medya oturumundan etkinlikler oluşturmanız ve desteklemeniz gerekir. Cast Connect kitaplığı, medya oturumunun durumuna göre medya durumu oluşturur. Medya oturumunuz, bir gönderenden duraklatma gibi belirli mesajları aldığında sinyal vermek için Cast Connect kitaplığı tarafından da kullanılır.

Bağımlılıklar

Uygulama build.gradle dosyasını gerekli kitaplık bağımlılıklarını içerecek şekilde güncelleyin:

dependencies {
    ....

    // Cast Connect libraries and dependencies
    implementation 'com.google.android.gms:play-services-cast-tv:17.0.0'
    implementation 'com.google.android.gms:play-services-cast:19.0.0'
}

Hatasız proje derlemelerini onaylamak için projeyi senkronize edin.

Başlatma

CastReceiverContext , tüm Cast etkileşimlerini koordine etmek için tek bir nesnedir. Sen uygulamalıdır ReceiverOptionsProvider sağlamak için bir arayüz CastReceiverOptions zaman CastReceiverContext başlatılır.

CastReceiverOptionsProvider.java dosyasını oluşturun ve aşağıdaki sınıfı projeye ekleyin:

package com.google.sample.cast.castconnect;

import android.content.Context;
import com.google.android.gms.cast.tv.CastReceiverOptions;
import com.google.android.gms.cast.tv.ReceiverOptionsProvider;

public class CastReceiverOptionsProvider implements ReceiverOptionsProvider {
    @Override
    public CastReceiverOptions getOptions(Context context) {
        return new CastReceiverOptions.Builder(context)
                .setStatusText("Cast Connect Codelab")
                .build();
    }
}

Ardından, app AndroidManifest.xml dosyasının <application> etiketi içinde alıcı seçenekleri sağlayıcısını belirtin:

<application>
  ...

  <meta-data
    android:name="com.google.android.gms.cast.tv.RECEIVER_OPTIONS_PROVIDER_CLASS_NAME"
    android:value="com.google.sample.cast.castconnect.CastReceiverOptionsProvider" />
</application>

Cast göndericinizden ATV uygulamanıza bağlanmak için başlatmak istediğiniz bir aktivite seçin. Bu kod laboratuarında, bir Cast oturumu başladığında uygulamanın MainActivity başlatacağız. AndroidManifest.xml dosyasında, MainActivity başlatma amacı filtresini MainActivity .

<activity android:name=".MainActivity">
  ...
  <intent-filter>
    <action android:name="com.google.android.gms.cast.tv.action.LAUNCH" />
    <category android:name="android.intent.category.DEFAULT" />
  </intent-filter>
</activity>

Alıcı Bağlam Yaşam Döngüsü

Sen başlamalıdır CastReceiverContext uygulama başlatıldığında ve durdurma CastReceiverContext uygulama arka plana taşındığında. CastReceiverContext.start() ve CastReceiverContext.stop() çağrılarını yönetmek için androidx.lifecycle kitaplığındaki LifecycleObserver kullanmanızı öneririz.

MyApplication.java açın, uygulamanın onCreate yönteminde initInstance() çağırarak yayın bağlamını initInstance() . AppLifeCycleObserver sınıfında, uygulama devam ettirildiğinde CastReceiverContext start() ve uygulama duraklatıldığında onu stop() :

package com.google.sample.cast.castconnect;

...

import com.google.android.gms.cast.tv.CastReceiverContext;

public class MyApplication extends Application {

    private static final String LOG_TAG = "MyApplication";

    @Override
    public void onCreate() {
        super.onCreate();
        CastReceiverContext.initInstance(this);
        ProcessLifecycleOwner.get().getLifecycle().addObserver(new AppLifecycleObserver());
    }

    public static class AppLifecycleObserver implements DefaultLifecycleObserver {
        @Override
        public void onResume(@NonNull LifecycleOwner owner) {
            Log.d(LOG_TAG, "onResume");
            CastReceiverContext.getInstance().start();
        }

        @Override
        public void onPause(@NonNull LifecycleOwner owner) {
            Log.d(LOG_TAG, "onPause");
            CastReceiverContext.getInstance().stop();
        }
    }
}

MediaSession'ı MediaManager'a Bağlama

MediaManager , CastReceiverContext singletonunun bir özelliğidir, medya durumunu yönetir, yükleme amacını yönetir, göndericilerden gelen medya ad alanı mesajlarını medya komutlarına çevirir ve medya durumunu gönderenlere geri gönderir.

Bir MediaSession oluşturduğunuzda, mevcut MediaSession belirtecini MediaManager da sağlamanız gerekir, böylece komutları nereye göndereceğini ve medya oynatma durumunu MediaSession bilir. Belirteci MediaManager ayarlamadan önce MediaSession başlatıldığından emin olun.

import com.google.android.gms.cast.tv.CastReceiverContext;
...

public class PlaybackVideoFragment extends VideoSupportFragment {

    private CastReceiverContext castReceiverContext;
    ...

    private void initializePlayer() {
        if (mPlayer == null) {
            ...
            mMediaSession = new MediaSessionCompat(getContext(), LOG_TAG);
            ...

            castReceiverContext = CastReceiverContext.getInstance();
            if (castReceiverContext != null) {
                MediaManager mediaManager = castReceiverContext.getMediaManager();
                mediaManager.setSessionCompatToken(mMediaSession.getSessionToken());
            }
        }
    }
}

Etkin olmayan oynatma nedeniyle MediaSession serbest bıraktığınızda, MediaManager boş bir belirteç belirlemelisiniz:

private void releasePlayer() {
    if (mMediaSession != null) {
        mMediaSession.release();
    }
    if (castReceiverContext != null) {
        MediaManager mediaManager = castReceiverContext.getMediaManager();
        mediaManager.setSessionCompatToken(null);
    }
    ...
}

Örnek uygulamayı çalıştıralım

Tıkla execute.png Uygulamayı ATV cihazınıza dağıtmak için Çalıştır düğmesi, uygulamayı kapatın ve ATV Ana Ekranına dönün. Göndereninizden Yayınla düğmesini tıklayın f77992b2cf0422a2.png ve ATV cihazınızı seçin. ATV uygulamasının ATV cihazında başlatıldığını ve Yayın düğmesi durumunun bağlı olduğunu göreceksiniz.

Load komutu, geliştirici konsolunda tanımladığınız paket adıyla bir amaç aracılığıyla gönderilir. Bu amacı alacak hedef etkinliği belirtmek için Android TV uygulamanıza aşağıdaki önceden tanımlanmış amaç filtresini eklemeniz gerekir. AndroidManifest.xml dosyasında, yükleme amacı filtresini PlayerActivity :

<activity android:name="com.google.sample.cast.castconnect.PlaybackActivity"
          android:launchMode="singleTask">
  <intent-filter>
     <action android:name="com.google.android.gms.cast.tv.action.LOAD"/>
     <category android:name="android.intent.category.DEFAULT" />
  </intent-filter>
</activity>

Android TV'de Yük Taleplerini Yönetme

Artık etkinlik, bir yükleme isteği içeren bu amacı alacak şekilde yapılandırıldığına göre, onu halletmemiz gerekecek.

Uygulama, etkinlik başladığında processIntent adlı özel bir yöntemi çağırır. Bu yöntem, gelen amaçları işleme mantığını içerir. Bir yükleme talebini işlemek için bu yöntemi değiştireceğiz ve MediaManager örneğinin onNewIntent yöntemini çağırarak daha fazla işlenmek üzere niyet göndereceğiz. MediaManager , amacın bir yükleme isteği olduğunu algılarsa, MediaLoadRequestData nesnesini amaçtan MediaLoadCommandCallback.onLoad() ve MediaLoadCommandCallback.onLoad() çağırır. Yükleme isteğini içeren amacı işlemek için PlaybackVideoFragment içindeki processIntent yöntemini değiştirin:

public void processIntent(Intent intent) {
    MediaManager mediaManager = CastReceiverContext.getInstance().getMediaManager();
    // Pass intent to Cast SDK
    if (mediaManager.onNewIntent(intent)) {
        return;
    }

    // Clears all overrides in the modifier.
    mediaManager.getMediaStatusModifier().clear();

    // If the SDK doesn't recognize the intent, handle the intent with your own logic.
    ...
}

Daha sonra, MediaManager tarafından çağrılan onLoad() yöntemini geçersiz MediaLoadCommandCallback olan MediaLoadCommandCallback soyut sınıfını genişleteceğiz. Bu yöntem, yükleme isteğinin verilerini alır ve bunu bir Movie nesnesine dönüştürür. Film, dönüştürüldükten sonra yerel oyuncu tarafından oynatılır. MediaManager daha sonra MediaLoadRequest ile güncellenir ve MediaStatus bağlı göndericilere yayınlar. PlaybackVideoFragment içinde MyMediaLoadCommandCallback adlı iç içe geçmiş bir özel sınıf oluşturun:

private class MyMediaLoadCommandCallback extends MediaLoadCommandCallback {
    @Override
    public Task<MediaLoadRequestData> onLoad(String senderId, MediaLoadRequestData mediaLoadRequestData) {
        Toast.makeText(getActivity(), "onLoad()", Toast.LENGTH_SHORT).show();

        if (mediaLoadRequestData == null) {
            // Throw MediaException to indicate load failure.
            return Tasks.forException(new MediaException(
                    new MediaError.Builder()
                            .setDetailedErrorCode(MediaError.DetailedErrorCode.LOAD_FAILED)
                            .setReason(MediaError.ERROR_REASON_INVALID_REQUEST)
                            .build()));
        }

        return Tasks.call(() -> {
            play(convertLoadRequestToMovie(mediaLoadRequestData));

            // Update media metadata and state
            MediaManager mediaManager = castReceiverContext.getMediaManager();
            mediaManager.setDataFromLoad(mediaLoadRequestData);
            mediaManager.broadcastMediaStatus();

            // Return the resolved MediaLoadRequestData to indicate load success.
            return mediaLoadRequestData;
        });
    }
}

private Movie convertLoadRequestToMovie(MediaLoadRequestData mediaLoadRequestData) {
    if (mediaLoadRequestData == null) {
        return null;
    }
    MediaInfo mediaInfo = mediaLoadRequestData.getMediaInfo();
    if (mediaInfo == null) {
        return null;
    }

    String videoUrl = mediaInfo.getContentId();
    if (mediaInfo.getContentUrl() != null) {
        videoUrl = mediaInfo.getContentUrl();
    }

    MediaMetadata metadata = mediaInfo.getMetadata();
    Movie movie = new Movie();
    movie.setVideoUrl(videoUrl);
    if (metadata != null) {
        movie.setTitle(metadata.getString(MediaMetadata.KEY_TITLE));
        movie.setDescription(metadata.getString(MediaMetadata.KEY_SUBTITLE));
        movie.setCardImageUrl(metadata.getImages().get(0).getUrl().toString());
    }
    return movie;
}

Geri Çağırma tanımlandığına göre, onu MediaManager kaydetmemiz gerekiyor. Geri arama, MediaManager.onNewIntent() çağrılmadan önce kaydedilmelidir. Oynatıcı başlatıldığında setMediaLoadCommandCallback ekleyin:

private void initializePlayer() {
    if (mPlayer == null) {
        ...
        mMediaSession = new MediaSessionCompat(getContext(), LOG_TAG);
        ...

        castReceiverContext = CastReceiverContext.getInstance();
        if (castReceiverContext != null) {
            MediaManager mediaManager = castReceiverContext.getMediaManager();
            mediaManager.setSessionCompatToken(mMediaSession.getSessionToken());
            mediaManager.setMediaLoadCommandCallback(new MyMediaLoadCommandCallback());
        }
    }
}

Örnek uygulamayı çalıştıralım

Tıkla execute.png Uygulamayı ATV cihazınıza dağıtmak için Çalıştır düğmesi. Göndereninizden Yayınla düğmesini tıklayın f77992b2cf0422a2.png ve ATV cihazınızı seçin. ATV uygulaması, ATV cihazında başlatılacaktır. Mobil cihazda bir video seçin, video ATV'de oynamaya başlayacaktır. Telefonunuzda oynatma kontrollerine sahip olduğunuz bir bildirim alıp almadığınızı kontrol edin. Duraklat gibi kontrolleri kullanmayı deneyin, ATV cihazındaki video duraklatılmalıdır.

Mevcut uygulama artık oynat, duraklat ve ara gibi bir medya oturumuyla uyumlu temel komutları desteklemektedir. Ancak, medya oturumunda kullanılamayan bazı Yayın kontrol komutları vardır. Bu Cast kontrol komutlarını desteklemek için bir MediaCommandCallback kaydetmeniz gerekir.

Oynatıcı başlatıldığında setMediaCommandCallback kullanarak MediaManager örneğine MyMediaCommandCallback ekleyin:

private void initializePlayer() {
        ...

        castReceiverContext = CastReceiverContext.getInstance();
        if (castReceiverContext != null) {
            MediaManager mediaManager = castReceiverContext.getMediaManager();
            ...
            mediaManager.setMediaCommandCallback(new MyMediaCommandCallback());
        }
}

Bu Cast kontrol komutlarını desteklemek için onQueueUpdate() gibi yöntemleri geçersiz kılmak için MyMediaCommandCallback sınıfı oluşturun:

private class MyMediaCommandCallback extends MediaCommandCallback {
        @Override
        public Task<Void> onQueueUpdate(String senderId, QueueUpdateRequestData queueUpdateRequestData) {
            Toast.makeText(getActivity(), "onQueueUpdate()", Toast.LENGTH_SHORT).show();

            // Queue Prev / Next
            if (queueUpdateRequestData.getJump() != null) {
                Toast.makeText(getActivity(),
                        "onQueueUpdate(): Jump = " + queueUpdateRequestData.getJump(),
                        Toast.LENGTH_SHORT).show();
            }

            return super.onQueueUpdate(senderId, queueUpdateRequestData);
        }
}

Medya Durumunu Değiştirme

Cast Connect, medya oturumundan temel medya durumunu alır. Gelişmiş özellikleri desteklemek için, Android TV uygulamanız bir MediaStatusModifier aracılığıyla ek durum özelliklerini belirleyebilir ve geçersiz kılabilir. MediaStatusModifier her zaman MediaSession ayarladığınız CastReceiverContext .

Örneğin, onLoad geri çağırma tetiklendiğinde setMediaCommandSupported belirtmek için:

private class MyMediaLoadCommandCallback extends MediaLoadCommandCallback {
    @Override
    public Task<MediaLoadRequestData> onLoad(String senderId, MediaLoadRequestData mediaLoadRequestData) {
        Toast.makeText(getActivity(), "onLoad()", Toast.LENGTH_SHORT).show();

        ... 

        return Tasks.call(() -> {
            play(convertLoadRequestToMovie(mediaLoadRequestData));

            // Update media metadata and state
            MediaManager mediaManager = castReceiverContext.getMediaManager();
            mediaManager.setDataFromLoad(mediaLoadRequestData);

            // Use MediaStatusModifier to provide additional information for Cast senders.
            mediaManager.getMediaStatusModifier()
                        .setMediaCommandSupported(MediaStatus.COMMAND_QUEUE_NEXT, true)
                        .setIsPlayingAd(false);

            mediaManager.broadcastMediaStatus();

            // Return the resolved MediaLoadRequestData to indicate load success.
            return mediaLoadRequestData;
        });
    }
}

Göndermeden Önce MediaStatus'u Yakalamak

Web alıcısı SDK'sının MessageInterceptor benzer şekilde, bağlı gönderenlere yayınlanmadan önce MediaStatus'unuzda ek değişiklikler yapmak için MediaManager bir MediaStatusWriter belirtebilirsiniz.

Örneğin, mobil göndericilere göndermeden önce MediaStatus özel veriler ayarlayabilirsiniz:

MediaManager mediaManager = castReceiverContext.getMediaManager();
...

// Use MediaStatusInterceptor to process the MediaStatus before sending out.
mediaManager.setMediaStatusInterceptor(mediaStatusWriter -> {
    try {
        mediaStatusWriter.setCustomData(new JSONObject("{myData: 'CustomData'}"));
    } catch (JSONException e) {
        e.printStackTrace();
    }
});

Artık bir Android TV uygulamasının Cast Connect Kitaplığı'nı kullanarak nasıl Cast için etkinleştirileceğini biliyorsunuz.

Daha fazla ayrıntı için geliştirici kılavuzuna bir göz atın: https://developers.google.com/cast/docs/android_tv_receiver