টিভি কন্ট্রোলার পরিচালনা করুন

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

এই নির্দেশিকায় টিভি ডিভাইসের কন্ট্রোলার পরিচালনার জন্য প্রয়োজনীয় শর্তাবলী নিয়ে আলোচনা করা হয়েছে।

ডি-প্যাড ন্যূনতম নিয়ন্ত্রণ

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

টিভি ডিভাইসের ডি-প্যাড কন্ট্রোলার দিয়ে নেভিগেশন সম্পর্কে আরও তথ্যের জন্য, টিভি নেভিগেশন দেখুন।

হ্যান্ডেল কন্ট্রোলার সংযোগ বিচ্ছিন্ন করে

টিভির কন্ট্রোলারগুলো প্রায়শই ব্লুটুথ ডিভাইস হয়ে থাকে, যা শক্তি সাশ্রয়ের জন্য পর্যায়ক্রমে স্লিপ মোডে চলে যেতে পারে এবং টিভি ডিভাইস থেকে সংযোগ বিচ্ছিন্ন করতে পারে। এর মানে হলো, যদি কোনো অ্যাপ এই পুনঃসংযোগের ঘটনাগুলো সামলানোর জন্য কনফিগার করা না থাকে, তবে সেটির কার্যক্রমে বাধা আসতে পারে বা সেটি পুনরায় চালু হতে পারে। এই ঘটনাগুলো নিম্নলিখিত যেকোনো পরিস্থিতিতে ঘটতে পারে:

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

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

<activity
  android:name="com.example.android.TvActivity"
  android:label="@string/app_name"
  android:configChanges="keyboard|keyboardHidden|navigation"
  android:theme="@style/Theme.Leanback">

  <intent-filter>
    <action android:name="android.intent.action.MAIN" />
    <category android:name="android.intent.category.LEANBACK_LAUNCHER" />
  </intent-filter>
  ...
</activity>

এই কনফিগারেশন পরিবর্তনের ফলে অ্যাপটি অ্যান্ড্রয়েড ফ্রেমওয়ার্ক দ্বারা পুনরায় চালু না হয়ে, একটি পুনঃসংযোগ ইভেন্টের মাধ্যমে চলতে থাকে—যা ব্যবহারকারীর জন্য একটি ভালো অভিজ্ঞতা নয়।

ডি-প্যাড ইনপুটের বিভিন্নতা পরিচালনা করুন

টিভি ব্যবহারকারীদের কাছে একাধিক ধরনের কন্ট্রোলার থাকতে পারে যা তারা তাদের টিভির সাথে ব্যবহার করেন। উদাহরণস্বরূপ, একজন ব্যবহারকারীর কাছে একটি সাধারণ ডি-প্যাড কন্ট্রোলার এবং একটি গেম কন্ট্রোলার উভয়ই থাকতে পারে। ডি-প্যাড ফাংশনের জন্য ব্যবহৃত হওয়ার সময় একটি গেম কন্ট্রোলারের দেওয়া কী কোডগুলো, একটি সাধারণ ডি-প্যাড থেকে পাঠানো কী কোডগুলো থেকে ভিন্ন হতে পারে।

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

বাটন ইভেন্টগুলি পরিচালনা করুন

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

টিভি UI ইভেন্টগুলি

নিম্নলিখিত সারণীতে দেখানো অনুযায়ী, যে বাটনগুলো KeyEvent টাইপ তৈরি করে সেগুলোতে TV UI আচরণ নির্ধারণ করুন:

KeyEvent আচরণ
KEYCODE_BUTTON_B , KEYCODE_BACK ফিরে যান
KEYCODE_BUTTON_SELECT , KEYCODE_BUTTON_A , KEYCODE_ENTER , KEYCODE_DPAD_CENTER , KEYCODE_NUMPAD_ENTER নির্বাচন
KEYCODE_DPAD_UP , KEYCODE_DPAD_DOWN , KEYCODE_DPAD_LEFT , KEYCODE_DPAD_RIGHT নেভিগেশন

মিডিয়া ইভেন্ট

যখন ব্যবহারকারী মিডিয়া দেখছেন, তখন নিচের টেবিলে দেখানো KeyEvent টাইপ তৈরি করে এমন বাটনগুলিতে আচরণ নির্ধারণ করুন। যদি আপনার অ্যাপ একটি MediaSession নিয়ন্ত্রণ করে, তাহলে টেবিলে দেখানো MediaControllerCompat.TransportControls মেথডগুলির মধ্যে একটি কল করার জন্য একটি MediaControllerAdapter ব্যবহার করুন। মনে রাখবেন যে এই প্রসঙ্গে সিলেকশন বাটনগুলি প্লে বা পজ বাটন হিসাবে কাজ করে।

