হোম স্ক্রিনে চ্যানেল

Android TV-এর হোম স্ক্রিন এমন একটি UI প্রদান করে যা চ্যানেল ও প্রোগ্রাম-এর টেবিল হিসেবে সাজেস্ট করা কন্টেন্ট দেখায়। প্রতিটি সারি হল একটি চ্যানেল। একটি চ্যানেলে সেই চ্যানেলে উপলভ্য প্রতিটি প্রোগ্রামের জন্য কার্ড থাকে:

Android TV হোম স্ক্রিন
Android TV হোম স্ক্রিন

এই ডকুমেন্ট থেকে জানা যাবে কীভাবে হোম স্ক্রিনে চ্যানেল ও প্রোগ্রাম যোগ করতে হয়, কন্টেন্ট আপডেট করতে হয়, ব্যবহারকারীর অ্যাকশন ম্যানেজ করতে হয় এবং আপনার ব্যবহারকারীদের সবচেয়ে ভালো অভিজ্ঞতা প্রদান করতে হয়। (আপনি যদি API সম্পর্কে আরও জানতে চান, তাহলে হোম স্ক্রিন কোডল্যাব দেখুন এবং I/O 2017 Android TV সেশন দেখুন)

হোম স্ক্রিন UI

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

হোম স্ক্রিনে চ্যানেলগুলি যে ক্রমে প্রদর্শিত হবে তা অ্যাপগুলি নিয়ন্ত্রণ করতে পারে না। আপনার অ্যাপ নতুন চ্যানেল তৈরি করলে, হোম স্ক্রিন সেটিকে চ্যানেল তালিকার নিচে যোগ করে। ব্যবহারকারী চ্যানেল আবার সাজাতে, লুকাতে ও দেখাতে পারবেন।

'পরের ভিডিও দেখুন' চ্যানেল

'পরবর্তী ভিডিওটি দেখুন' চ্যানেল হল হোম স্ক্রিনের দ্বিতীয় সারি, যা অ্যাপ সারির পরে দেখা যায়। সিস্টেম এই চ্যানেল তৈরি করে ও বজায় রাখে। আপনার অ্যাপ, 'পরের ভিডিওটি দেখুন' চ্যানেলে প্রোগ্রাম যোগ করতে পারবে। আরও তথ্যের জন্য, পরের ভিডিওটি দেখুন চ্যানেলে প্রোগ্রাম যোগ করুন দেখুন।

অ্যাপ চ্যানেল

আপনার অ্যাপের তৈরি করা সব চ্যানেল এই লাইফসাইকেল অনুসরণ করে:

  1. ব্যবহারকারী আপনার অ্যাপে কোনও চ্যানেল খুঁজে পান এবং সেটি হোম স্ক্রিনে যোগ করার অনুরোধ করেন।
  2. অ্যাপ চ্যানেল তৈরি করে এবং TvProvider-এ যোগ করে (এই মুহূর্তে চ্যানেলটি দেখা যায় না)।
  3. অ্যাপ সিস্টেমকে চ্যানেলটি প্রদর্শন করতে বলে।
  4. সিস্টেম ব্যবহারকারীকে নতুন চ্যানেল অনুমোদন করতে বলে।
  5. হোম স্ক্রিনের শেষ সারিতে নতুন চ্যানেল দেখা যায়।

ডিফল্ট চ্যানেল

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

পূর্বশর্ত

Android TV হোম স্ক্রিন Android-এর TvProvider API ব্যবহার করে আপনার অ্যাপের তৈরি করা চ্যানেল ও প্রোগ্রাম ম্যানেজ করে। প্রদানকারীর ডেটা অ্যাক্সেস করতে, আপনার অ্যাপের ম্যানিফেস্টে নিম্নলিখিত অনুমতি যোগ করুন:

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

