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

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

অ্যান্ড্রয়েড টিভি হোম স্ক্রিন
অ্যান্ড্রয়েড টিভি হোম স্ক্রিন

এই ডকুমেন্টটিতে দেখানো হয়েছে কীভাবে হোম স্ক্রিনে চ্যানেল ও প্রোগ্রাম যোগ করতে হয়, কন্টেন্ট আপডেট করতে হয়, ব্যবহারকারীর কার্যকলাপ পরিচালনা করতে হয় এবং আপনার ব্যবহারকারীদের জন্য সেরা অভিজ্ঞতা নিশ্চিত করতে হয়। (আপনি যদি এপিআই (API) সম্পর্কে আরও গভীরভাবে জানতে চান, তাহলে হোম স্ক্রিন কোডল্যাবটি চেষ্টা করুন এবং আই/ও ২০১৭ অ্যান্ড্রয়েড টিভি সেশনটি দেখুন।)

হোম স্ক্রিন UI

অ্যাপগুলো নতুন চ্যানেল তৈরি করতে, কোনো চ্যানেলে প্রোগ্রাম যোগ, অপসারণ ও হালনাগাদ করতে এবং চ্যানেলের প্রোগ্রামগুলোর ক্রম নিয়ন্ত্রণ করতে পারে। উদাহরণস্বরূপ, একটি অ্যাপ "What's New" নামে একটি চ্যানেল তৈরি করে নতুন উপলব্ধ প্রোগ্রামগুলোর জন্য কার্ড প্রদর্শন করতে পারে।

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

ওয়াচ নেক্সট চ্যানেল

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

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

আপনার অ্যাপ দ্বারা তৈরি চ্যানেলগুলো সবই এই জীবনচক্র অনুসরণ করে:

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

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

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

পূর্বশর্ত

অ্যান্ড্রয়েড টিভি হোম স্ক্রিন আপনার অ্যাপ দ্বারা তৈরি চ্যানেল এবং প্রোগ্রামগুলি পরিচালনা করতে অ্যান্ড্রয়েডের TvProvider API ব্যবহার করে। প্রোভাইডারের ডেটা অ্যাক্সেস করতে, আপনার অ্যাপের ম্যানিফেস্টে নিম্নলিখিত অনুমতিটি যোগ করুন:

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

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

গ্রুভি

implementation 'androidx.tvprovider:tvprovider:1.0.0'

কোটলিন

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

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

কোটলিন

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 হতে হবে। প্রয়োজন অনুযায়ী আরও অ্যাট্রিবিউট যোগ করুন।

    কোটলিন

    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. প্রোভাইডারের মধ্যে চ্যানেলটি প্রবেশ করান:

    কোটলিন

    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 থেকে চ্যানেল আইডিটি বের করুন:

    কোটলিন

    var channelId = ContentUris.parseId(channelUri)
    

    জাভা

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

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

    কোটলিন

    // 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. ডিফল্ট চ্যানেল তৈরি করুন (ঐচ্ছিক): আপনার অ্যাপ যখন তার প্রথম চ্যানেল তৈরি করে, তখন আপনি সেটিকে ডিফল্ট চ্যানেল হিসেবে সেট করতে পারেন, যাতে ব্যবহারকারীর কোনো হস্তক্ষেপ ছাড়াই এটি সঙ্গে সঙ্গে হোম স্ক্রিনে দেখা যায়। আপনার তৈরি করা অন্য কোনো চ্যানেল ব্যবহারকারী স্পষ্টভাবে নির্বাচন না করা পর্যন্ত দৃশ্যমান হবে না।

    কোটলিন

    TvContractCompat.requestChannelBrowsable(context, channelId)
    

    জাভা

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

    <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 ব্যবহার করুন। চ্যানেলটি প্রথমবার যোগ করার সময় আপনি যে চ্যানেল আইডিটি সংরক্ষণ করেছিলেন, সেটি ব্যবহার করুন:

কোটলিন

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

জাভা

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

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

একটি চ্যানেল মুছে ফেলা

কোটলিন

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

জাভা

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

প্রোগ্রাম