KeyEvent ট্রান্সপোর্টকন্ট্রোলস কল আচরণ
BUTTON_SELECT , BUTTON_A , ENTER , DPAD_CENTER , KEYCODE_NUMPAD_ENTER play() খেলা
BUTTON_START , BUTTON_SELECT , BUTTON_A , ENTER , DPAD_CENTER , KEYCODE_NUMPAD_ENTER pause() বিরতি
BUTTON_R1 skipToNext() পরবর্তী ধাপে যান
BUTTON_L1 skipToPrevious() পূর্ববর্তীতে যান
DPAD_RIGHT , BUTTON_R2 , AXIS_RTRIGGER , AXIS_THROTTLE fastForward() দ্রুত এগিয়ে যান
DPAD_LEFT , BUTTON_L2 , AXIS_LTRIGGER , AXIS_BRAKE rewind() রিওয়াইন্ড
প্রযোজ্য নয় stop() থামুন

দ্রষ্টব্য: যখন আপনি একটি MediaSession ব্যবহার করেন, তখন KEYCODE_MEDIA_PLAY বা KEYCODE_MEDIA_PAUSE মতো মিডিয়া-নির্দিষ্ট বাটনগুলির হ্যান্ডলিং ওভাররাইড করবেন না। সিস্টেম স্বয়ংক্রিয়ভাবে উপযুক্ত MediaSession.Callback মেথডটি ট্রিগার করে।

ব্যাক বাটনের যথাযথ আচরণ প্রদান করুন

ব্যাক বাটনটি কখনোই টগল হিসেবে কাজ করবে না। উদাহরণস্বরূপ, এটি দিয়ে একই সাথে কোনো মেনু খুলবেন না বা বন্ধ করবেন না। প্লেয়ার পূর্বে যে স্ক্রিনগুলোতে ছিল, সেগুলোর মধ্যে দিয়ে ব্রেডক্রাম্ব-এর মতো করে পেছনে যাওয়ার জন্য শুধু এটি ব্যবহার করুন।

যেহেতু ব্যাক বাটনটি শুধুমাত্র রৈখিক, অর্থাৎ পেছনের দিকে যাওয়ার সুবিধা দেয়, তাই আপনি এটি ব্যবহার করে অন্য কোনো বাটন দিয়ে খোলা অ্যাপের ভেতরের মেনু থেকে বেরিয়ে অ্যাপে ফিরে আসতে পারেন। পরপর ব্যাক বাটন চাপলে শেষ পর্যন্ত অবশ্যই অ্যান্ড্রয়েড টিভির হোম স্ক্রিনে পৌঁছাতে হবে। উদাহরণস্বরূপ: গেম প্লে > গেম পজ স্ক্রিন > গেমের মূল স্ক্রিন > অ্যান্ড্রয়েড টিভির হোম স্ক্রিন অথবা টিভি শো প্লে > টিভি অ্যাপের মূল স্ক্রিন > অ্যান্ড্রয়েড টিভির হোম স্ক্রিন।

ন্যাভিগেশনের ডিজাইন সম্পর্কে আরও তথ্যের জন্য, ‘ডিজাইনিং ব্যাক অ্যান্ড আপ ন্যাভিগেশন’ দেখুন। বাস্তবায়ন সম্পর্কে জানতে, ‘প্রোভাইডিং প্রপার ব্যাক ন্যাভিগেশন’ দেখুন।

গেমের জন্য কন্ট্রোলারগুলো পরিচালনা করুন

ডি-প্যাড নিয়ন্ত্রণ সমর্থন করে

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

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

  • কন্ট্রোলারের প্রয়োজনীয়তা আগে থেকেই জানিয়ে দিন: কন্ট্রোলার সম্পর্কে আপনার প্রত্যাশাগুলো খেলোয়াড়কে জানাতে আপনার গুগল প্লে বিবরণ ব্যবহার করুন। যদি কোনো গেম শুধু ডি-প্যাডযুক্ত কন্ট্রোলারের চেয়ে জয়স্টিকযুক্ত গেমপ্যাডের জন্য বেশি উপযুক্ত হয়, তবে তা স্পষ্ট করে দিন। কোনো খেলোয়াড় যদি গেমের জন্য অনুপযুক্ত কন্ট্রোলার ব্যবহার করেন, তবে তার অভিজ্ঞতা খারাপ হতে পারে এবং তিনি আপনার গেমটিকে খারাপ রেটিং দিতে পারেন।
  • সামঞ্জস্যপূর্ণ বাটন ম্যাপিং ব্যবহার করুন: একটি ভালো ইউজার এক্সপেরিয়েন্সের জন্য স্বজ্ঞাত বাটন ম্যাপিং অত্যন্ত গুরুত্বপূর্ণ। উদাহরণস্বরূপ, গ্রহণ করার জন্য A বাটন এবং বাতিল করার জন্য B বাটন ব্যবহার করে প্রচলিত রীতি মেনে চলুন। আপনি রিম্যাপ করার সুবিধার মাধ্যমে নমনীয়তাও প্রদান করতে পারেন। বাটন ম্যাপিং সম্পর্কে আরও তথ্যের জন্য, ‘Handle controller actions’ দেখুন।
  • কন্ট্রোলারের সক্ষমতা শনাক্ত করুন এবং সেই অনুযায়ী সমন্বয় করুন: কন্ট্রোলার এবং গেমের মধ্যে সর্বোত্তম সামঞ্জস্য আনতে কন্ট্রোলারের সক্ষমতা সম্পর্কে জিজ্ঞাসা করুন। উদাহরণস্বরূপ, আপনি হয়তো চাইবেন যে একজন খেলোয়াড় বাতাসে কন্ট্রোলার নাড়িয়ে কোনো বস্তুকে নিয়ন্ত্রণ করুক, কিন্তু যদি খেলোয়াড়ের কন্ট্রোলারে অ্যাক্সেলেরোমিটার এবং জাইরোস্কোপ হার্ডওয়্যার না থাকে, তবে নাড়ানো কাজ করবে না। কন্ট্রোলারকে জিজ্ঞাসা করুন এবং, যদি মোশন ডিটেকশন সমর্থিত না হয়, তবে একটি বিকল্প, উপলব্ধ কন্ট্রোল স্কিমে পরিবর্তন করুন। কন্ট্রোলারের সক্ষমতা জিজ্ঞাসা করার বিষয়ে আরও তথ্যের জন্য, "সাপোর্ট কন্ট্রোলারস অ্যাক্রস অ্যান্ড্রয়েড ভার্সনস" দেখুন।

