أجهزة تلفزيون مقبض

تختلف أجهزة التلفزيون اختلافًا كبيرًا عن أجهزة Android الأخرى. أجهزة التلفزيون لا تعمل تتضمن بعض ميزات الأجهزة الموجودة على أجهزة Android الأخرى، مثل الشاشات التي تعمل باللمس، والكاميرات وأجهزة استقبال GPS. تعتمد أجهزة التلفزيون بشكل كامل أيضًا على الأجهزة الثانوية: كي يتفاعل المستخدمون مع تطبيقات التلفزيون، يجب استخدام وحدة تحكّم عن بُعد أو لوحة ألعاب. (للتعرف على أساليب إدخال مختلفة، راجع إدارة وحدات التحكم في التلفزيون.)

عند إنشاء تطبيق للتلفزيون، يجب مراعاة قيود الأجهزة ومتطلباتها تعمل على أجهزة التلفزيون. التحقّق مما إذا كان تطبيقك يعمل على تلفزيون ومن استخدام الاسم المعرِّف غير المتوافق الجديدة.

البحث عن جهاز تلفزيون

إذا كنت تنشئ تطبيقًا يعمل على كلّ من أجهزة التلفزيون والأجهزة الأخرى، قد تحتاج إلى عليك التحقّق من نوع الجهاز الذي يعمل عليه تطبيقك وتعديل طريقة تشغيله. بالنسبة مثلًا، إذا كان لديك تطبيق يمكن تشغيله من خلال Intent، راجِع خصائص الجهاز لتحديد ما إذا كان عليك بدء تشغيل محتوى نشاط أو نشاط على الهاتف.

والطريقة المقترحة لتحديد ما إذا كان تطبيقك يعمل على جهاز تلفزيون هي استخدام طريقة PackageManager.hasSystemFeature() للتحقّق من ذلك. ما إذا كان الجهاز يعمل في وضع التلفزيون. يوضح الرمز في المثال التالي كيفية التحقق مما إذا كان يعمل تطبيقك على جهاز تلفزيون:

Kotlin

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")
}

Java

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
الشاشة التي تعمل باللمس android.hardware.touchscreen
محاكي الشاشة التي تعمل باللمس android.hardware.faketouch
الاتصالات الهاتفية android.hardware.telephony
الكاميرا android.hardware.camera
الاتصال القصير المدى (NFC) android.hardware.nfc
نظام تحديد المواقع العالمي (GPS) android.hardware.location.gps
الميكروفون android.hardware.microphone
أجهزة الاستشعار android.hardware.sensor
الشاشة في الاتجاه العمودي android.hardware.screen.portrait

ملاحظة: تحتوي بعض وحدات التحكّم في التلفزيون على ميكروفون، وهو ليس مطابقًا لميزة جهاز الميكروفون الموضحة هنا. ميكروفون وحدة التحكم بالكامل

يمكنك الاطّلاع على مرجع الميزات للحصول على قائمة كاملة بالميزات والميزات الفرعية والأوصاف الخاصة بها

الإفصاح عن متطلبات الأجهزة للتلفزيون

يمكن لتطبيقات Android الإفصاح عن متطلبات ميزات الأجهزة في بيان التطبيق للمساعدة في ضمان أنه غير مثبّت على أجهزة لا توفر هذه الميزات. إذا كنت تقوم بتمديد نطاق موجود التطبيق للاستخدام على التلفزيون، يُرجى مراجعة بيان التطبيق عن كثب لمعرفة ما إذا كان مطلوبًا أي أجهزة. الإعلانات التي قد تمنع تثبيته على جهاز التلفزيون.

إذا كان تطبيقك يستخدم ميزات خاصة بالأجهزة، مثل شاشة تعمل باللمس أو كاميرا غير متوفّرة على ولكن يمكن أن يعمل التطبيق بدون استخدام هذه الميزات. يُرجى تعديل ملف البيان الخاص بتطبيقك إلى إلى أن هذه الميزات ليست مطلوبة. مقتطف رمز البيان التالي يوضِّح كيفية توضيح أنّ تطبيقك لا يتطلّب ميزات للأجهزة غير المتوفّرة. على أجهزة التلفزيون ولكن مع استخدام هذه الميزات على أجهزة غير التلفزيون:

<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" على أي ميزات فرعية مستخدَمة أيضًا في تطبيقك.

يجب أن تشير جميع التطبيقات المصمّمة للاستخدام على أجهزة التلفزيون إلى أنّ ميزة الشاشة التي تعمل باللمس غير مطلوبة. كما هو موضح في بدء استخدام تطبيقات التلفزيون: إذا كان تطبيقك يستخدم عادةً ميزة أو أكثر من الميزات التي لا تتوافق مع أجهزة التلفزيون، يُرجى تغيير ضبط السمة 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 (المستوى 20 أو أقل لواجهة برمجة التطبيقات المستهدفة) فقط)

ACCESS_FINE_LOCATION

android.hardware.location

android.hardware.location.gps (المستوى 20 أو أقل لواجهة برمجة التطبيقات المستهدفة) فقط)

ACCESS_WIFI_STATE
CHANGE_WIFI_STATE

