İçerik kaydını destekleme

TV giriş hizmetleri, kullanıcının zaman değiştirme API'lerini kullanarak kanal oynatmayı duraklatmasını ve devam ettirmesini sağlar. Android 7.0, kullanıcının kayıtlı birden fazla oturumu kaydetmesine olanak tanıyarak zaman değiştirme özelliğini daha da geliştirmiştir.

Kullanıcılar, kayıtları önceden planlayabilir veya bir programı izlerken kayıt başlatabilir. Sistem bir kaydı kaydettikten sonra kullanıcı sistem TV uygulamasını kullanarak kayda göz atabilir, kaydı yönetebilir ve oynatabilir.

TV giriş hizmetiniz için kayıt işlevi sağlamak istiyorsanız uygulamanızın kayıt özelliğini desteklediğini sisteme bildirmeniz, programları kaydetme özelliğini uygulamanız, kayıt sırasında oluşan hataları işleyip iletmeniz ve kaydedilen oturumlarınızı yönetmeniz gerekir.

Kayıt desteğini belirtin

Sisteme TV giriş hizmetinizin kaydı desteklediğini bildirmek için hizmet meta verileri XML dosyanızdaki android:canRecord özelliğini true olarak ayarlayın:

<tv-input xmlns:android="http://schemas.android.com/apk/res/android"
  android:canRecord="true"
  android:setupActivity="com.example.sampletvinput.SampleTvInputSetupActivity" />

Hizmet meta veri dosyası hakkında daha fazla bilgi için Manifest'te TV giriş hizmetinizi tanımlama bölümüne bakın.

Alternatif olarak, aşağıdaki adımları izleyerek kodunuzda kayıt desteğini belirtebilirsiniz:

  1. TV giriş hizmeti onCreate() yönteminizde, TvInputInfo.Builder sınıfını kullanarak yeni bir TvInputInfo nesnesi oluşturun.
  2. Yeni TvInputInfo nesnesini oluştururken hizmetinizin kaydı desteklediğini belirtmek için build() çağrısından önce setCanRecord(true) yöntemini çağırın.
  3. TvInputManager.updateTvInputInfo() yöntemini çağırarak TvInputInfo nesnenizi sisteme kaydedin.

Oturum kaydetme

TV giriş hizmetiniz kayıt işlevini desteklediğini kaydettikten sonra sistem, uygulamanızın kayıt uygulamasına erişmesi gerektiğinde TvInputService.onCreateRecordingSession() yönteminizi çağırır. Kendi TvInputService.RecordingSession alt sınıfınızı uygulayın ve onCreateRecordingSession() geri çağırması tetiklendiğinde geri döndürün. Bu alt sınıf; doğru kanal verilerine geçmekten, istenen verileri kaydetmekten ve kayıt durumu ile hatalarını sisteme iletmekten sorumludur.

Sistem, bir kanal URI'si içinde ileterek RecordingSession.onTune() çağrısı yaptığında URI'nın belirttiği kanala ayarlayın. notifyTuned() numaralı telefonu arayarak uygulamanın istediğiniz kanalı ayarladığını sisteme bildirin. Uygulamanız doğru kanala ayarlayamıyorsa notifyError() numaralı telefonu arayın.

Sistem daha sonra RecordingSession.onStartRecording() geri çağırmasını çağırır. Uygulamanız hemen kayda başlamalıdır. Sistem bu geri çağırmayı çağırdığında, kaydedilmek üzere olan program hakkında bilgi içeren bir URI sağlayabilir. Kayıt tamamlandığında bu verileri RecordedPrograms veri tablosuna kopyalayın.

Son olarak, sistem RecordingSession.onStopRecording() yöntemini çağırır. Bu noktada uygulamanızın kaydetmeyi hemen durdurması gerekir. Ayrıca, RecordedPrograms tablosunda RecordedPrograms.COLUMN_RECORDING_DATA_URI sütunundaki kayıtlı oturum veri URI'sını ve onStartRecording() için sistem tarafından yapılan ilk çağrıda sağlanan program bilgilerini içeren bir giriş oluşturmanız gerekir.

RecordedPrograms tablosuna erişme hakkında daha fazla bilgi için Kayıtlı oturumları yönetme bölümünü inceleyin.

Kayıt hatalarını işleme

Kayıt sırasında oluşan bir hata nedeniyle kayıtlı verilerin kullanılamaması durumunda, notifyError() numaralı telefonu çağırarak sistemi bilgilendirin. Ayrıca, uygulamanızın artık oturumları kaydedemediğini sisteme bildirmek için kayıt oturumu oluşturulduktan sonra notifyError() numarasını arayabilirsiniz.

Kayıt sırasında bir hata oluşur ancak oynatma için kullanıcılara kısmi kayıt sağlamak isterseniz sistemin kısmi oturumu kullanmasını sağlamak için notifyRecordingStopped() çağrısı yapın.

Kayıtlı oturumları yönetme

Sistem, kayıt özellikli tüm kanal uygulamalarından kaydedilen tüm oturumların bilgilerini RecordedPrograms içerik sağlayıcı tablosunda tutar. Bu bilgilere RecordedPrograms içerik kaydetme URI'leri üzerinden erişilebilir. Bu tablodaki girişleri okumak, eklemek ve silmek için içerik sağlayıcı API'lerini kullanın.

İçerik sağlayıcı verileriyle çalışma hakkında daha fazla bilgi için İçerik sağlayıcı ile ilgili temel bilgiler sayfasına göz atın.

En iyi uygulamalar

TV cihazlarının depolama alanı sınırlı olabilir. Bu nedenle, kaydedilen oturumları kaydetmek için depolama alanı ayırırken dikkatli olun. Kaydedilmiş bir oturumu kaydetmek için yeterli alan yoksa RecordingCallback.onError(RECORDING_ERROR_INSUFFICIENT_SPACE) kullanın.

Kullanıcı kaydı başlattığında, en kısa sürede verileri kaydetmeye başlayın. Bu işlemi kolaylaştırmak için, sistem onCreateRecordingSession() geri çağırmasını çağırdığında depolama alanına erişme ve depolama alanı ayırma gibi ilk zaman alan görevleri tamamlayın. Böylece onStartRecording() geri çağırma etkinleştiğinde hemen kayda başlayabilirsiniz.