TvProvider সাপোর্ট লাইব্রেরি প্রোভাইডার ব্যবহার করা আরও সহজ করে তোলে। আপনার build.gradle ফাইলের ডিপেন্ডেন্সিতে এটি যোগ করুন:

গ্ৰুভি

implementation 'androidx.tvprovider:tvprovider:1.0.0'

Kotlin

implementation("androidx.tvprovider:tvprovider:1.0.0")

চ্যানেল ও প্রোগ্রাম নিয়ে কাজ করতে, আপনার প্রোগ্রামে এইসব সাপোর্ট লাইব্রেরি ইমপোর্ট করতে ভুলবেন না:

Kotlin

import android.support.media.tv.Channel
import android.support.media.tv.TvContractCompat
import android.support.media.tv.ChannelLogoUtils
import android.support.media.tv.PreviewProgram
import android.support.media.tv.WatchNextProgram

জাভা

import android.support.media.tv.Channel;
import android.support.media.tv.TvContractCompat;
import android.support.media.tv.ChannelLogoUtils;
import android.support.media.tv.PreviewProgram;
import android.support.media.tv.WatchNextProgram;

চ্যানেল

আপনার অ্যাপের তৈরি করা প্রথম চ্যানেলটিই ডিফল্ট চ্যানেল হয়ে যায়। ডিফল্ট চ্যানেল অটোমেটিক হোম স্ক্রিনে দেখা যায়। আপনার তৈরি করা অন্য সব চ্যানেল হোম স্ক্রিনে দেখানোর আগে ব্যবহারকারীকে অবশ্যই বেছে নিতে এবং গ্রহণ করতে হবে।

চ্যানেল তৈরি করা

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