প্রোগ্রাম হলো একটি চ্যানেলের মধ্যে প্রদর্শিত স্বতন্ত্র কন্টেন্ট কার্ড। আপনি আপনার অ্যাপের কাস্টম চ্যানেল এবং সিস্টেম-পরিচালিত 'ওয়াচ নেক্সট' চ্যানেল—উভয়টিতেই প্রোগ্রাম প্রকাশ করতে পারেন।

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

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

কোটলিন

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);

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

প্রোভাইডারের মধ্যে প্রোগ্রামটি প্রবেশ করান:

কোটলিন

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

জাভা

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

পরবর্তী ব্যবহারের জন্য প্রোগ্রাম আইডিটি সংগ্রহ করুন:

কোটলিন

val programId = ContentUris.parseId(programUri)

জাভা

long programId = ContentUris.parseId(programUri);

ওয়াচ নেক্সট চ্যানেলে প্রোগ্রাম যোগ করা

ওয়াচ নেক্সট চ্যানেলে প্রোগ্রাম যোগ করতে, ওয়াচ নেক্সট চ্যানেলে প্রোগ্রাম যোগ করুন দেখুন।

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

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

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

কোটলিন

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

জাভা

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

একটি প্রোগ্রাম মুছে ফেলা

কোটলিন

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

জাভা

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

ব্যবহারকারীর কার্যকলাপ পরিচালনা করা

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

চ্যানেল আবিষ্কার এবং যোগ করা

আপনার অ্যাপে এমন একটি UI এলিমেন্ট থাকতে পারে যা ব্যবহারকারীকে তার চ্যানেলগুলো নির্বাচন ও যোগ করার সুযোগ দেয় (উদাহরণস্বরূপ, একটি বাটন যা চ্যানেলটি যোগ করতে অনুরোধ করে)।

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

কোটলিন

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 )।

অ্যান্ড্রয়েড টিভি হোম স্ক্রিন ইভেন্ট

যখন ব্যবহারকারী অ্যাপ দ্বারা প্রকাশিত প্রোগ্রাম এবং চ্যানেলগুলির সাথে ইন্টারঅ্যাক্ট করে, তখন হোম স্ক্রিন অ্যাপে ইনটেন্ট পাঠায়:

  • যখন ব্যবহারকারী কোনো চ্যানেলের লোগো নির্বাচন করেন, তখন হোম স্ক্রিন থেকে চ্যানেলটির 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>

অতিরিক্ত বিবেচ্য বিষয়

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

কোটলিন

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 এ সেট করা হয়েছে।
প্রদর্শনের নাম চ্যানেলের নামে সেট করা হয়েছে।
অ্যাপ_লিঙ্ক_ইন্টেন্ট_ইউআরআই যখন ব্যবহারকারী চ্যানেলের লোগো নির্বাচন করেন, তখন সিস্টেম চ্যানেল-সম্পর্কিত বিষয়বস্তু প্রদর্শনকারী একটি অ্যাক্টিভিটি শুরু করার জন্য একটি ইন্টেন্ট পাঠায়। এই অ্যাট্রিবিউটটিকে সেই অ্যাক্টিভিটির ইন্টেন্ট ফিল্টারে ব্যবহৃত Uri-তে সেট করুন।

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

  • অভ্যন্তরীণ_প্রদানকারী_আইডি
  • অভ্যন্তরীণ_প্রদানকারী_ডেটা
  • অভ্যন্তরীণ_প্রদানকারী_ফ্ল্যাগ১
  • অভ্যন্তরীণ_প্রদানকারী_ফ্ল্যাগ২
  • অভ্যন্তরীণ_প্রদানকারী_ফ্ল্যাগ৩
  • অভ্যন্তরীণ_প্রদানকারী_ফ্ল্যাগ৪

প্রোগ্রামের বৈশিষ্ট্য

প্রতিটি প্রোগ্রামের ধরণ সম্পর্কিত বৈশিষ্ট্যগুলো জানতে স্বতন্ত্র পৃষ্ঠাগুলো দেখুন:

নমুনা কোড

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