উপযুক্ত বোতাম ব্যবহার করুন

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

একাধিক কন্ট্রোলার পরিচালনা করুন

যখন একাধিক খেলোয়াড় নিজ নিজ কন্ট্রোলার দিয়ে একটি গেম খেলে, তখন প্রতিটি খেলোয়াড়-কন্ট্রোলার জোড়াকে ম্যাপ করা গুরুত্বপূর্ণ। কন্ট্রোলার-নম্বর শনাক্তকরণ কীভাবে বাস্তবায়ন করতে হয় সে সম্পর্কে তথ্যের জন্য, getControllerNumber() দেখুন।

হ্যান্ডেল কন্ট্রোলার সংযোগ বিচ্ছিন্ন করে

গেম খেলার মাঝখানে কন্ট্রোলার সংযোগ বিচ্ছিন্ন হয়ে গেলে, গেমটি পজ করুন এবং সংযোগ বিচ্ছিন্ন হওয়া প্লেয়ারকে তার কন্ট্রোলার পুনরায় সংযোগ করতে বলার জন্য একটি ডায়ালগ বক্স দেখান।

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

কন্ট্রোলার নির্দেশাবলী দেখান

আপনার গেমে যদি ভিজ্যুয়াল গেম কন্ট্রোল নির্দেশনা থাকে, তাহলে ব্র্যান্ডিং-মুক্ত কন্ট্রোলার ইমেজ ব্যবহার করুন এবং শুধুমাত্র অ্যান্ড্রয়েডের সাথে সামঞ্জস্যপূর্ণ বাটনগুলো অন্তর্ভুক্ত করুন।

অ্যান্ড্রয়েড-উপযোগী কন্ট্রোলারের নমুনা ছবির জন্য, অ্যান্ড্রয়েড টিভি গেমপ্যাড টেমপ্লেট (ZIP) ডাউনলোড করুন। এতে একটি PNG ফাইল এবং একটি Adobe® Illustrator® ফাইল হিসেবে অন্তর্ভুক্ত রয়েছে—যা চিত্র ১-এ দেখানো হয়েছে—এবং এগুলো কালো পটভূমিতে একটি সাদা কন্ট্রোলার ও সাদা পটভূমিতে একটি কালো কন্ট্রোলারের নমুনা।

চিত্র ১. অ্যান্ড্রয়েড টিভি গেমপ্যাড টেমপ্লেট ব্যবহার করে তৈরি কন্ট্রোলার নির্দেশাবলীর নমুনা।
,

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

এই নির্দেশিকায় টিভি ডিভাইসের কন্ট্রোলার পরিচালনার জন্য প্রয়োজনীয় শর্তাবলী নিয়ে আলোচনা করা হয়েছে।

ডি-প্যাড ন্যূনতম নিয়ন্ত্রণ

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

টিভি ডিভাইসের ডি-প্যাড কন্ট্রোলার দিয়ে নেভিগেশন সম্পর্কে আরও তথ্যের জন্য, টিভি নেভিগেশন দেখুন।

হ্যান্ডেল কন্ট্রোলার সংযোগ বিচ্ছিন্ন করে

টিভির কন্ট্রোলারগুলো প্রায়শই ব্লুটুথ ডিভাইস হয়ে থাকে, যা শক্তি সাশ্রয়ের জন্য পর্যায়ক্রমে স্লিপ মোডে চলে যেতে পারে এবং টিভি ডিভাইস থেকে সংযোগ বিচ্ছিন্ন করতে পারে। এর মানে হলো, যদি কোনো অ্যাপ এই পুনঃসংযোগের ঘটনাগুলো সামলানোর জন্য কনফিগার করা না থাকে, তবে সেটির কার্যক্রমে বাধা আসতে পারে বা সেটি পুনরায় চালু হতে পারে। এই ঘটনাগুলো নিম্নলিখিত যেকোনো পরিস্থিতিতে ঘটতে পারে:

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

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

<activity
  android:name="com.example.android.TvActivity"
  android:label="@string/app_name"
  android:configChanges="keyboard|keyboardHidden|navigation"
  android:theme="@style/Theme.Leanback">

  <intent-filter>
    <action android:name="android.intent.action.MAIN" />
    <category android:name="android.intent.category.LEANBACK_LAUNCHER" />
  </intent-filter>
  ...
