একটি টিভি ইনপুট পরিষেবা বিকাশ করুন৷

একটি টিভি ইনপুট পরিষেবা একটি মিডিয়া স্ট্রিম উত্স প্রতিনিধিত্ব করে, এবং আপনাকে চ্যানেল এবং প্রোগ্রাম হিসাবে একটি রৈখিক, সম্প্রচারিত টিভি ফ্যাশনে আপনার মিডিয়া সামগ্রী উপস্থাপন করতে দেয়৷ একটি টিভি ইনপুট পরিষেবার সাহায্যে, আপনি অভিভাবকীয় নিয়ন্ত্রণ, প্রোগ্রাম গাইড তথ্য এবং সামগ্রী রেটিং প্রদান করতে পারেন৷ টিভি ইনপুট পরিষেবা Android সিস্টেম টিভি অ্যাপের সাথে কাজ করে। এই অ্যাপটি শেষ পর্যন্ত টিভিতে চ্যানেলের বিষয়বস্তু নিয়ন্ত্রণ করে এবং উপস্থাপন করে। সিস্টেম টিভি অ্যাপটি বিশেষভাবে ডিভাইসের জন্য তৈরি করা হয়েছে এবং তৃতীয় পক্ষের অ্যাপ দ্বারা অপরিবর্তনীয়। টিভি ইনপুট ফ্রেমওয়ার্ক (টিআইএফ) আর্কিটেকচার এবং এর উপাদান সম্পর্কে আরও তথ্যের জন্য, টিভি ইনপুট ফ্রেমওয়ার্ক দেখুন।

TIF Companion Library ব্যবহার করে একটি TV ইনপুট পরিষেবা তৈরি করুন৷

TIF Companion Library হল একটি ফ্রেমওয়ার্ক যা সাধারণ টিভি ইনপুট পরিষেবা বৈশিষ্ট্যগুলির এক্সটেনসিবল বাস্তবায়ন প্রদান করে। এটি শুধুমাত্র Android 7.1 (API লেভেল 25) এর মাধ্যমে Android 5.0 (API লেভেল 21) এর জন্য চ্যানেল তৈরি করতে OEMs দ্বারা ব্যবহার করার উদ্দেশ্যে।

আপনার প্রকল্প আপডেট করুন

TIF Companion লাইব্রেরি androidtv-নমুনা-ইনপুট রিপোজিটরিতে OEM-দের দ্বারা উত্তরাধিকার ব্যবহারের জন্য উপলব্ধ। একটি অ্যাপে লাইব্রেরি কীভাবে অন্তর্ভুক্ত করবেন তার উদাহরণের জন্য সেই সংগ্রহস্থলটি দেখুন।

ম্যানিফেস্টে আপনার টিভি ইনপুট পরিষেবা ঘোষণা করুন৷

আপনার অ্যাপকে অবশ্যই একটি TvInputService সামঞ্জস্যপূর্ণ পরিষেবা প্রদান করতে হবে যা সিস্টেম আপনার অ্যাপ অ্যাক্সেস করতে ব্যবহার করে। TIF Companion লাইব্রেরি BaseTvInputService ক্লাস প্রদান করে, যা TvInputService এর একটি ডিফল্ট বাস্তবায়ন প্রদান করে যা আপনি কাস্টমাইজ করতে পারেন। BaseTvInputService এর একটি সাবক্লাস তৈরি করুন এবং আপনার ম্যানিফেস্টে একটি পরিষেবা হিসাবে সাবক্লাস ঘোষণা করুন।

ম্যানিফেস্ট ঘোষণার মধ্যে, পরিষেবাটিকে সিস্টেমে টিভি ইনপুট সংযোগ করার অনুমতি দেওয়ার জন্য BIND_TV_INPUT অনুমতি নির্দিষ্ট করুন৷ একটি সিস্টেম পরিষেবা বাইন্ডিং সম্পাদন করে এবং BIND_TV_INPUT অনুমতি রয়েছে৷ সিস্টেম টিভি অ্যাপ TvInputManager ইন্টারফেসের মাধ্যমে টিভি ইনপুট পরিষেবাগুলিতে অনুরোধ পাঠায়।