চ্যানেল তৈরি করতে, এইসব ধাপ অনুসরণ করুন:

  1. চ্যানেল বিল্ডার তৈরি করে তার অ্যাট্রিবিউট সেট করুন। মনে রাখবেন যে চ্যানেলের ধরন অবশ্যই TYPE_PREVIEW হতে হবে। প্রয়োজন অনুযায়ী আরও অ্যাট্রিবিউট যোগ করুন।

    Kotlin

    val builder = Channel.Builder()
    // Every channel you create must have the type `TYPE_PREVIEW`
    builder.setType(TvContractCompat.Channels.TYPE_PREVIEW)
            .setDisplayName("Channel Name")
            .setAppLinkIntentUri(uri)
    

    জাভা

    Channel.Builder builder = new Channel.Builder();
    // Every channel you create must have the type `TYPE_PREVIEW`
    builder.setType(TvContractCompat.Channels.TYPE_PREVIEW)
            .setDisplayName("Channel Name")
            .setAppLinkIntentUri(uri);
    
  2. প্রোভাইডারে চ্যানেল যোগ করুন:

    Kotlin

    var channelUri = context.contentResolver.insert(
            TvContractCompat.Channels.CONTENT_URI, builder.build().toContentValues())
    

    জাভা

    Uri channelUri = context.getContentResolver().insert(
            TvContractCompat.Channels.CONTENT_URI, builder.build().toContentValues());
    
  3. পরে চ্যানেলে প্রোগ্রাম যোগ করার জন্য আপনাকে চ্যানেল আইডি সেভ করতে হবে। ফেরত পাওয়া URI থেকে চ্যানেল আইডি এক্সট্র্যাক্ট করুন:

    Kotlin

    var channelId = ContentUris.parseId(channelUri)
    

    জাভা

    long channelId = ContentUris.parseId(channelUri);
    
  4. আপনার চ্যানেলের জন্য লোগো যোগ করতে হবে। Uri বা Bitmap ব্যবহার করুন। লোগো আইকন ৮০ডিপি x ৮০ডিপি হতে হবে এবং এটি অস্বচ্ছ হতে হবে। এটি একটি বৃত্তাকার মাস্কের নিচে দেখানো হয়:

    টিভি হোম স্ক্রিন আইকন মাস্ক

    Kotlin

    // Choose one or the other
    storeChannelLogo(context: Context, channelId: Long, logoUri: Uri) // also works if logoUri is a URL
    storeChannelLogo(context: Context, channelId: Long, logo: Bitmap)
    

    জাভা

    // Choose one or the other
    storeChannelLogo(Context context, long channelId, Uri logoUri); // also works if logoUri is a URL
    storeChannelLogo(Context context, long channelId, Bitmap logo);
    
  5. ডিফল্ট চ্যানেল তৈরি করুন (ঐচ্ছিক): আপনার অ্যাপ প্রথম চ্যানেল তৈরি করলে, আপনি এটিকে ডিফল্ট চ্যানেল হিসেবে সেট করতে পারেন যাতে ব্যবহারকারীর কোনও অ্যাকশন ছাড়াই এটি হোম স্ক্রিনে অবিলম্বে দেখা যায়। আপনার তৈরি করা অন্য কোনও চ্যানেল ব্যবহারকারী স্পষ্টভাবে বেছে না নেওয়া পর্যন্ত দেখা যাবে না।

    Kotlin

    TvContractCompat.requestChannelBrowsable(context, channelId)
    

    জাভা

    TvContractCompat.requestChannelBrowsable(context, channelId);
    
  6. আপনার অ্যাপ খোলার আগে ডিফল্ট চ্যানেল দেখান। আপনি এই আচরণটি ঘটাতে পারেন একটি BroadcastReceiver যোগ করে যা android.media.tv.action.INITIALIZE_PROGRAMS অ্যাকশনের জন্য শোনে, যা হোম স্ক্রিন অ্যাপটি ইনস্টল হওয়ার পরে পাঠায়:

    <receiver
      android:name=".RunOnInstallReceiver"
      android:exported="true">
        <intent-filter>
          <action android:name="android.media.tv.action.INITIALIZE_PROGRAMS" />
          <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    </receiver>
    

    ডেভেলপমেন্টের সময় আপনার অ্যাপ সাইডলোড করার সময়, আপনি adb-এর মাধ্যমে ইনটেন্ট ট্রিগার করে এই ধাপটি পরীক্ষা করতে পারেন, যেখানে your.package.name/.YourReceiverName হল আপনার অ্যাপের BroadcastReceiver:

    adb shell am broadcast -a android.media.tv.action.INITIALIZE_PROGRAMS -n \
        your.package.name/.YourReceiverName
    

    খুব কম ক্ষেত্রে, ব্যবহারকারী আপনার অ্যাপ চালু করার সাথে সাথেই আপনার অ্যাপ ব্রডকাস্ট পেতে পারে। আপনার কোড যাতে একাধিকবার ডিফল্ট চ্যানেল যোগ করার চেষ্টা না করে তা নিশ্চিত করুন।

চ্যানেল আপডেট করা

চ্যানেল আপডেট করা এবং তৈরি করার পদ্ধতি প্রায় একই।

যেসব অ্যাট্রিবিউট পরিবর্তন করতে হবে সেগুলি সেট করতে অন্য Channel.Builder ব্যবহার করুন।

চ্যানেল আপডেট করতে ContentResolver ব্যবহার করুন। চ্যানেলটি যখন প্রথমবার যোগ করা হয়েছিল, তখন আপনি যে চ্যানেল আইডি সেভ করেছিলেন সেটি ব্যবহার করুন:

Kotlin

context.contentResolver.update(
        TvContractCompat.buildChannelUri(channelId),
        builder.build().toContentValues(),
        null,
        null
)

জাভা

context.getContentResolver().update(TvContractCompat.buildChannelUri(channelId),
    builder.build().toContentValues(), null, null);

চ্যানেলের লোগো আপডেট করতে, storeChannelLogo() ব্যবহার করুন।

চ্যানেল মুছে দেওয়া

Kotlin

context.contentResolver.delete(TvContractCompat.buildChannelUri(channelId), null, null)