android.hardware.wifi

تحتوي بعض أجهزة التلفزيون على اتصال إيثرنت فقط.

للحصول على قائمة كاملة بطلبات الأذونات التي تشير ضمنًا إلى أحد متطلبات ميزات الأجهزة، راجع uses-feature الدليل. إذا كان تطبيقك يطلب إحدى الميزات المذكورة سابقًا، يجب تضمين uses-feature تعريف في بيانك لميزة الأجهزة الضمنية التي تشير إلى أنها ليست مطلوبة. android:required="false".

ملاحظة: إذا كان تطبيقك يستهدف الإصدار 5.0 (المستوى 21 من واجهة برمجة التطبيقات) أو أعلى وتستخدم ACCESS_COARSE_LOCATION أو ACCESS_FINE_LOCATION الإذن، لا يزال بإمكان المستخدمين تثبيت التطبيق على جهاز التلفزيون، حتى إذا لم يتضمن جهاز التلفزيون بطاقة شبكة أو نظام تحديد المواقع العالمي (GPS) المستلم.

بعد جعل ميزات الأجهزة اختيارية لتطبيقك، عليك التحقّق من مدى توفُّر هذه الميزات في وقت التشغيل ثم تعديل سلوك التطبيق. القسم التالي كيفية التحقق من ميزات الأجهزة وتقترح بعض الأساليب لتغيير سلوك تطبيقك.

لمزيد من المعلومات حول فلترة الميزات والإعلان عنها في البيان، يُرجى الاطّلاع على uses-feature الدليل.

التحقق من ميزات الأجهزة

يمكن لإطار عمل Android إخبارك بما إذا كانت ميزات الأجهزة غير متاحة على الجهاز الذي تشغيل تطبيقك. استخدام hasSystemFeature(String) للتحقق من ميزات محددة في وقت التشغيل. تأخذ هذه الطريقة وسيطة سلسلة واحدة يحدد الميزة التي تريد التحقق منها.

يوضح مثال الرمز التالي كيفية اكتشاف توافر ميزات الأجهزة في وقت التشغيل:

Kotlin

// 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.")
}

Java

// 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 أقدام من الشاشة. تأكد من عدم وجود عناصر ونصوص في واجهة المستخدم اشتراط استخدام شاشة تعمل باللمس أو الإشارة ضمنًا إلى استخدامها.

بالنسبة إلى أجهزة التلفزيون، صمِّم تطبيقك بشكل متوافق التنقل باستخدام لوحة الاتجاهات (لوحة الاتجاهات) في جهاز التحكم عن بعد بالتلفزيون. لمزيد من المعلومات حول تدعم التنقل بشكل صحيح باستخدام عناصر التحكم المتوافقة مع التلفزيون، التنقّل في التلفزيون:

الكاميرا

وعلى الرغم من أن جهاز التلفزيون لا يتضمن كاميرا في العادة، إلا أنه لا يزال بإمكانك تقديم صورة ذات صلة بالتصوير الفوتوغرافي التطبيق على التلفزيون. على سبيل المثال، إذا كان لديك تطبيق يلتقط الصور ويعرضها ويعدّلها، يمكنك تنفيذ ما يلي: إيقاف وظيفة التقاط الصور لأجهزة التلفزيون مع السماح للمستخدمين بالعرض والتعديل صور. إذا قررت تفعيل التطبيق المرتبط بالكاميرا للعمل على تلفزيون، أضِف بيان الميزة التالي: بيان التطبيق:

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

إذا فعّلت تطبيقك لكي يعمل بدون كاميرا، أضِف رمزًا إلى تطبيقك. يرصد ما إذا كانت ميزة الكاميرا متاحة ويجري تعديلات على طريقة تشغيل التطبيق. يوضح مثال الرمز التالي كيفية اكتشاف وجود كاميرا:

Kotlin

// 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.")
}

Java

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

أجهزة التلفزيون ثابتة أو داخلية ولا تتضمّن نظام تحديد المواقع العالمي (GPS) مدمجًا المستلِمين. إذا كان تطبيقك يستخدم معلومات الموقع الجغرافي، يمكنك السماح للمستخدمين بالبحث عن موقع جغرافي أو استخدام موفّر موقع جغرافي ثابت، مثل رمز بريدي تمّ إعداده أثناء جهاز التلفزيون الإعداد.

Kotlin

// 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
        }

Java

// 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 يتم تشغيل التلفزيون في الخلفية. لا يزال إخراج الصوت مفعَّلاً في هذا الوضع، لذا إيقاف أي محتوى يتم تشغيله حاليًا عندما يكون الجهاز في وضع الطاقة المنخفضة.

لتجنّب تشغيل الفيديو أثناء وضع الطاقة المنخفضة، يمكنك إلغاء onStop() وإيقاف أي محتوى يتم تشغيله حاليًا:

Kotlin

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

Java

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

عندما يعيد المستخدم تشغيل الجهاز، يتم استدعاء "onStart()". إذا كان تطبيقك هو التطبيق النشط في المقدّمة. للحصول على مزيد من المعلومات حول بدء تشغيل وإيقاف التطبيقات نشاط، راجع مراحل النشاط