আপনার পরিষেবা ঘোষণায়, একটি অভিপ্রায় ফিল্টার অন্তর্ভুক্ত করুন যা অভিপ্রায়ের সাথে সম্পাদন করার জন্য TvInputService নির্দিষ্ট করে৷ এছাড়াও একটি পৃথক XML সম্পদ হিসাবে পরিষেবা মেটাডেটা ঘোষণা করুন। পরিষেবা ঘোষণা, অভিপ্রায় ফিল্টার এবং পরিষেবা মেটাডেটা ঘোষণা নিম্নলিখিত উদাহরণে দেখানো হয়েছে:

<service android:name=".rich.RichTvInputService"
    android:label="@string/rich_input_label"
    android:permission="android.permission.BIND_TV_INPUT">
    <!-- Required filter used by the system to launch our account service. -->
    <intent-filter>
        <action android:name="android.media.tv.TvInputService" />
    </intent-filter>
    <!-- An XML file which describes this input. This provides pointers to
    the RichTvInputSetupActivity to the system/TV app. -->
    <meta-data
        android:name="android.media.tv.input"
        android:resource="@xml/richtvinputservice" />
</service>

একটি পৃথক XML ফাইলে পরিষেবা মেটাডেটা সংজ্ঞায়িত করুন। পরিষেবা মেটাডেটা XML ফাইলে অবশ্যই একটি সেটআপ ইন্টারফেস অন্তর্ভুক্ত করতে হবে যা টিভি ইনপুটের প্রাথমিক কনফিগারেশন এবং চ্যানেল স্ক্যান বর্ণনা করে৷ মেটাডেটা ফাইলটিতে একটি পতাকাও থাকা উচিত যাতে বলা হয় ব্যবহারকারীরা সামগ্রী রেকর্ড করতে সক্ষম কিনা। আপনার অ্যাপে রেকর্ডিং বিষয়বস্তুকে কীভাবে সমর্থন করবেন সে সম্পর্কে আরও তথ্যের জন্য, সাপোর্ট কন্টেন্ট রেকর্ডিং দেখুন।

পরিষেবা মেটাডেটা ফাইলটি আপনার অ্যাপের জন্য XML সংস্থান ডিরেক্টরিতে অবস্থিত এবং আপনার ম্যানিফেস্টে ঘোষিত সংস্থানটির নামের সাথে অবশ্যই মিলবে৷ পূর্ববর্তী উদাহরণ থেকে ম্যানিফেস্ট এন্ট্রিগুলি ব্যবহার করে, আপনি নিম্নলিখিত বিষয়বস্তু সহ res/xml/richtvinputservice.xml এ XML ফাইল তৈরি করবেন:

<?xml version="1.0" encoding="utf-8"?>
<tv-input xmlns:android="http://schemas.android.com/apk/res/android"
  android:canRecord="true"
  android:setupActivity="com.example.android.sampletvinput.rich.RichTvInputSetupActivity" />

চ্যানেল সংজ্ঞায়িত করুন এবং আপনার সেটআপ কার্যকলাপ তৈরি করুন

আপনার টিভি ইনপুট পরিষেবাকে অবশ্যই অন্তত একটি চ্যানেল নির্ধারণ করতে হবে যা ব্যবহারকারীরা সিস্টেম টিভি অ্যাপের মাধ্যমে অ্যাক্সেস করে। আপনার সিস্টেম ডাটাবেসে আপনার চ্যানেলগুলি নিবন্ধন করা উচিত এবং একটি সেটআপ কার্যকলাপ প্রদান করা উচিত যা সিস্টেমটি যখন আপনার অ্যাপের জন্য একটি চ্যানেল খুঁজে না পায় তখন এটি আহ্বান করে৷