জাভা

context.getContentResolver().delete(TvContractCompat.buildChannelUri(channelId), null, null);

প্রোগ্রাম

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

অ্যাপ চ্যানেলে প্রোগ্রাম যোগ করা

PreviewProgram.Builder তৈরি করুন এবং এর অ্যাট্রিবিউট সেট করুন:

Kotlin

val builder = PreviewProgram.Builder()
builder.setChannelId(channelId)
        .setType(TvContractCompat.PreviewPrograms.TYPE_CLIP)
        .setTitle("Title")
        .setDescription("Program description")
        .setPosterArtUri(uri)
        .setIntentUri(uri)
        .setInternalProviderId(appProgramId)

জাভা

PreviewProgram.Builder builder = new PreviewProgram.Builder();
builder.setChannelId(channelId)
        .setType(TvContractCompat.PreviewPrograms.TYPE_CLIP)
        .setTitle("Title")
        .setDescription("Program description")
        .setPosterArtUri(uri)
        .setIntentUri(uri)
        .setInternalProviderId(appProgramId);

প্রোগ্রামের ধরনের উপর নির্ভর করে আরও অ্যাট্রিবিউট যোগ করুন। (প্রতিটি প্রোগ্রামের জন্য উপলভ্য অ্যাট্রিবিউট দেখতে, নিচে দেওয়া টেবিল দেখুন।)

প্রোগ্রামটি প্রদানকারীতে যোগ করুন:

Kotlin

var programUri = context.contentResolver.insert(TvContractCompat.PreviewPrograms.CONTENT_URI,
        builder.build().toContentValues())

জাভা

Uri programUri = context.getContentResolver().insert(TvContractCompat.PreviewPrograms.CONTENT_URI,
      builder.build().toContentValues());

পরে রেফারেন্সের জন্য প্রোগ্রাম আইডি ফিরিয়ে আনুন:

Kotlin

val programId = ContentUris.parseId(programUri)

জাভা

long programId = ContentUris.parseId(programUri);

'পরবর্তী ভিডিও দেখুন' চ্যানেলে প্রোগ্রাম যোগ করা

'পরের ভিডিওটি দেখুন' চ্যানেলে প্রোগ্রাম যোগ করতে, 'পরের ভিডিওটি দেখুন' চ্যানেলে প্রোগ্রাম যোগ করুন দেখুন।

প্রোগ্রাম আপডেট করা

আপনি কোনও প্রোগ্রামের তথ্য পরিবর্তন করতে পারবেন। যেমন, আপনি কোনও সিনেমার ভাড়ার দাম আপডেট করতে চাইতে পারেন অথবা কোনও প্রোগ্রামের কতটা অংশ ব্যবহারকারী দেখেছেন তা দেখানোর জন্য প্রোগ্রেস বার আপডেট করতে চাইতে পারেন।

আপনাকে যেসব অ্যাট্রিবিউট পরিবর্তন করতে হবে সেগুলি সেট করতে PreviewProgram.Builder ব্যবহার করুন, তারপর প্রোগ্রাম আপডেট করতে getContentResolver().update কল করুন। প্রোগ্রামটি যখন প্রথম যোগ করা হয়েছিল তখন আপনি যে প্রোগ্রাম আইডিটি সেভ করেছিলেন সেটি উল্লেখ করুন:

Kotlin

context.contentResolver.update(
        TvContractCompat.buildPreviewProgramUri(programId),
                builder.build().toContentValues(), null, null
)

জাভা

context.getContentResolver().update(TvContractCompat.buildPreviewProgramUri(programId),
    builder.build().toContentValues(), null, null);

প্রোগ্রাম মোছা

Kotlin

context.contentResolver
        .delete(TvContractCompat.buildPreviewProgramUri(programId), null, null)

জাভা

context.getContentResolver().delete(TvContractCompat.buildPreviewProgramUri(programId), null, null);