</activity>

এই কনফিগারেশন পরিবর্তনের ফলে অ্যাপটি অ্যান্ড্রয়েড ফ্রেমওয়ার্ক দ্বারা পুনরায় চালু না হয়ে, একটি পুনঃসংযোগ ইভেন্টের মাধ্যমে চলতে থাকে—যা ব্যবহারকারীর জন্য একটি ভালো অভিজ্ঞতা নয়।

ডি-প্যাড ইনপুটের বিভিন্নতা পরিচালনা করুন

টিভি ব্যবহারকারীদের কাছে একাধিক ধরনের কন্ট্রোলার থাকতে পারে যা তারা তাদের টিভির সাথে ব্যবহার করেন। উদাহরণস্বরূপ, একজন ব্যবহারকারীর কাছে একটি সাধারণ ডি-প্যাড কন্ট্রোলার এবং একটি গেম কন্ট্রোলার উভয়ই থাকতে পারে। ডি-প্যাড ফাংশনের জন্য ব্যবহৃত হওয়ার সময় একটি গেম কন্ট্রোলারের দেওয়া কী কোডগুলো, একটি সাধারণ ডি-প্যাড থেকে পাঠানো কী কোডগুলো থেকে ভিন্ন হতে পারে।

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

বাটন ইভেন্টগুলি পরিচালনা করুন

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

টিভি UI ইভেন্টগুলি

নিম্নলিখিত সারণীতে দেখানো অনুযায়ী, যে বাটনগুলো KeyEvent টাইপ তৈরি করে সেগুলোতে TV UI আচরণ নির্ধারণ করুন:

KeyEvent আচরণ
KEYCODE_BUTTON_B , KEYCODE_BACK ফিরে যান
KEYCODE_BUTTON_SELECT , KEYCODE_BUTTON_A , KEYCODE_ENTER , KEYCODE_DPAD_CENTER , KEYCODE_NUMPAD_ENTER নির্বাচন
KEYCODE_DPAD_UP , KEYCODE_DPAD_DOWN , KEYCODE_DPAD_LEFT , KEYCODE_DPAD_RIGHT নেভিগেশন

মিডিয়া ইভেন্ট

যখন ব্যবহারকারী মিডিয়া দেখছেন, তখন নিচের টেবিলে দেখানো KeyEvent টাইপ তৈরি করে এমন বাটনগুলিতে আচরণ নির্ধারণ করুন। যদি আপনার অ্যাপ একটি MediaSession নিয়ন্ত্রণ করে, তাহলে টেবিলে দেখানো MediaControllerCompat.TransportControls মেথডগুলির মধ্যে একটি কল করার জন্য একটি MediaControllerAdapter ব্যবহার করুন। মনে রাখবেন যে এই প্রসঙ্গে সিলেকশন বাটনগুলি প্লে বা পজ বাটন হিসাবে কাজ করে।

KeyEvent ট্রান্সপোর্টকন্ট্রোলস কল আচরণ
BUTTON_SELECT , BUTTON_A , ENTER , DPAD_CENTER , KEYCODE_NUMPAD_ENTER play() খেলা
BUTTON_START , BUTTON_SELECT , BUTTON_A , ENTER , DPAD_CENTER , KEYCODE_NUMPAD_ENTER pause() বিরতি
BUTTON_R1 skipToNext() পরবর্তী ধাপে যান
BUTTON_L1 skipToPrevious() পূর্ববর্তীতে যান
DPAD_RIGHT , BUTTON_R2 , AXIS_RTRIGGER , AXIS_THROTTLE fastForward() দ্রুত এগিয়ে যান
DPAD_LEFT , BUTTON_L2 , AXIS_LTRIGGER , AXIS_BRAKE rewind() রিওয়াইন্ড
প্রযোজ্য নয় stop() থামুন

দ্রষ্টব্য: যখন আপনি একটি MediaSession ব্যবহার করেন, তখন KEYCODE_MEDIA_PLAY বা KEYCODE_MEDIA_PAUSE মতো মিডিয়া-নির্দিষ্ট বাটনগুলির হ্যান্ডলিং ওভাররাইড করবেন না। সিস্টেম স্বয়ংক্রিয়ভাবে উপযুক্ত MediaSession.Callback মেথডটি ট্রিগার করে।

ব্যাক বাটনের যথাযথ আচরণ প্রদান করুন

ব্যাক বাটনটি কখনোই টগল হিসেবে কাজ করবে না। উদাহরণস্বরূপ, এটি দিয়ে একই সাথে কোনো মেনু খুলবেন না বা বন্ধ করবেন না। প্লেয়ার পূর্বে যে স্ক্রিনগুলোতে ছিল, সেগুলোর মধ্যে দিয়ে ব্রেডক্রাম্ব-এর মতো করে পেছনে যাওয়ার জন্য শুধু এটি ব্যবহার করুন।