প্রথমে, আপনার অ্যাপটিকে সিস্টেম ইলেক্ট্রনিক প্রোগ্রামিং গাইড (EPG) থেকে পড়তে এবং লিখতে সক্ষম করুন, যার ডেটা ব্যবহারকারীর কাছে উপলব্ধ চ্যানেল এবং প্রোগ্রামগুলি অন্তর্ভুক্ত করে৷ আপনার অ্যাপটিকে এই ক্রিয়াগুলি সম্পাদন করতে সক্ষম করতে এবং ডিভাইস পুনরায় চালু করার পরে EPG এর সাথে সিঙ্ক করতে, আপনার অ্যাপ ম্যানিফেস্টে নিম্নলিখিত উপাদানগুলি যুক্ত করুন:

<uses-permission android:name="com.android.providers.tv.permission.WRITE_EPG_DATA" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED "/>

আপনার অ্যাপটি Google Play Store-এ Android TV-তে কন্টেন্ট চ্যানেল সরবরাহ করে এমন একটি অ্যাপ হিসেবে দেখানো হয়েছে তা নিশ্চিত করতে নিম্নলিখিত উপাদান যোগ করুন:

<uses-feature
    android:name="android.software.live_tv"
    android:required="true" />

এর পরে, একটি ক্লাস তৈরি করুন যা EpgSyncJobService ক্লাসকে প্রসারিত করে। এই বিমূর্ত শ্রেণীটি একটি কাজের পরিষেবা তৈরি করা সহজ করে যা সিস্টেম ডাটাবেসে চ্যানেল তৈরি এবং আপডেট করে।

আপনার সাবক্লাসে, getChannels() এ আপনার চ্যানেলগুলির সম্পূর্ণ তালিকা তৈরি করুন এবং ফেরত দিন। যদি আপনার চ্যানেলগুলি একটি XMLTV ফাইল থেকে আসে তবে XmlTvParser ক্লাস ব্যবহার করুন৷ অন্যথায়, Channel.Builder ক্লাস ব্যবহার করে প্রোগ্রাম্যাটিকভাবে চ্যানেল তৈরি করুন।

প্রতিটি চ্যানেলের জন্য, সিস্টেমটি getProgramsForChannel() কল করে যখন চ্যানেলের একটি নির্দিষ্ট সময় উইন্ডোর মধ্যে দেখা যেতে পারে এমন প্রোগ্রামগুলির একটি তালিকার প্রয়োজন হয়। চ্যানেলের জন্য Program অবজেক্টের একটি তালিকা ফেরত দিন। একটি XMLTV ফাইল থেকে প্রোগ্রামগুলি পেতে XmlTvParser ক্লাস ব্যবহার করুন, অথবা Program.Builder ক্লাস ব্যবহার করে প্রোগ্রাম্যাটিকভাবে তাদের তৈরি করুন।

প্রতিটি Program অবজেক্টের জন্য, প্রোগ্রামের ভিডিও টাইপের মতো প্রোগ্রাম তথ্য সেট করতে একটি InternalProviderData অবজেক্ট ব্যবহার করুন। আপনার যদি শুধুমাত্র সীমিত সংখ্যক প্রোগ্রাম থাকে যা আপনি চ্যানেলটিকে লুপে পুনরাবৃত্তি করতে চান, আপনার প্রোগ্রাম সম্পর্কে তথ্য সেট করার সময় true মান সহ InternalProviderData.setRepeatable() পদ্ধতি ব্যবহার করুন।

আপনি কাজের পরিষেবাটি প্রয়োগ করার পরে, এটি আপনার অ্যাপ ম্যানিফেস্টে যুক্ত করুন:

<service
    android:name=".sync.SampleJobService"
    android:permission="android.permission.BIND_JOB_SERVICE"
    android:exported="true" />