ব্যবহারকারীর অ্যাকশন ম্যানেজ করা

চ্যানেল দেখানো ও যোগ করার জন্য UI প্রদান করে আপনার অ্যাপ ব্যবহারকারীদের কন্টেন্ট খুঁজে পেতে সাহায্য করতে পারে। হোম স্ক্রিনে চ্যানেলগুলি দেখানোর পরে, আপনার অ্যাপকে সেগুলির সাথে ইন্টার‍্যাকশনও ম্যানেজ করতে হবে।

চ্যানেল খোঁজা ও যোগ করা

আপনার অ্যাপ এমন একটি UI এলিমেন্ট প্রদান করতে পারে যা ব্যবহারকারীকে চ্যানেল বেছে নিতে এবং যোগ করতে দেয় (যেমন, চ্যানেল যোগ করার জন্য অনুরোধ করে এমন একটি বোতাম)।

ব্যবহারকারী নির্দিষ্ট চ্যানেলের জন্য অনুরোধ করার পরে, হোম স্ক্রিন UI-তে এটি যোগ করার জন্য ব্যবহারকারীর অনুমতি পেতে এই কোডটি এক্সিকিউট করুন:

Kotlin

val intent = Intent(TvContractCompat.ACTION_REQUEST_CHANNEL_BROWSABLE)
intent.putExtra(TvContractCompat.EXTRA_CHANNEL_ID, channelId)
try {
  activity.startActivityForResult(intent, 0)
} catch (e: ActivityNotFoundException) {
  // handle error
}

জাভা

Intent intent = new Intent(TvContractCompat.ACTION_REQUEST_CHANNEL_BROWSABLE);
intent.putExtra(TvContractCompat.EXTRA_CHANNEL_ID, channelId);
try {
   activity.startActivityForResult(intent, 0);
} catch (ActivityNotFoundException e) {
  // handle error
}

চ্যানেল অনুমোদন করার জন্য ব্যবহারকারীকে অনুরোধ জানিয়ে সিস্টেম একটি ডায়ালগ দেখায়। আপনার অ্যাক্টিভিটির onActivityResult পদ্ধতিতে অনুরোধের ফলাফল ম্যানেজ করুন (Activity.RESULT_CANCELED বা Activity.RESULT_OK)।

Android TV হোম স্ক্রিন ইভেন্ট

ব্যবহারকারী অ্যাপের মাধ্যমে প্রকাশিত প্রোগ্রাম ও চ্যানেলের সাথে ইন্টার‍্যাক্ট করলে, হোম স্ক্রিন অ্যাপে ইনটেন্ট পাঠায়:

  • ব্যবহারকারী চ্যানেলের লোগো বেছে নিলে, হোম স্ক্রিন অ্যাপে চ্যানেলের APP_LINK_INTENT_URI অ্যাট্রিবিউটে স্টোর করা Uri পাঠায়। অ্যাপটি শুধু তার মূল UI বা বেছে নেওয়া চ্যানেল সম্পর্কিত একটি ভিউ চালু করবে।
  • ব্যবহারকারী কোনও প্রোগ্রাম বেছে নিলে, হোম স্ক্রিন অ্যাপে প্রোগ্রামের INTENT_URI অ্যাট্রিবিউটে স্টোর করা Uri পাঠায়। অ্যাপে বেছে নেওয়া কন্টেন্ট চালানো উচিত।
  • ব্যবহারকারী কোনও প্রোগ্রামে আর আগ্রহী নন বলে জানাতে পারেন এবং হোম স্ক্রিনের UI থেকে সেটি সরিয়ে দিতে চাইতে পারেন। সিস্টেম UI থেকে প্রোগ্রামটি সরিয়ে দেয় এবং প্রোগ্রামের মালিকানা যে অ্যাপের কাছে আছে সেটিকে প্রোগ্রামের আইডি সহ একটি ইনটেন্ট (android.media.tv.ACTION_PREVIEW_PROGRAM_BROWSABLE_DISABLED বা android.media.tv.ACTION_WATCH_NEXT_PROGRAM_BROWSABLE_DISABLED) পাঠায়। অ্যাপটি প্রদানকারীর থেকে প্রোগ্রামটি সরিয়ে দেবে এবং এটি আবার যোগ করবে না।

