টিভি হার্ডওয়্যার পরিচালনা করুন

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

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

একটি টিভি ডিভাইস চেক করুন

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

আপনার অ্যাপটি একটি টিভি ডিভাইসে চলছে কিনা তা নির্ধারণ করার প্রস্তাবিত উপায় হল PackageManager.hasSystemFeature() পদ্ধতিটি ব্যবহার করে ডিভাইসটি টেলিভিশন মোডে চলছে কিনা। নিম্নলিখিত উদাহরণ কোডটি আপনাকে দেখায় যে কীভাবে আপনার অ্যাপটি একটি টিভি ডিভাইসে চলছে কিনা তা পরীক্ষা করবেন:

কোটলিন

const val TAG = "DeviceTypeRuntimeCheck"

val isTelevision = packageManager.hasSystemFeature(PackageManager.FEATURE_LEANBACK)
if (isTelevision) {
    Log.d(TAG, "Running on a TV Device")
} else {
    Log.d(TAG, "Running on a non-TV Device")
}

জাভা

public static final String TAG = "DeviceTypeRuntimeCheck";

boolean isTelevision = getPackageManager().hasSystemFeature(PackageManager.FEATURE_LEANBACK);
if (isTelevision) {
    Log.d(TAG, "Running on a TV Device");
} else {
    Log.d(TAG, "Running on a non-TV Device");
}

অসমর্থিত হার্ডওয়্যার বৈশিষ্ট্যগুলি পরিচালনা করুন

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

অসমর্থিত টিভি হার্ডওয়্যার বৈশিষ্ট্য

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

হার্ডওয়্যার অ্যান্ড্রয়েড বৈশিষ্ট্য বর্ণনাকারী
টাচস্ক্রিন android.hardware.touchscreen
টাচস্ক্রিন এমুলেটর android.hardware.faketouch
টেলিফোনি android.hardware.telephony
ক্যামেরা android.hardware.camera
নিয়ার ফিল্ড কমিউনিকেশনস (NFC) android.hardware.nfc
জিপিএস android.hardware.location.gps
মাইক্রোফোন android.hardware.microphone
সেন্সর android.hardware.sensor
পোর্ট্রেট ওরিয়েন্টেশনে স্ক্রীন android.hardware.screen.portrait

দ্রষ্টব্য: কিছু টিভি কন্ট্রোলারের একটি মাইক্রোফোন থাকে, যা এখানে বর্ণিত মাইক্রোফোন হার্ডওয়্যার বৈশিষ্ট্যের মতো নয়। কন্ট্রোলার মাইক্রোফোন সম্পূর্ণরূপে সমর্থিত.

বৈশিষ্ট্য, উপ-বৈশিষ্ট্য এবং তাদের বর্ণনাকারীদের সম্পূর্ণ তালিকার জন্য বৈশিষ্ট্যের রেফারেন্স দেখুন।

টিভির জন্য হার্ডওয়্যার প্রয়োজনীয়তা ঘোষণা করুন

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

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

<uses-feature android:name="android.hardware.touchscreen"
        android:required="false"/>
<uses-feature android:name="android.hardware.faketouch"
        android:required="false"/>
<uses-feature android:name="android.hardware.telephony"
        android:required="false"/>
<uses-feature android:name="android.hardware.camera"
        android:required="false"/>
<uses-feature android:name="android.hardware.nfc"
        android:required="false"/>
<uses-feature android:name="android.hardware.location.gps"
        android:required="false"/>
<uses-feature android:name="android.hardware.microphone"
        android:required="false"/>
<uses-feature android:name="android.hardware.sensor"
        android:required="false"/>
<!-- Some TV devices have an ethernet connection only -->
<uses-feature android:name="android.hardware.wifi"
        android:required="false"/>

দ্রষ্টব্য: কিছু বৈশিষ্ট্যের সাব-ফিচার আছে, যেমন android.hardware.camera.front , যেমন ফিচার রেফারেন্সে বর্ণনা করা হয়েছে। আপনার অ্যাপে ব্যবহৃত যেকোন সাব-ফিচারগুলিকে required="false"