অবশেষে, একটি সেটআপ কার্যকলাপ তৈরি করুন। আপনার সেটআপ কার্যকলাপ চ্যানেল এবং প্রোগ্রাম ডেটা সিঙ্ক করার একটি উপায় প্রদান করা উচিত। এটি করার একটি উপায় হল ব্যবহারকারীর কার্যকলাপে UI এর মাধ্যমে এটি করা। অ্যাক্টিভিটি শুরু হলে আপনি অ্যাপটিকে স্বয়ংক্রিয়ভাবে এটি করতেও পারেন। যখন সেটআপ অ্যাক্টিভিটি চ্যানেল এবং প্রোগ্রামের তথ্য সিঙ্ক করার প্রয়োজন হয়, তখন অ্যাপটির চাকরি পরিষেবা শুরু করা উচিত:

কোটলিন

val inputId = getActivity().intent.getStringExtra(TvInputInfo.EXTRA_INPUT_ID)
EpgSyncJobService.cancelAllSyncRequests(getActivity())
EpgSyncJobService.requestImmediateSync(
        getActivity(),
        inputId,
        ComponentName(getActivity(), SampleJobService::class.java)
)

জাভা

String inputId = getActivity().getIntent().getStringExtra(TvInputInfo.EXTRA_INPUT_ID);
EpgSyncJobService.cancelAllSyncRequests(getActivity());
EpgSyncJobService.requestImmediateSync(getActivity(), inputId,
        new ComponentName(getActivity(), SampleJobService.class));

কাজের পরিষেবা সিঙ্ক করতে requestImmediateSync() পদ্ধতি ব্যবহার করুন। ব্যবহারকারীকে অবশ্যই সিঙ্ক শেষ হওয়ার জন্য অপেক্ষা করতে হবে, তাই আপনার অনুরোধের সময়কাল অপেক্ষাকৃত ছোট রাখা উচিত।

কাজের পরিষেবাটি পর্যায়ক্রমে পটভূমিতে চ্যানেল এবং প্রোগ্রাম ডেটা সিঙ্ক করতে setUpPeriodicSync() পদ্ধতি ব্যবহার করুন:

কোটলিন

EpgSyncJobService.setUpPeriodicSync(
        context,
        inputId,
        ComponentName(context, SampleJobService::class.java)
)

জাভা

EpgSyncJobService.setUpPeriodicSync(context, inputId,
        new ComponentName(context, SampleJobService.class));

TIF Companion Library একটি অতিরিক্ত ওভারলোড করা requestImmediateSync() পদ্ধতি প্রদান করে যা আপনাকে মিলিসেকেন্ডে সিঙ্ক করার জন্য চ্যানেল ডেটার সময়কাল নির্দিষ্ট করতে দেয়। ডিফল্ট পদ্ধতিটি এক ঘন্টার মূল্যের চ্যানেল ডেটা সিঙ্ক করে।

TIF Companion Library এছাড়াও setUpPeriodicSync() এর একটি অতিরিক্ত ওভারলোড পদ্ধতি প্রদান করে যা আপনাকে চ্যানেল ডেটা সিঙ্ক করার সময়কাল এবং কত ঘন ঘন পর্যায়ক্রমিক সিঙ্ক হওয়া উচিত তা নির্দিষ্ট করতে দেয়। ডিফল্ট পদ্ধতি প্রতি 12 ঘন্টায় 48 ঘন্টা চ্যানেল ডেটা সিঙ্ক করে।

চ্যানেল ডেটা এবং EPG সম্পর্কে আরও বিশদ বিবরণের জন্য, চ্যানেল ডেটার সাথে কাজ দেখুন।

টিউনিং অনুরোধ এবং মিডিয়া প্লেব্যাক পরিচালনা করুন