হোম স্ক্রিন ব্যবহারকারীর ইন্টার‍্যাকশনের জন্য যেসব Uris পাঠায়, সেগুলির জন্য ইনটেন্ট ফিল্টার তৈরি করতে ভুলবেন না; যেমন:

<receiver
   android:name=".WatchNextProgramRemoved"
   android:enabled="true"
   android:exported="true">
   <intent-filter>
       <action android:name="android.media.tv.ACTION_WATCH_NEXT_PROGRAM_BROWSABLE_DISABLED" />
   </intent-filter>
</receiver>

বিবেচনায় রাখার মতো আরও জিনিস

  • অনেক টিভি অ্যাপে ব্যবহারকারীকে লগ-ইন করতে হয়। এই ক্ষেত্রে BroadcastReceiver যা android.media.tv.action.INITIALIZE_PROGRAMS-এর জন্য শোনে, তার উচিত যাচাই না করা ব্যবহারকারীদের জন্য চ্যানেল কন্টেন্ট সাজেস্ট করা। যেমন, আপনার অ্যাপ প্রথমে সেরা কন্টেন্ট বা বর্তমানে জনপ্রিয় কন্টেন্ট দেখাতে পারে। ব্যবহারকারী লগ-ইন করার পরে, এটি পছন্দমতো কন্টেন্ট দেখাতে পারে। ব্যবহারকারীরা লগ-ইন করার আগে অ্যাপের পক্ষে বেশি বিক্রি করার এটি একটি দারুণ সুযোগ।
  • আপনার অ্যাপ ফোরগ্রাউন্ডে না থাকলে এবং আপনাকে কোনও চ্যানেল বা প্রোগ্রাম আপডেট করতে হলে, কাজ শিডিউল করতে JobScheduler ব্যবহার করুন (JobScheduler এবং JobService দেখুন)।
  • আপনার অ্যাপ যদি খারাপ আচরণ করে (যেমন: ক্রমাগত ডেটা সহ প্রদানকারীকে স্প্যাম করা), তাহলে সিস্টেম আপনার অ্যাপের প্রদানকারীর অনুমতি প্রত্যাহার করতে পারে। নিশ্চিত করুন যে আপনি নিরাপত্তা ব্যতিক্রমগুলি পরিচালনা করতে ট্রাই-ক্যাচ ক্লজ সহ প্রদানকারীকে অ্যাক্সেস করে এমন কোডটি র‍্যাপ করেছেন।
  • প্রোগ্রাম ও চ্যানেল আপডেট করার আগে, যে ডেটা আপডেট করতে হবে তার জন্য পরিষেবা প্রদানকারীকে কোয়েরি করুন এবং ডেটা রিকনসাইল করুন। যেমন, ব্যবহারকারী UI থেকে যে প্রোগ্রাম সরাতে চান, সেটি আপডেট করার কোনও প্রয়োজন নেই। ব্যাকগ্রাউন্ড জব ব্যবহার করুন যা আগে থেকে থাকা ডেটার জন্য কোয়েরি করার পরে এবং আপনার চ্যানেলের জন্য অনুমোদনের অনুরোধ করার পরে পরিষেবা প্রদানকারীর কাছে আপনার ডেটা যোগ বা আপডেট করে। অ্যাপ চালু হওয়ার সময় এবং অ্যাপের ডেটা আপডেট করার প্রয়োজন হলে আপনি এই কাজ চালাতে পারবেন।

Kotlin