যেহেতু ব্যাক বাটনটি শুধুমাত্র রৈখিক, অর্থাৎ পেছনের দিকে যাওয়ার সুবিধা দেয়, তাই আপনি এটি ব্যবহার করে অন্য কোনো বাটন দিয়ে খোলা অ্যাপের ভেতরের মেনু থেকে বেরিয়ে অ্যাপে ফিরে আসতে পারেন। পরপর ব্যাক বাটন চাপলে শেষ পর্যন্ত অবশ্যই অ্যান্ড্রয়েড টিভির হোম স্ক্রিনে পৌঁছাতে হবে। উদাহরণস্বরূপ: গেম প্লে > গেম পজ স্ক্রিন > গেমের মূল স্ক্রিন > অ্যান্ড্রয়েড টিভির হোম স্ক্রিন অথবা টিভি শো প্লে > টিভি অ্যাপের মূল স্ক্রিন > অ্যান্ড্রয়েড টিভির হোম স্ক্রিন।

ন্যাভিগেশনের ডিজাইন সম্পর্কে আরও তথ্যের জন্য, ‘ডিজাইনিং ব্যাক অ্যান্ড আপ ন্যাভিগেশন’ দেখুন। বাস্তবায়ন সম্পর্কে জানতে, ‘প্রোভাইডিং প্রপার ব্যাক ন্যাভিগেশন’ দেখুন।

গেমের জন্য কন্ট্রোলারগুলো পরিচালনা করুন

ডি-প্যাড নিয়ন্ত্রণ সমর্থন করে

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

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

  • কন্ট্রোলারের প্রয়োজনীয়তা আগে থেকেই জানিয়ে দিন: কন্ট্রোলার সম্পর্কে আপনার প্রত্যাশাগুলো খেলোয়াড়কে জানাতে আপনার গুগল প্লে বিবরণ ব্যবহার করুন। যদি কোনো গেম শুধু ডি-প্যাডযুক্ত কন্ট্রোলারের চেয়ে জয়স্টিকযুক্ত গেমপ্যাডের জন্য বেশি উপযুক্ত হয়, তবে তা স্পষ্ট করে দিন। কোনো খেলোয়াড় যদি গেমের জন্য অনুপযুক্ত কন্ট্রোলার ব্যবহার করেন, তবে তার অভিজ্ঞতা খারাপ হতে পারে এবং তিনি আপনার গেমটিকে খারাপ রেটিং দিতে পারেন।
  • সামঞ্জস্যপূর্ণ বাটন ম্যাপিং ব্যবহার করুন: একটি ভালো ইউজার এক্সপেরিয়েন্সের জন্য স্বজ্ঞাত বাটন ম্যাপিং অত্যন্ত গুরুত্বপূর্ণ। উদাহরণস্বরূপ, গ্রহণ করার জন্য A বাটন এবং বাতিল করার জন্য B বাটন ব্যবহার করে প্রচলিত রীতি মেনে চলুন। আপনি রিম্যাপ করার সুবিধার মাধ্যমে নমনীয়তাও প্রদান করতে পারেন। বাটন ম্যাপিং সম্পর্কে আরও তথ্যের জন্য, ‘Handle controller actions’ দেখুন।
  • কন্ট্রোলারের সক্ষমতা শনাক্ত করুন এবং সেই অনুযায়ী সমন্বয় করুন: কন্ট্রোলার এবং গেমের মধ্যে সর্বোত্তম সামঞ্জস্য আনতে কন্ট্রোলারের সক্ষমতা সম্পর্কে জিজ্ঞাসা করুন। উদাহরণস্বরূপ, আপনি হয়তো চাইবেন যে একজন খেলোয়াড় বাতাসে কন্ট্রোলার নাড়িয়ে কোনো বস্তুকে নিয়ন্ত্রণ করুক, কিন্তু যদি খেলোয়াড়ের কন্ট্রোলারে অ্যাক্সেলেরোমিটার এবং জাইরোস্কোপ হার্ডওয়্যার না থাকে, তবে নাড়ানো কাজ করবে না। কন্ট্রোলারকে জিজ্ঞাসা করুন এবং, যদি মোশন ডিটেকশন সমর্থিত না হয়, তবে একটি বিকল্প, উপলব্ধ কন্ট্রোল স্কিমে পরিবর্তন করুন। কন্ট্রোলারের সক্ষমতা জিজ্ঞাসা করার বিষয়ে আরও তথ্যের জন্য, "সাপোর্ট কন্ট্রোলারস অ্যাক্রস অ্যান্ড্রয়েড ভার্সনস" দেখুন।

উপযুক্ত বোতাম ব্যবহার করুন

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

একাধিক কন্ট্রোলার পরিচালনা করুন

যখন একাধিক খেলোয়াড় নিজ নিজ কন্ট্রোলার দিয়ে একটি গেম খেলে, তখন প্রতিটি খেলোয়াড়-কন্ট্রোলার জোড়াকে ম্যাপ করা গুরুত্বপূর্ণ। কন্ট্রোলার-নম্বর শনাক্তকরণ কীভাবে বাস্তবায়ন করতে হয় সে সম্পর্কে তথ্যের জন্য, getControllerNumber() দেখুন।

হ্যান্ডেল কন্ট্রোলার সংযোগ বিচ্ছিন্ন করে