টিভি ডিভাইসে ব্যবহারের জন্য অভিপ্রেত সমস্ত অ্যাপ্লিকেশানগুলিকে অবশ্যই ঘোষণা করতে হবে যে টাচস্ক্রিন বৈশিষ্ট্যের প্রয়োজন নেই, যেমনটি TV অ্যাপগুলির সাথে শুরু করুন- এ বর্ণিত হয়েছে৷ যদি আপনার অ্যাপ সাধারণত টিভি ডিভাইসগুলির দ্বারা সমর্থিত নয় এমন এক বা একাধিক বৈশিষ্ট্য ব্যবহার করে, তাহলে আপনার ম্যানিফেস্টের সেই বৈশিষ্ট্যগুলির জন্য android:required অ্যাট্রিবিউট সেটিংটিকে false পরিবর্তন করুন৷

সতর্কতা: একটি হার্ডওয়্যার বৈশিষ্ট্যের মান true সেট করে প্রয়োজনীয় হিসাবে ঘোষণা করা আপনার অ্যাপটিকে টিভি ডিভাইসে ইনস্টল করা বা Android TV হোম স্ক্রীন লঞ্চারে উপস্থিত হতে বাধা দেয়।

হার্ডওয়্যার বৈশিষ্ট্যগুলি বোঝায় এমন অনুমতিগুলি সম্পর্কে সচেতন হন৷

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

অনুমতি উহ্য হার্ডওয়্যার বৈশিষ্ট্য
RECORD_AUDIO android.hardware.microphone
CAMERA android.hardware.camera এবং
android.hardware.camera.autofocus
ACCESS_COARSE_LOCATION

android.hardware.location

android.hardware.location.network (শুধুমাত্র টার্গেট API লেভেল 20 বা কম)

ACCESS_FINE_LOCATION

android.hardware.location

android.hardware.location.gps (শুধুমাত্র টার্গেট API লেভেল 20 বা কম)

ACCESS_WIFI_STATE
CHANGE_WIFI_STATE

android.hardware.wifi

কিছু টিভি ডিভাইসে শুধুমাত্র একটি ইথারনেট সংযোগ আছে।

হার্ডওয়্যার বৈশিষ্ট্যের প্রয়োজনীয়তা বোঝায় এমন অনুমতির অনুরোধগুলির একটি সম্পূর্ণ তালিকার জন্য, uses-feature নির্দেশিকা দেখুন। যদি আপনার অ্যাপ পূর্বে তালিকাভুক্ত বৈশিষ্ট্যগুলির একটির জন্য অনুরোধ করে, তাহলে অন্তর্নিহিত হার্ডওয়্যার বৈশিষ্ট্যের জন্য আপনার ম্যানিফেস্টে একটি uses-feature ঘোষণা অন্তর্ভুক্ত করুন যা নির্দেশ করে যে এটির প্রয়োজন নেই। android:required="false"

দ্রষ্টব্য: যদি আপনার অ্যাপটি Android 5.0 (API স্তর 21) বা উচ্চতরকে লক্ষ্য করে এবং ACCESS_COARSE_LOCATION বা ACCESS_FINE_LOCATION অনুমতি ব্যবহার করে, তাহলে ব্যবহারকারীরা এখনও একটি টিভি ডিভাইসে আপনার অ্যাপ ইনস্টল করতে পারবেন, এমনকি যদি টিভি ডিভাইসের নেটওয়ার্ক কার্ড বা একটি GPS রিসিভার না থাকে .

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

ম্যানিফেস্টে বৈশিষ্ট্যগুলি ফিল্টারিং এবং ঘোষণা করার বিষয়ে আরও তথ্যের জন্য, uses-feature নির্দেশিকা দেখুন৷

হার্ডওয়্যার বৈশিষ্ট্য জন্য পরীক্ষা করুন

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

নিচের কোডের উদাহরণটি দেখায় কিভাবে রানটাইমে হার্ডওয়্যার বৈশিষ্ট্যের প্রাপ্যতা সনাক্ত করতে হয়:

কোটলিন

// Check whether the telephony hardware feature is available.
if (packageManager.hasSystemFeature(PackageManager.FEATURE_TELEPHONY)) {
    Log.d("HardwareFeatureTest", "Device can make phone calls")
}

// Check whether android.hardware.touchscreen feature is available.
if (packageManager.hasSystemFeature(PackageManager.FEATURE_TOUCHSCREEN)) {
    Log.d("HardwareFeatureTest", "Device has a touchscreen.")
}

জাভা

// Check whether the telephony hardware feature is available.
if (getPackageManager().hasSystemFeature(PackageManager.FEATURE_TELEPHONY)) {
    Log.d("HardwareFeatureTest", "Device can make phone calls");
}

// Check whether android.hardware.touchscreen feature is available.
if (getPackageManager().hasSystemFeature(PackageManager.FEATURE_TOUCHSCREEN)) {
    Log.d("HardwareFeatureTest", "Device has a touchscreen.");
}

টাচস্ক্রিন

যেহেতু বেশিরভাগ টিভিতে টাচস্ক্রিন নেই, তাই Android টিভি ডিভাইসের জন্য টাচস্ক্রিন ইন্টারঅ্যাকশন সমর্থন করে না। তদুপরি, একটি টাচস্ক্রিন ব্যবহার করা একটি দেখার পরিবেশের সাথে সামঞ্জস্যপূর্ণ নয় যেখানে ব্যবহারকারী ডিসপ্লে থেকে 10 ফুট দূরে বসে থাকে। নিশ্চিত করুন যে আপনার UI উপাদান এবং পাঠ্য একটি টাচস্ক্রিন ব্যবহার প্রয়োজন বা বোঝায় না।

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

ক্যামেরা

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

<uses-feature android:name="android.hardware.camera" android:required="false" />

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

কোটলিন

// Check whether the camera hardware feature is available.
if (packageManager.hasSystemFeature(PackageManager.FEATURE_CAMERA)) {
    Log.d("Camera test", "Camera available!")
} else {
    Log.d("Camera test", "No camera available. View and edit features only.")
}

জাভা

// Check whether the camera hardware feature is available.
if (getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA)) {
    Log.d("Camera test", "Camera available!");
} else {
    Log.d("Camera test", "No camera available. View and edit features only.");
}

জিপিএস

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

কোটলিন

// Request a static location from the location manager.
val locationManager = this.getSystemService(Context.LOCATION_SERVICE) as LocationManager
val location: Location = locationManager.getLastKnownLocation("static")

// Attempt to get postal code from the static location object.
val geocoder = Geocoder(this)
val address: Address? =
        try {
            geocoder.getFromLocation(location.latitude, location.longitude, 1)[0]
                    .apply {
                        Log.d(TAG, postalCode)
                    }
        } catch (e: IOException) {
            Log.e(TAG, "Geocoder error", e)
            null
        }

জাভা

// Request a static location from the location manager.
LocationManager locationManager = (LocationManager) this.getSystemService(
        Context.LOCATION_SERVICE);
Location location = locationManager.getLastKnownLocation("static");

// Attempt to get postal code from the static location object.
Geocoder geocoder = new Geocoder(this);
Address address = null;
try {
  address = geocoder.getFromLocation(location.getLatitude(),
          location.getLongitude(), 1).get(0);
  Log.d("Postal code", address.getPostalCode());

} catch (IOException e) {
  Log.e(TAG, "Geocoder error", e);
}

কম-পাওয়ার মোড চলাকালীন প্লেব্যাক থামান

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

লো-পাওয়ার মোড চলাকালীন প্লেব্যাক এড়াতে, onStop() ওভাররাইড করুন এবং বর্তমানে যে কোনো সামগ্রী প্লে করা বন্ধ করুন:

কোটলিন

override fun onStop() {
    // App-specific method to stop playback.
    stopPlayback()
    super.onStop()
}

জাভা

@Override
public void onStop() {
  // App-specific method to stop playback.
  stopPlayback();
  super.onStop();
}

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