Medya oturumu kullanma

Medya oturumları, ses veya video ile etkileşim için evrensel bir yol sunar oynatıcıya gitmiş olur. Android'e, uygulamada medya oynatıldığını bildirerek oynatmanın uygulamaya erişim yetkisi verilebilir. Medya oturumu ile entegrasyon, harici olarak medya oynatma reklamı yapmak ve oynatma komutlarını almak için bir uygulama Google Analytics 4'te tarama yapar. Bu kaynaklar fiziksel düğmeler (ör. oynatma düğmesi) mikrofonlu kulaklıktaki veya TV uzaktan kumandasındaki düğme) ya da dolaylı komutları (ör. "pause" (duraklatma) talimatını Google Asistan'a bağlama). Ardından medya oturumunda bu müzakerelere ait olduğu medya oynatıcıya uygulayan uygulamaya komutların geldiği yerde şeffaf hale gelir.

Yönettiği oynatıcının yanında bir medya oturumu gerçekleşir. Proje boyunca ve etkinliğin onCreate() yönteminde bir medya oturumu başlatın veya medya oturumuna ve ilişkili oynatıcısına sahip olan hizmet veya hizmet.

Medya oturumunu başlat

Yeni oluşturulan bir medya oturumunun özelliği yoktur. Şu adımları uygulayarak oturumu başlatmanız gerekir:

  • Medya oturumunun, medya denetleyicilerinden ve medya düğmelerinden geri çağırmalar alabilmesi için işaretler ayarlayın.
  • Bir PlaybackStateCompat örneği oluşturup başlatın ve oturuma atayın. Oynatma durumu oturum boyunca değişir. Bu nedenle, PlaybackStateCompat.Builder öğesini yeniden kullanılmak üzere önbelleğe almanızı öneririz.
  • Bir MediaSessionCompat.Callback örneği oluşturun ve bunu oturuma atayın (geri çağırmalarla ilgili daha fazla bilgiyi aşağıda bulabilirsiniz).

Şu öğenin onCreate() yönteminde bir medya oturumu oluşturup başlatmalısınız: etkinlik veya hizmeti kapsar.

Medya düğmelerinin çalışması için Uygulamanız yeni başlatıldığında (veya durdurulduğunda) PlaybackState özelliği medya düğmesinin gönderdiği amaçla eşleşen bir oynatma işlemi içermelidir. Bu sırasında ACTION_PLAY neden oturum durumuna atandı? başlatma. Daha fazla bilgi için bkz. Medyaya Yanıt Verme Düğmeler.

Oynatma durumunu ve meta verileri koruma

Bir medya oturumunun durumunu temsil eden iki sınıf vardır.

İlgili içeriği oluşturmak için kullanılan PlaybackStateCompat. sınıfı, oynatıcının mevcut çalışma durumunu tanımlar. Bu güvenlik özelliklerinden bazıları şunlardır:

  • Aktarım durumu (oynatma/duraklatma/arabelleğe alma vb.). Bkz. getState())
  • Hata kodu ve isteğe bağlı hata mesajı (geçerliyse). (Aşağıdaki getErrorCode() bölümüne bakın ve Durumlar ve hatalar bölümünü okuyun.)
  • Oynatıcının konumu
  • Mevcut durumda işlenebilecek geçerli denetleyici işlemleri

MediaMetadataCompat sınıf, oynatılan malzemeyi açıklıyor:

  • Sanatçının, albümün veya parçanın adı
  • Parçanın süresi
  • Kilit ekranında gösterilecek albüm posteri. Resim, maksimum boyutu 320x320 dp olan bir bit eşlemdir (daha büyükse küçültülür).
  • Posterin daha büyük bir sürümüne işaret eden ContentUris örneği

Oynatıcı durumu ve meta veriler, medya oturumunun ömrü boyunca değişebilir. Durum veya meta veri her değiştiğinde, PlaybackStateCompat.Builder() veya MediaMetadataCompat.Builder() olarak her bir sınıf için ilgili oluşturucuyu kullanmanız ve ardından şunu çağırarak yeni örneği medya oturumuna iletmeniz gerekir: setPlaybackState() veya setMetaData(). Bu sık yapılan işlemlerden kaynaklanan toplam bellek tüketimini azaltmak için derleyicileri bir kez oluşturmak ve oturum süresince tekrar kullanmak iyi bir fikirdir.

Durumlar ve hatalar

PlaybackState öğesinin oturumun oynatma durumu (getState()) ve gerektiğinde ilişkili bir hata kodu (getErrorCode()). Hatalar kritik veya önemli olmayabilir:

Oynatma kesintiye uğradığında önemli bir hata oluşturmalısınız: aktarım durumunu STATE_ERROR konumuna getirin ve setErrorMessage(int, CharSequence) ile ilişkili bir hata belirtin. Oynatma işlemi hata nedeniyle engellendiği sürece PlaybackState devam edecektir. STATE_ERROR değerini ve hatayı bildirmek için kullanılır.