গেম খেলার মাঝখানে কন্ট্রোলার সংযোগ বিচ্ছিন্ন হয়ে গেলে, গেমটি পজ করুন এবং সংযোগ বিচ্ছিন্ন হওয়া প্লেয়ারকে তার কন্ট্রোলার পুনরায় সংযোগ করতে বলার জন্য একটি ডায়ালগ বক্স দেখান।

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

কন্ট্রোলার নির্দেশাবলী দেখান

আপনার গেমে যদি ভিজ্যুয়াল গেম কন্ট্রোল নির্দেশনা থাকে, তাহলে ব্র্যান্ডিং-মুক্ত কন্ট্রোলার ইমেজ ব্যবহার করুন এবং শুধুমাত্র অ্যান্ড্রয়েডের সাথে সামঞ্জস্যপূর্ণ বাটনগুলো অন্তর্ভুক্ত করুন।

অ্যান্ড্রয়েড-উপযোগী কন্ট্রোলারের নমুনা ছবির জন্য, অ্যান্ড্রয়েড টিভি গেমপ্যাড টেমপ্লেট (ZIP) ডাউনলোড করুন। এতে একটি PNG ফাইল এবং একটি Adobe® Illustrator® ফাইল হিসেবে অন্তর্ভুক্ত রয়েছে—যা চিত্র ১-এ দেখানো হয়েছে—এবং এগুলো কালো পটভূমিতে একটি সাদা কন্ট্রোলার ও সাদা পটভূমিতে একটি কালো কন্ট্রোলারের নমুনা।

চিত্র ১. অ্যান্ড্রয়েড টিভি গেমপ্যাড টেমপ্লেট ব্যবহার করে তৈরি কন্ট্রোলার নির্দেশাবলীর নমুনা।
,

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

এই নির্দেশিকায় টিভি ডিভাইসের কন্ট্রোলার পরিচালনার জন্য প্রয়োজনীয় শর্তাবলী নিয়ে আলোচনা করা হয়েছে।

ডি-প্যাড ন্যূনতম নিয়ন্ত্রণ

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

টিভি ডিভাইসের ডি-প্যাড কন্ট্রোলার দিয়ে নেভিগেশন সম্পর্কে আরও তথ্যের জন্য, টিভি নেভিগেশন দেখুন।

হ্যান্ডেল কন্ট্রোলার সংযোগ বিচ্ছিন্ন করে

টিভির কন্ট্রোলারগুলো প্রায়শই ব্লুটুথ ডিভাইস হয়ে থাকে, যা শক্তি সাশ্রয়ের জন্য পর্যায়ক্রমে স্লিপ মোডে চলে যেতে পারে এবং টিভি ডিভাইস থেকে সংযোগ বিচ্ছিন্ন করতে পারে। এর মানে হলো, যদি কোনো অ্যাপ এই পুনঃসংযোগের ঘটনাগুলো সামলানোর জন্য কনফিগার করা না থাকে, তবে সেটির কার্যক্রমে বাধা আসতে পারে বা সেটি পুনরায় চালু হতে পারে। এই ঘটনাগুলো নিম্নলিখিত যেকোনো পরিস্থিতিতে ঘটতে পারে:

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

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

<activity
  android:name="com.example.android.TvActivity"
  android:label="@string/app_name"
  android:configChanges="keyboard|keyboardHidden|navigation"
  android:theme="@style/Theme.Leanback">

  <intent-filter>
    <action android:name="android.intent.action.MAIN" />
    <category android:name="android.intent.category.LEANBACK_LAUNCHER" />
  </intent-filter>
  ...
</activity>

এই কনফিগারেশন পরিবর্তনের ফলে অ্যাপটি অ্যান্ড্রয়েড ফ্রেমওয়ার্ক দ্বারা পুনরায় চালু না হয়ে, একটি পুনঃসংযোগ ইভেন্টের মাধ্যমে চলতে থাকে—যা ব্যবহারকারীর জন্য একটি ভালো অভিজ্ঞতা নয়।

ডি-প্যাড ইনপুটের বিভিন্নতা পরিচালনা করুন

টিভি ব্যবহারকারীদের কাছে একাধিক ধরনের কন্ট্রোলার থাকতে পারে যা তারা তাদের টিভির সাথে ব্যবহার করেন। উদাহরণস্বরূপ, একজন ব্যবহারকারীর কাছে একটি সাধারণ ডি-প্যাড কন্ট্রোলার এবং একটি গেম কন্ট্রোলার উভয়ই থাকতে পারে। ডি-প্যাড ফাংশনের জন্য ব্যবহৃত হওয়ার সময় একটি গেম কন্ট্রোলারের দেওয়া কী কোডগুলো, একটি সাধারণ ডি-প্যাড থেকে পাঠানো কী কোডগুলো থেকে ভিন্ন হতে পারে।

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

বাটন ইভেন্টগুলি পরিচালনা করুন

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

টিভি UI ইভেন্টগুলি

নিম্নলিখিত সারণীতে দেখানো অনুযায়ী, যে বাটনগুলো KeyEvent টাইপ তৈরি করে সেগুলোতে TV UI আচরণ নির্ধারণ করুন:

KeyEvent আচরণ
KEYCODE_BUTTON_B , KEYCODE_BACK ফিরে যান
KEYCODE_BUTTON_SELECT , KEYCODE_BUTTON_A , KEYCODE_ENTER , KEYCODE_DPAD_CENTER , KEYCODE_NUMPAD_ENTER নির্বাচন
KEYCODE_DPAD_UP , KEYCODE_DPAD_DOWN , KEYCODE_DPAD_LEFT , KEYCODE_DPAD_RIGHT নেভিগেশন

মিডিয়া ইভেন্ট

যখন ব্যবহারকারী মিডিয়া দেখছেন, তখন নিচের টেবিলে দেখানো KeyEvent টাইপ তৈরি করে এমন বাটনগুলিতে আচরণ নির্ধারণ করুন। যদি আপনার অ্যাপ একটি MediaSession নিয়ন্ত্রণ করে, তাহলে টেবিলে দেখানো MediaControllerCompat.TransportControls মেথডগুলির মধ্যে একটি কল করার জন্য একটি MediaControllerAdapter ব্যবহার করুন। মনে রাখবেন যে এই প্রসঙ্গে সিলেকশন বাটনগুলি প্লে বা পজ বাটন হিসাবে কাজ করে।

KeyEvent ট্রান্সপোর্টকন্ট্রোলস কল আচরণ
BUTTON_SELECT , BUTTON_A , ENTER , DPAD_CENTER , KEYCODE_NUMPAD_ENTER play() খেলা
BUTTON_START , BUTTON_SELECT , BUTTON_A , ENTER , DPAD_CENTER , KEYCODE_NUMPAD_ENTER pause() বিরতি
BUTTON_R1 skipToNext() পরবর্তী ধাপে যান
BUTTON_L1 skipToPrevious() পূর্ববর্তীতে যান
DPAD_RIGHT , BUTTON_R2 , AXIS_RTRIGGER , AXIS_THROTTLE fastForward() দ্রুত এগিয়ে যান
DPAD_LEFT , BUTTON_L2 , AXIS_LTRIGGER , AXIS_BRAKE rewind() রিওয়াইন্ড
প্রযোজ্য নয় stop() থামুন

দ্রষ্টব্য: যখন আপনি একটি MediaSession ব্যবহার করেন, তখন KEYCODE_MEDIA_PLAY বা KEYCODE_MEDIA_PAUSE মতো মিডিয়া-নির্দিষ্ট বাটনগুলির হ্যান্ডলিং ওভাররাইড করবেন না। সিস্টেম স্বয়ংক্রিয়ভাবে উপযুক্ত MediaSession.Callback মেথডটি ট্রিগার করে।

ব্যাক বাটনের যথাযথ আচরণ প্রদান করুন

ব্যাক বাটনটি কখনোই টগল হিসেবে কাজ করবে না। উদাহরণস্বরূপ, এটি দিয়ে একই সাথে কোনো মেনু খুলবেন না বা বন্ধ করবেন না। প্লেয়ার পূর্বে যে স্ক্রিনগুলোতে ছিল, সেগুলোর মধ্যে দিয়ে ব্রেডক্রাম্ব-এর মতো করে পেছনে যাওয়ার জন্য শুধু এটি ব্যবহার করুন।

যেহেতু ব্যাক বাটনটি শুধুমাত্র রৈখিক, অর্থাৎ পেছনের দিকে যাওয়ার সুবিধা দেয়, তাই আপনি এটি ব্যবহার করে অন্য কোনো বাটন দিয়ে খোলা অ্যাপের ভেতরের মেনু থেকে বেরিয়ে অ্যাপে ফিরে আসতে পারেন। পরপর ব্যাক বাটন চাপলে শেষ পর্যন্ত অবশ্যই অ্যান্ড্রয়েড টিভির হোম স্ক্রিনে পৌঁছাতে হবে। উদাহরণস্বরূপ: গেম প্লে > গেম পজ স্ক্রিন > গেমের মূল স্ক্রিন > অ্যান্ড্রয়েড টিভির হোম স্ক্রিন অথবা টিভি শো প্লে > টিভি অ্যাপের মূল স্ক্রিন > অ্যান্ড্রয়েড টিভির হোম স্ক্রিন।

ন্যাভিগেশনের ডিজাইন সম্পর্কে আরও তথ্যের জন্য, ‘ডিজাইনিং ব্যাক অ্যান্ড আপ ন্যাভিগেশন’ দেখুন। বাস্তবায়ন সম্পর্কে জানতে, ‘প্রোভাইডিং প্রপার ব্যাক ন্যাভিগেশন’ দেখুন।

গেমের জন্য কন্ট্রোলারগুলো পরিচালনা করুন