context.contentResolver
      .query(
          TvContractCompat.buildChannelUri(channelId),
              null, null, null, null).use({
                  cursor-> if (cursor != null and cursor.moveToNext()) {
                                val channel = Channel.fromCursor(cursor)
                                if (channel.isBrowsable()) {
                                    //update channel's programs
                                }
                            }
              })

জাভা

try (Cursor cursor = context.getContentResolver()
          .query(
              TvContractCompat.buildChannelUri(channelId),
              null,
              null,
              null,
              null)) {
                  if (cursor != null &amp;&amp; cursor.moveToNext()) {
                      Channel channel = Channel.fromCursor(cursor);
                      if (channel.isBrowsable()) {
                          //update channel's programs
                      }
                  }
              }
  • সব ছবির (লোগো, আইকন, কন্টেন্ট ছবি) জন্য অনন্য Uri ব্যবহার করুন। কোনও ছবি আপডেট করার সময় অন্য Uri ব্যবহার করতে ভুলবেন না। সব ছবি ক্যাশে করা হয়েছে। আপনি ছবি পরিবর্তন করার সময় Uri পরিবর্তন না করলে, পুরনো ছবিটিই দেখা যেতে থাকবে।

  • মনে রাখবেন যে WHERE ক্লজ অনুমোদিত নয় এবং WHERE ক্লজ সহ প্রদানকারীদের কল করলে একটি নিরাপত্তা ব্যতিক্রম থ্রো করবে।

অ্যাট্রিবিউট

এই বিভাগে চ্যানেল ও প্রোগ্রামের অ্যাট্রিবিউট আলাদাভাবে বর্ণনা করা হয়েছে।

চ্যানেল অ্যাট্রিবিউট

আপনাকে প্রতিটি চ্যানেলের জন্য এইসব অ্যাট্রিবিউট উল্লেখ করতে হবে:

অ্যাট্রিবিউট নোট
ধরন TYPE_PREVIEW-এ সেট করা হয়েছে।
DISPLAY_NAME চ্যানেলের নাম হিসেবে সেট করা হয়।
APP_LINK_INTENT_URI ব্যবহারকারী চ্যানেলের লোগো বেছে নিলে, সিস্টেম একটি অ্যাক্টিভিটি শুরু করার ইনটেন্ট পাঠায় যা চ্যানেলের সাথে প্রাসঙ্গিক কন্টেন্ট দেখায়। এই অ্যাট্রিবিউটটি সেই অ্যাক্টিভিটির জন্য ইনটেন্ট ফিল্টারে ব্যবহৃত Uri-তে সেট করুন।

এছাড়াও, ইন্টার্নাল অ্যাপ ব্যবহারের জন্য চ্যানেলে ছয়টি ফিল্ড রিজার্ভ করা থাকে। এইসব ফিল্ড ব্যবহার করে কী বা অন্যান্য ভ্যালু স্টোর করা যায় যা অ্যাপকে ইন্টার্নাল ডেটা স্ট্রাকচারে চ্যানেল ম্যাপ করতে সাহায্য করে:

  • INTERNAL_PROVIDER_ID
  • INTERNAL_PROVIDER_DATA
  • INTERNAL_PROVIDER_FLAG1
  • INTERNAL_PROVIDER_FLAG2
  • INTERNAL_PROVIDER_FLAG3
  • INTERNAL_PROVIDER_FLAG4

প্রোগ্রাম অ্যাট্রিবিউট

প্রতিটি ধরনের প্রোগ্রামের অ্যাট্রিবিউটের জন্য আলাদা পৃষ্ঠা দেখুন:

নমুনা কোড

হোম স্ক্রিনের সাথে ইন্টার‍্যাক্ট করে এমন অ্যাপ তৈরি করা এবং Android TV হোম স্ক্রিনে চ্যানেল ও প্রোগ্রাম যোগ করার ব্যাপারে আরও জানতে, আমাদের হোম স্ক্রিন কোডল্যাব দেখুন।