سرویسهای ورودی تلویزیون به کاربر اجازه میدهند با استفاده از APIهای تغییر زمان، پخش کانال را متوقف و از سر بگیرد. اندروید ۷.۰ با امکان ذخیره چندین جلسه ضبط شده توسط کاربر، تغییر زمان را گسترش میدهد.
کاربران میتوانند ضبطها را از قبل برنامهریزی کنند یا همزمان با تماشای برنامه، ضبط را شروع کنند. پس از ذخیره شدن یک برنامه ضبط شده توسط سیستم، کاربر میتواند با استفاده از برنامه تلویزیون سیستم، آن را مرور، مدیریت و پخش کند.
اگر میخواهید قابلیت ضبط را برای سرویس ورودی تلویزیون خود فراهم کنید، باید به سیستم اعلام کنید که برنامه شما از ضبط پشتیبانی میکند، قابلیت ضبط برنامهها را پیادهسازی کنید، هرگونه خطایی را که هنگام ضبط رخ میدهد، مدیریت و گزارش کنید و جلسات ضبط شده خود را مدیریت کنید.
پشتیبانی از ضبط را مشخص کنید
برای اینکه به سیستم بگویید سرویس ورودی تلویزیون شما از ضبط پشتیبانی میکند، ویژگی 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.Builderیک شیء جدید ازTvInputInfoایجاد کنید. - هنگام ایجاد شیء جدید
TvInputInfo، قبل از فراخوانیbuild، تابعsetCanRecord(true)را فراخوانی کنید تا نشان دهید که سرویس شما از ضبط پشتیبانی میکند. - با فراخوانی
TvInputManager.updateTvInputInfoشیءTvInputInfoخود را در سیستم ثبت کنید.
ضبط یک جلسه
پس از اینکه سرویس ورودی تلویزیون شما ثبت کرد که از قابلیت ضبط پشتیبانی میکند، سیستم هنگام نیاز به دسترسی به پیادهسازی ضبط برنامه شما، متد 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 ، به بخش مدیریت جلسات ضبط شده مراجعه کنید.
مدیریت خطاهای ضبط
اگر هنگام ضبط خطایی رخ دهد که منجر به غیرقابل استفاده شدن دادههای ضبط شده شود، با فراخوانی notifyError به سیستم اطلاع دهید. همچنین میتوانید پس از ایجاد یک جلسه ضبط، notifyError فراخوانی کنید تا به سیستم اطلاع دهید که برنامه شما دیگر نمیتواند جلسات را ضبط کند.
اگر هنگام ضبط خطایی رخ داد اما میخواهید یک ضبط جزئی را برای پخش در اختیار کاربران قرار دهید، notifyRecordingStopped فراخوانی کنید تا سیستم بتواند از جلسه جزئی استفاده کند.
مدیریت جلسات ضبط شده
سیستم اطلاعات مربوط به تمام جلسات ضبط شده از تمام برنامههای کانال با قابلیت ضبط را در جدول ارائه دهنده محتوای RecordedPrograms نگهداری میکند. این اطلاعات از طریق URI های ضبط محتوای RecordedPrograms قابل دسترسی است. از API های ارائه دهنده محتوا برای خواندن، اضافه کردن و حذف ورودیها از این جدول استفاده کنید.
برای اطلاعات بیشتر در مورد کار با دادههای ارائهدهنده محتوا، به اصول اولیه ارائهدهنده محتوا مراجعه کنید.
بهترین شیوهها
ممکن است دستگاههای تلویزیون فضای ذخیرهسازی محدودی داشته باشند، بنابراین هنگام تخصیص فضای ذخیرهسازی برای ذخیره جلسات ضبطشده، بهترین قضاوت خود را به کار ببرید. وقتی فضای کافی برای ذخیره یک جلسه ضبطشده وجود ندارد، از RecordingCallback.onError(RECORDING_ERROR_INSUFFICIENT_SPACE) استفاده کنید.
وقتی کاربر شروع به ضبط میکند، در اسرع وقت شروع به ضبط دادهها کنید. برای تسهیل این امر، هرگونه کار وقتگیر از قبل، مانند دسترسی و تخصیص فضای ذخیرهسازی، را هنگام فراخوانی تابع onCreateRecordingSession توسط سیستم انجام دهید. انجام این کار به شما امکان میدهد بلافاصله پس از اجرای تابع onStartRecording ضبط را شروع کنید.