যখন একজন ব্যবহারকারী একটি নির্দিষ্ট চ্যানেল নির্বাচন করেন, তখন সিস্টেম টিভি অ্যাপটি অনুরোধ করা চ্যানেলে টিউন করতে এবং সামগ্রী চালাতে আপনার অ্যাপ দ্বারা তৈরি একটি Session ব্যবহার করে। টিআইএফ কম্প্যানিয়ন লাইব্রেরি বেশ কয়েকটি ক্লাস সরবরাহ করে যা আপনি সিস্টেম থেকে চ্যানেল এবং সেশন কলগুলি পরিচালনা করতে প্রসারিত করতে পারেন।

আপনার BaseTvInputService সাবক্লাস সেশন তৈরি করে যা টিউনিং অনুরোধগুলি পরিচালনা করে। onCreateSession() পদ্ধতিটি ওভাররাইড করুন, BaseTvInputService.Session ক্লাস থেকে প্রসারিত একটি সেশন তৈরি করুন এবং আপনার নতুন সেশনের সাথে super.sessionCreated() কল করুন৷ নিম্নলিখিত উদাহরণে, onCreateSession() একটি RichTvInputSessionImpl অবজেক্ট প্রদান করে যা BaseTvInputService.Session প্রসারিত করে:

কোটলিন

override fun onCreateSession(inputId: String): Session =
        RichTvInputSessionImpl(this, inputId).apply {
            setOverlayViewEnabled(true)
        }

জাভা

@Override
public final Session onCreateSession(String inputId) {
    RichTvInputSessionImpl session = new RichTvInputSessionImpl(this, inputId);
    session.setOverlayViewEnabled(true);
    return session;
}

যখন ব্যবহারকারী আপনার চ্যানেলগুলির একটি দেখা শুরু করতে সিস্টেম টিভি অ্যাপ ব্যবহার করে, তখন সিস্টেমটি আপনার সেশনের onPlayChannel() পদ্ধতিতে কল করে। এই পদ্ধতিটি ওভাররাইড করুন যদি প্রোগ্রামটি বাজানো শুরু করার আগে আপনাকে কোনো বিশেষ চ্যানেল ইনিশিয়ালাইজেশন করতে হয়।

তারপর সিস্টেমটি বর্তমানে নির্ধারিত প্রোগ্রামটি পায় এবং আপনার সেশনের onPlayProgram() পদ্ধতিতে কল করে, প্রোগ্রামের তথ্য এবং মিলিসেকেন্ডে শুরুর সময় উল্লেখ করে। প্রোগ্রাম চালানো শুরু করতে TvPlayer ইন্টারফেস ব্যবহার করুন।

নির্দিষ্ট প্লেব্যাক ইভেন্টগুলি পরিচালনা করতে আপনার মিডিয়া প্লেয়ার কোড TvPlayer প্রয়োগ করা উচিত। TvPlayer ক্লাস আপনার BaseTvInputService বাস্তবায়নে জটিলতা যোগ না করে সময়-বদল নিয়ন্ত্রণের মতো বৈশিষ্ট্যগুলি পরিচালনা করে।

আপনার সেশনের getTvPlayer() পদ্ধতিতে, আপনার মিডিয়া প্লেয়ারটি ফিরিয়ে দিন যা TvPlayer প্রয়োগ করে। টিভি ইনপুট পরিষেবার নমুনা অ্যাপটি একটি মিডিয়া প্লেয়ার প্রয়োগ করে যা ExoPlayer ব্যবহার করে।

টিভি ইনপুট ফ্রেমওয়ার্ক ব্যবহার করে একটি টিভি ইনপুট পরিষেবা তৈরি করুন