ডি-প্যাড নিয়ন্ত্রণ সমর্থন করে

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

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

  • কন্ট্রোলারের প্রয়োজনীয়তা আগে থেকেই জানিয়ে দিন: কন্ট্রোলার সম্পর্কে আপনার প্রত্যাশাগুলো খেলোয়াড়কে জানাতে আপনার গুগল প্লে বিবরণ ব্যবহার করুন। যদি কোনো গেম শুধু ডি-প্যাডযুক্ত কন্ট্রোলারের চেয়ে জয়স্টিকযুক্ত গেমপ্যাডের জন্য বেশি উপযুক্ত হয়, তবে তা স্পষ্ট করে দিন। কোনো খেলোয়াড় যদি গেমের জন্য অনুপযুক্ত কন্ট্রোলার ব্যবহার করেন, তবে তার অভিজ্ঞতা খারাপ হতে পারে এবং তিনি আপনার গেমটিকে খারাপ রেটিং দিতে পারেন।
  • সামঞ্জস্যপূর্ণ বাটন ম্যাপিং ব্যবহার করুন: একটি ভালো ইউজার এক্সপেরিয়েন্সের জন্য স্বজ্ঞাত বাটন ম্যাপিং অত্যন্ত গুরুত্বপূর্ণ। উদাহরণস্বরূপ, গ্রহণ করার জন্য A বাটন এবং বাতিল করার জন্য B বাটন ব্যবহার করে প্রচলিত রীতি মেনে চলুন। আপনি রিম্যাপ করার সুবিধার মাধ্যমে নমনীয়তাও প্রদান করতে পারেন। বাটন ম্যাপিং সম্পর্কে আরও তথ্যের জন্য, ‘Handle controller actions’ দেখুন।
  • কন্ট্রোলারের সক্ষমতা শনাক্ত করুন এবং সেই অনুযায়ী সমন্বয় করুন: কন্ট্রোলার এবং গেমের মধ্যে সর্বোত্তম সামঞ্জস্য আনতে কন্ট্রোলারের সক্ষমতা সম্পর্কে জিজ্ঞাসা করুন। উদাহরণস্বরূপ, আপনি হয়তো চাইবেন যে একজন খেলোয়াড় বাতাসে কন্ট্রোলার নাড়িয়ে কোনো বস্তুকে নিয়ন্ত্রণ করুক, কিন্তু যদি খেলোয়াড়ের কন্ট্রোলারে অ্যাক্সেলেরোমিটার এবং জাইরোস্কোপ হার্ডওয়্যার না থাকে, তবে নাড়ানো কাজ করবে না। কন্ট্রোলারকে জিজ্ঞাসা করুন এবং, যদি মোশন ডিটেকশন সমর্থিত না হয়, তবে একটি বিকল্প, উপলব্ধ কন্ট্রোল স্কিমে পরিবর্তন করুন। কন্ট্রোলারের সক্ষমতা জিজ্ঞাসা করার বিষয়ে আরও তথ্যের জন্য, "সাপোর্ট কন্ট্রোলারস অ্যাক্রস অ্যান্ড্রয়েড ভার্সনস" দেখুন।

উপযুক্ত বোতাম ব্যবহার করুন

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

একাধিক কন্ট্রোলার পরিচালনা করুন

যখন একাধিক খেলোয়াড় নিজ নিজ কন্ট্রোলার দিয়ে একটি গেম খেলে, তখন প্রতিটি খেলোয়াড়-কন্ট্রোলার জোড়াকে ম্যাপ করা গুরুত্বপূর্ণ। কন্ট্রোলার-নম্বর শনাক্তকরণ কীভাবে বাস্তবায়ন করতে হয় সে সম্পর্কে তথ্যের জন্য, getControllerNumber() দেখুন।

হ্যান্ডেল কন্ট্রোলার সংযোগ বিচ্ছিন্ন করে

গেম খেলার মাঝখানে কন্ট্রোলার সংযোগ বিচ্ছিন্ন হয়ে গেলে, গেমটি পজ করুন এবং সংযোগ বিচ্ছিন্ন হওয়া প্লেয়ারকে তার কন্ট্রোলার পুনরায় সংযোগ করতে বলার জন্য একটি ডায়ালগ বক্স দেখান।

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

কন্ট্রোলার নির্দেশাবলী দেখান

আপনার গেমে যদি ভিজ্যুয়াল গেম কন্ট্রোল নির্দেশনা থাকে, তাহলে ব্র্যান্ডিং-মুক্ত কন্ট্রোলার ইমেজ ব্যবহার করুন এবং শুধুমাত্র অ্যান্ড্রয়েডের সাথে সামঞ্জস্যপূর্ণ বাটনগুলো অন্তর্ভুক্ত করুন।

অ্যান্ড্রয়েড-উপযোগী কন্ট্রোলারের নমুনা ছবির জন্য, অ্যান্ড্রয়েড টিভি গেমপ্যাড টেমপ্লেট (ZIP) ডাউনলোড করুন। এতে একটি PNG ফাইল এবং একটি Adobe® Illustrator® ফাইল হিসেবে অন্তর্ভুক্ত রয়েছে—যা চিত্র ১-এ দেখানো হয়েছে—এবং এগুলো কালো পটভূমিতে একটি সাদা কন্ট্রোলার ও সাদা পটভূমিতে একটি কালো কন্ট্রোলারের নমুনা।

চিত্র ১. অ্যান্ড্রয়েড টিভি গেমপ্যাড টেমপ্লেট ব্যবহার করে তৈরি কন্ট্রোলার নির্দেশাবলীর নমুনা।