سرویسهای ورودی تلویزیون به کاربر اجازه میدهند با استفاده از APIهای جابجایی زمان، پخش کانال را متوقف کرده و از سر بگیرند. Android 7.0 با اجازه دادن به کاربر برای ذخیره چندین جلسه ضبط شده، تغییر زمان را گسترش می دهد.
کاربران می توانند ضبط ها را از قبل برنامه ریزی کنند یا هنگام تماشای یک برنامه، ضبط را شروع کنند. هنگامی که سیستم یک ضبط را ذخیره می کند، کاربر می تواند با استفاده از برنامه تلویزیون سیستم، ضبط را مرور، مدیریت و پخش کند.
اگر میخواهید قابلیت ضبط را برای سرویس ورودی تلویزیون خود ارائه دهید، باید به سیستم نشان دهید که برنامه شما از ضبط پشتیبانی میکند، توانایی ضبط برنامهها، رسیدگی و برقراری ارتباط با خطاهایی که در حین ضبط رخ میدهد و مدیریت جلسات ضبط شدهتان را اجرا میکند.
پشتیبانی از ضبط را نشان می دهد
برای اینکه به سیستم بگویید که سرویس ورودی تلویزیون شما از ضبط پشتیبانی می کند، ویژگی android:canRecord در فایل XML فراداده سرویس خود روی true تنظیم کنید:
<tv-input xmlns:android="http://schemas.android.com/apk/res/android" android:canRecord="true" android:setupActivity="com.example.sampletvinput.SampleTvInputSetupActivity" />
برای اطلاعات بیشتر در مورد فایل فراداده سرویس، به اعلام سرویس ورودی تلویزیون در مانیفست مراجعه کنید.
همچنین، میتوانید با استفاده از این مراحل، پشتیبانی ضبط در کد خود را نشان دهید:
- در متد
onCreate()سرویس ورودی تلویزیون، یک شیTvInputInfoجدید با استفاده از کلاسTvInputInfo.Builderایجاد کنید. - هنگام ایجاد شی
TvInputInfoجدید، قبل از فراخوانیbuild()setCanRecord(true)را فراخوانی کنید تا نشان دهید که سرویس شما از ضبط پشتیبانی می کند. - شی
TvInputInfoخود را با فراخوانیTvInputManager.updateTvInputInfo()در سیستم ثبت کنید.
ضبط یک جلسه
پس از اینکه سرویس ورودی تلویزیون شما ثبت کرد که از عملکرد ضبط پشتیبانی می کند، سیستم زمانی که نیاز به دسترسی به اجرای ضبط برنامه شما دارد، روش TvInputService.onCreateRecordingSession() شما را فراخوانی می کند. زیرکلاس TvInputService.RecordingSession خود را پیاده سازی کنید و زمانی که onCreateRecordingSession() فعال شد، آن را برگردانید. این زیر کلاس وظیفه سوئیچ به داده های کانال صحیح، ثبت داده های درخواستی و انتقال وضعیت ضبط و خطاها به سیستم را بر عهده دارد.
هنگامی که سیستم RecordingSession.onTune() را فرا می خواند و از یک URI کانال عبور می کند، کانالی را که URI مشخص می کند تنظیم کنید. با فراخوانی notifyTuned() به سیستم اطلاع دهید که برنامه شما روی کانال مورد نظر تنظیم شده است یا اگر برنامه شما نمی تواند کانال مناسب را تنظیم کند، با notifyError() تماس بگیرید.
سیستم در مرحله بعد RecordingSession.onStartRecording() را فراخوانی می کند. برنامه شما باید بلافاصله ضبط را شروع کند. هنگامی که سیستم این فراخوانی را فراخوانی می کند، ممکن است یک URI ارائه دهد که حاوی اطلاعاتی در مورد برنامه ای است که قرار است ضبط شود. وقتی ضبط انجام شد، این داده ها را در جدول داده RecordedPrograms کپی کنید.
در نهایت، سیستم RecordingSession.onStopRecording() فراخوانی می کند. در این مرحله، برنامه شما باید فورا ضبط را متوقف کند. همچنین باید یک ورودی در جدول RecordedPrograms ایجاد کنید که شامل URI داده های جلسه ضبط شده در ستون RecordedPrograms.COLUMN_RECORDING_DATA_URI و هر گونه اطلاعات برنامه ای است که سیستم در تماس اولیه با onStartRecording() ارائه کرده است.
برای جزئیات بیشتر در مورد نحوه دسترسی به جدول RecordedPrograms ، به بخش Manage recorded sessions مراجعه کنید.
خطاهای ضبط را مدیریت کنید
اگر در حین ضبط خطایی رخ داد که منجر به داده های ضبط شده غیرقابل استفاده شد، با فراخوانی notifyError() به سیستم اطلاع دهید. همچنین می توانید پس از ایجاد یک جلسه ضبط notifyError() را فراخوانی کنید تا به سیستم اطلاع دهید که برنامه شما دیگر نمی تواند جلسات را ضبط کند.
اگر در حین ضبط خطایی رخ داد اما میخواهید یک ضبط جزئی را برای پخش در اختیار کاربران قرار دهید، با notifyRecordingStopped() تماس بگیرید تا سیستم بتواند از جلسه جزئی استفاده کند.
جلسات ضبط شده را مدیریت کنید
این سیستم اطلاعات تمام جلسات ضبط شده را از همه برنامه های کانالی که قابلیت ضبط دارند را در جدول ارائه دهنده محتوای RecordedPrograms نگهداری می کند. این اطلاعات از طریق URI های ضبط محتوای RecordedPrograms قابل دسترسی است. از API های ارائه دهنده محتوا برای خواندن، افزودن و حذف ورودی های این جدول استفاده کنید.
برای اطلاعات بیشتر در مورد کار با داده های ارائه دهنده محتوا، به اصول ارائه دهنده محتوا مراجعه کنید.
بهترین شیوه ها
دستگاههای تلویزیون ممکن است فضای ذخیرهسازی محدودی داشته باشند، بنابراین هنگام تخصیص فضای ذخیرهسازی برای ذخیره جلسات ضبطشده بهترین قضاوت خود را به کار ببرید. هنگامی که فضای کافی برای ذخیره یک جلسه ضبط شده وجود ندارد، از RecordingCallback.onError(RECORDING_ERROR_INSUFFICIENT_SPACE) استفاده کنید.
هنگامی که کاربر شروع به ضبط کرد، در اسرع وقت شروع به ضبط داده ها کنید. برای تسهیل این امر، زمانی که سیستم پاسخ تماس onCreateRecordingSession() را فراخوانی میکند، کارهای وقتگیر اولیه، مانند دسترسی و تخصیص فضای ذخیرهسازی را تکمیل کنید. انجام این کار به شما این امکان را می دهد که بلافاصله پس از روشن شدن فراخوان onStartRecording() شروع به ضبط کنید.