আপনার টিভি ইনপুট পরিষেবা টিআইএফ কম্প্যানিয়ন লাইব্রেরি ব্যবহার করতে না পারলে, আপনাকে নিম্নলিখিত উপাদানগুলি বাস্তবায়ন করতে হবে:

  • TvInputService টিভি ইনপুটের জন্য দীর্ঘ-চলমান এবং ব্যাকগ্রাউন্ড উপলব্ধতা প্রদান করে
  • TvInputService.Session টিভি ইনপুট অবস্থা বজায় রাখে এবং হোস্টিং অ্যাপের সাথে যোগাযোগ করে
  • TvContract টিভি ইনপুটে উপলব্ধ চ্যানেল এবং প্রোগ্রাম বর্ণনা করে
  • TvContract.Channels একটি টিভি চ্যানেল সম্পর্কে তথ্য উপস্থাপন করে
  • TvContract.Programs প্রোগ্রাম শিরোনাম এবং শুরুর সময় মত ডেটা সহ একটি টিভি প্রোগ্রাম বর্ণনা করে
  • TvTrackInfo একটি অডিও, ভিডিও বা সাবটাইটেল ট্র্যাক উপস্থাপন করে
  • TvContentRating একটি বিষয়বস্তু রেটিং বর্ণনা করে, কাস্টম সামগ্রী রেটিং স্কিমগুলির জন্য অনুমতি দেয়
  • TvInputManager সিস্টেম টিভি অ্যাপে একটি API প্রদান করে এবং টিভি ইনপুট এবং অ্যাপের সাথে মিথস্ক্রিয়া পরিচালনা করে

এছাড়াও আপনাকে নিম্নলিখিতগুলি করতে হবে:

  1. ম্যানিফেস্টে আপনার টিভি ইনপুট পরিষেবা ঘোষণা করুন, যেমনটি ম্যানিফেস্টে আপনার টিভি ইনপুট পরিষেবা ঘোষণা করুন
  2. পরিষেবা মেটাডেটা ফাইল তৈরি করুন।
  3. আপনার চ্যানেল এবং প্রোগ্রাম তথ্য তৈরি করুন এবং নিবন্ধন করুন।
  4. আপনার সেটআপ কার্যকলাপ তৈরি করুন.

আপনার টিভি ইনপুট পরিষেবা সংজ্ঞায়িত করুন

আপনার পরিষেবার জন্য, আপনি TvInputService ক্লাস প্রসারিত করুন। একটি TvInputService বাস্তবায়ন হল একটি আবদ্ধ পরিষেবা যেখানে সিস্টেম পরিষেবা হল ক্লায়েন্ট যা এটিকে আবদ্ধ করে। আপনাকে যে পরিষেবা জীবন চক্র পদ্ধতিগুলি প্রয়োগ করতে হবে তা চিত্র 1-এ চিত্রিত করা হয়েছে৷

onCreate() পদ্ধতিটি HandlerThread শুরু করে এবং শুরু করে যা সিস্টেম-চালিত ক্রিয়াগুলি পরিচালনা করতে UI থ্রেড থেকে পৃথক একটি প্রক্রিয়া থ্রেড সরবরাহ করে। নিম্নলিখিত উদাহরণে, onCreate() পদ্ধতিটি CaptioningManager আরম্ভ করে এবং ACTION_BLOCKED_RATINGS_CHANGED এবং ACTION_PARENTAL_CONTROLS_ENABLED_CHANGED ক্রিয়াগুলি পরিচালনা করার জন্য প্রস্তুত করে৷ এই ক্রিয়াগুলি ব্যবহারকারীর অভিভাবকীয় নিয়ন্ত্রণ সেটিংস পরিবর্তন করার সময় এবং অবরুদ্ধ রেটিংগুলির তালিকায় যখন কোনও পরিবর্তন হয় তখন বহিস্কার করা সিস্টেমের উদ্দেশ্য বর্ণনা করে৷

কোটলিন

override fun onCreate() {
    super.onCreate()
    handlerThread = HandlerThread(javaClass.simpleName).apply {
        start()
    }
    dbHandler = Handler(handlerThread.looper)
    handler = Handler()
    captioningManager = getSystemService(Context.CAPTIONING_SERVICE) as CaptioningManager

    setTheme(android.R.style.Theme_Holo_Light_NoActionBar)

    sessions = mutableListOf<BaseTvInputSessionImpl>()
    val intentFilter = IntentFilter().apply {
        addAction(TvInputManager.ACTION_BLOCKED_RATINGS_CHANGED)
        addAction(TvInputManager.ACTION_PARENTAL_CONTROLS_ENABLED_CHANGED)
    }
    registerReceiver(broadcastReceiver, intentFilter)
}