Uygulamanız bir isteği işleyemediğinde onu oynatmaya devam edebildiğinde onarılabilir bir hata oluşur: Aktarım "normal" durumda kalıyor durumu (STATE_PLAYING gibi) ancak PlaybackState bir hata kodu içeriyor. Örneğin, son şarkı çalıyorsa ve kullanıcı bir sonraki şarkıya atlamak isterse, oynatma devam edebilir, ancak ERROR_CODE_END_OF_QUEUE hata koduyla yeni bir PlaybackState oluşturmanız gerekir ardından setPlaybackState() numaralı telefonu arayın. Oturuma eklenen medya denetleyicileri geri çağırmayı alır onPlaybackStateChanged() ve kullanıcıya ne olduğunu açıklayın. Önemli olmayan bir hata, oluştuğu anda yalnızca bir kez bildirilmelidir. Oturumun bir sonraki güncellemesinde PlaybackState, aynı önemli olmayan hatayı tekrar ayarlamaz (hata yeni bir isteğe yanıt olarak oluşmadığı sürece).

Medya oturumu kilit ekranları

Android 4.0 (API düzeyi 14) sürümünden itibaren sistem, oynatma durumu ve meta veriler. Kilit ekranında medya denetimleri bu şekilde gösterilir ve çizim. Bu davranış, reklamverenin Android sürümü.

Albüm kapağı

Android 4.0 (API düzeyi 14) ile Android 10 (API düzeyi 29) arasındaki sürümlerde arka plan albüm kapağınız görüntülenir (yalnızca medya oturumunda meta veri bir arka plan bit eşlemi içerir.

Ulaşım denetimleri

Android 4.0 (API düzeyi 14) ile Android 4.4 (API düzeyi 19) arasındaki sürümlerde bir medya oturumu etkin olduğunda ve medya oturumu meta verileri bir arka plan bit eşlemi içerdiğinde kilit ekranı, aktarım denetimlerini otomatik olarak gösterir.

Android 5.0 (API düzeyi 21) veya sonraki sürümlerde sistem, aktarım özelliğini sağlamaz ve kontrol düğmelerini kullanabilirsiniz. Bunun yerine bir MediaStyle bildirim aktarma kontrollerini görüntüleyin.

Özel işlem ekleyin

Medya uygulamaları özel işlemler tanımlayabilir; örneğin, beğenme, beğenme veya 30 saniye geri sarar. Özel işlemlerde tamamen yeni bir davranış uygulanır. Yapılması gerekenler standart aktarım denetimi işlemlerinden birinin yerine özel bir işlem kullanmaması şurada tanımlandığı: PlaybackStateCompat değeri.

addCustomAction() ile özel işlemler ekleyin. Aşağıdaki örnekte beğenme işlemi için nasıl kontrol ekleneceği gösterilmektedir:

Kotlin

stateBuilder.addCustomAction(
        PlaybackStateCompat.CustomAction.Builder(
                CUSTOM_ACTION_THUMBS_UP,
                resources.getString(R.string.thumbs_up),
                thumbsUpIcon
        ).run {
            setExtras(customActionExtras)
            build()
        }
)

Java

stateBuilder.addCustomAction(new PlaybackStateCompat.CustomAction.Builder(
    CUSTOM_ACTION_THUMBS_UP, resources.getString(R.string.thumbs_up), thumbsUpIcon)
    .setExtras(customActionExtras)
    .build());

Tam bir örnek için Universal Music Player'a bakın.

İşleme onCustomAction() ile yanıt verirsiniz.

Kotlin

override fun onCustomAction(action: String, extras: Bundle?) {
    when(action) {
        CUSTOM_ACTION_THUMBS_UP -> {
            ...
        }
    }
}

Java

@Override
public void onCustomAction(@NonNull String action, Bundle extras) {
    if (CUSTOM_ACTION_THUMBS_UP.equals(action)) {
        ...
    }
}

Ayrıca bkz. Universal Müzik Oynatıcı.

Medya oturumu geri çağırmaları

Ana medya oturumu geri çağırma yöntemleri şunlardır: onPlay(), onPause() ve onStop(). Oynatıcınızı kontrol eden kodu buraya eklersiniz.

Oturumun geri çağırmasını örnek gösterdiğiniz ve çalışma zamanında (onCreate() içinde) ayarladığınızdan, uygulamanız farklı oynatıcılar kullanan alternatif geri çağırmalar tanımlayabilir ve cihaza ve/veya sistem seviyesine bağlı olarak uygun geri çağırma/oynatıcı kombinasyonunu seçebilir. Uygulamanın geri kalanını değiştirmeden oynatıcıyı değiştirebilirsiniz. Örneğin, Android 4.1 (API düzeyi 16) veya sonraki sürümlerde çalışırken ExoPlayer'ı, daha eski sistemlerde de MediaPlayer'ı kullanabilirsiniz.

Geri çağırma işlevleri, oynatıcıyı kontrol etmenin ve medya oturumu durumu geçişlerini yönetmenin yanı sıra uygulamanızın özelliklerini etkinleştirip devre dışı bırakmanın yanı sıra diğer uygulamalar ve cihaz donanımıyla etkileşim kurma şeklini kontrol eder. (bkz. Ses Çıkışını Kontrol Etme).

Medya oturumu geri çağırma yöntemlerinin uygulanma şekli, uygulamanızın yapısına bağlıdır. ses uygulamaları ve video uygulamaları, geri çağırmaların her bir uygulama türü için nasıl uygulanması gerektiğini açıklama.