জাভা

@Override
public void onCreate() {
    super.onCreate();
    handlerThread = new HandlerThread(getClass()
      .getSimpleName());
    handlerThread.start();
    dbHandler = new Handler(handlerThread.getLooper());
    handler = new Handler();
    captioningManager = (CaptioningManager)
      getSystemService(Context.CAPTIONING_SERVICE);

    setTheme(android.R.style.Theme_Holo_Light_NoActionBar);

    sessions = new ArrayList<BaseTvInputSessionImpl>();
    IntentFilter intentFilter = new IntentFilter();
    intentFilter.addAction(TvInputManager
      .ACTION_BLOCKED_RATINGS_CHANGED);
    intentFilter.addAction(TvInputManager
      .ACTION_PARENTAL_CONTROLS_ENABLED_CHANGED);
    registerReceiver(broadcastReceiver, intentFilter);
}

চিত্র 1. TvInputService জীবনচক্র।

ব্লক করা বিষয়বস্তু নিয়ে কাজ করা এবং অভিভাবকীয় নিয়ন্ত্রণ প্রদানের বিষয়ে আরও তথ্যের জন্য কন্ট্রোল কন্টেন্ট দেখুন। আরও সিস্টেম-চালিত ক্রিয়াগুলির জন্য TvInputManager দেখুন যা আপনি আপনার টিভি ইনপুট পরিষেবাতে পরিচালনা করতে চান।

TvInputService একটি TvInputService.Session তৈরি করে যা প্লেয়ারের অবস্থার পরিবর্তনগুলি পরিচালনা করতে Handler.Callback প্রয়োগ করে৷ onSetSurface() সাথে, TvInputService.Session ভিডিও বিষয়বস্তুর সাথে Surface সেট করে। ভিডিও রেন্ডার করতে Surface সাথে কাজ করার বিষয়ে আরও তথ্যের জন্য পৃষ্ঠের সাথে প্লেয়ারকে একীভূত করুন দেখুন।

TvInputService.Session ব্যবহারকারী একটি চ্যানেল নির্বাচন করলে onTune() ইভেন্ট পরিচালনা করে এবং বিষয়বস্তু এবং বিষয়বস্তু মেটাডেটা পরিবর্তনের জন্য সিস্টেম টিভি অ্যাপকে অবহিত করে। এই notify() পদ্ধতিগুলি এই প্রশিক্ষণে আরও কন্ট্রোল কন্টেন্ট এবং হ্যান্ডেল ট্র্যাক নির্বাচনের মধ্যে বর্ণনা করা হয়েছে।

আপনার সেটআপ কার্যকলাপ সংজ্ঞায়িত করুন

সিস্টেম টিভি অ্যাপটি আপনার টিভি ইনপুটের জন্য আপনার সংজ্ঞায়িত সেটআপ কার্যকলাপের সাথে কাজ করে। সেটআপ কার্যকলাপ প্রয়োজন এবং সিস্টেম ডাটাবেসের জন্য অন্তত একটি চ্যানেল রেকর্ড প্রদান করতে হবে। সিস্টেম টিভি অ্যাপটি যখন টিভি ইনপুটের জন্য কোনো চ্যানেল খুঁজে পায় না তখন সেটআপ কার্যকলাপের জন্য আহ্বান জানায়।

সেটআপ কার্যকলাপটি টিভি ইনপুটের মাধ্যমে উপলব্ধ চ্যানেলগুলি সিস্টেম টিভি অ্যাপে বর্ণনা করে, যেমনটি পরবর্তী পাঠে দেখানো হয়েছে, চ্যানেল ডেটা তৈরি করুন এবং আপডেট করুন

অতিরিক্ত রেফারেন্স