ניהול שלטים לטלוויזיות

מכשירי טלוויזיה דורשים מכשיר חומרה משני כדי ליצור אינטראקציה עם אפליקציות – שלט רחוק בסיסי, שלט רחוק עם מצביע או בקר משחקים. כדי לספק חוויית שימוש עקבית, האפליקציה צריכה לתמוך בהזנת נתונים באמצעות כפתורי החיצים (D-pad), לטפל במצבים שבהם הבקרים עוברים למצב אופליין ולתמוך בהזנת נתונים ממספר סוגים של בקרים, כולל שלטים עם מצביע.

אמצעי בקרה מינימליים של לחצני החיצים (D-pad)

שלט ברירת המחדל למכשיר טלוויזיה הוא D-pad. באופן כללי, צריך להיות אפשר להפעיל את האפליקציה באמצעות בקר מרחוק שיש בו רק כפתורים של מעלה, מטה, ימינה, שמאלה, בחירה, חזרה ודף הבית. אם האפליקציה היא משחק שבדרך כלל נדרש עבורו שלט משחק עם אמצעי בקרה נוספים, צריך לנסות לתמוך בגיימפליי רק באמצעות אמצעי הבקרה של כפתורי החיצים (D-pad). אחרת, צריך להזהיר את המשתמש שנדרש בקר משחקים ולאפשר לו לצאת מהמשחק בצורה חלקה באמצעות בקר כפתורי החיצים (D-pad).

מידע נוסף על ניווט באמצעות בקרי D-pad במכשירי טלוויזיה זמין במאמר ניווט בטלוויזיה.

טיפול בניתוקים של בקרים

בדרך כלל, בקרי טלוויזיה הם מכשירי Bluetooth, ולכן הם עשויים לנסות לחסוך באנרגיה על ידי מעבר למצב שינה וניתוק ממכשיר הטלוויזיה מדי פעם. המשמעות היא שאפליקציה עלולה להיות מופרעת או להפעיל מחדש אם היא לא מוגדרת לטפל באירועי חיבור מחדש כאלה. האירועים האלה יכולים לקרות בכל אחת מהנסיבות הבאות:

  • במהלך הפעלה של סרטון באורך של כמה דקות, יכול להיות שכפתורי החיצים (D-pad) או שלט המשחקים יעברו למצב שינה, יתנתקו ממכשיר הטלוויזיה ויתחברו מחדש מאוחר יותר.
  • במהלך המשחק, שחקן חדש יכול להצטרף למשחק באמצעות שלט משחק שלא מחובר כבר.
  • במהלך המשחק, שחקן יכול לצאת מהמשחק ולנתק את השלט.

כל פעילות באפליקציה לטלוויזיה שנתונה לאירועי ניתוק וחיבור מחדש צריכה להיות מוגדרת לטיפול באירועי חיבור מחדש בקובץ מניפסט של אפליקציה. בדוגמת הקוד הבאה אפשר לראות איך מאפשרים לפעילות לטפל בשינויים בהגדרות, כולל חיבור, ניתוק או חיבור מחדש של מקלדת או מכשיר ניווט:

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

השינוי הזה בהגדרה מאפשר לאפליקציה להמשיך לפעול באמצעות אירוע של התחברות מחדש, במקום להפעיל אותה מחדש באמצעות מסגרת Android, מה שלא מספק חוויית משתמש טובה.

טיפול בווריאציות של קלט מכפתורי החיצים (D-pad)

למשתמשים במכשירי טלוויזיה יכולים להיות כמה סוגים של בקרי משחקים שהם משתמשים בהם עם הטלוויזיה שלהם. לדוגמה, יכול להיות שלמשתמש יש בקר בסיסי עם כפתורי החיצים (D-pad), שלט עם מצביע או שלט משחק. יכול להיות שקודי המקשים שמסופקים על ידי שלט משחק כשמשתמשים בו לפונקציות של כפתורי החיצים (D-pad) יהיו שונים מקודי המקשים שנשלחים על ידי כפתורי החיצים (D-pad) בסיסיים.

טפל בשינויים בקלט של כפתורי החיצים (D-pad) כדי שהמשתמש לא יצטרך להחליף בקרים כדי להשתמש באפליקציה. מידע נוסף על טיפול בשינויים בקלט זמין במאמר עיבוד קלט של כפתורי החיצים (D-pad).

תמיכה בשלטים עם מצביע

חלק ממכשירי הטלוויזיה תומכים בשלטים עם מצביע, כמו עכברי אוויר או שלטים עם משטחי מגע רגישים למגע (טראקפדים). תמיכה בשלטים עם מצביע מאפשרת למשתמשים ליצור אינטראקציה עם האפליקציה באמצעות הצבעה ולחיצה, ריחוף, החלקה ומחוות גרירה. כך הם נהנים מחוויה חלקה יותר בחומרה תואמת, תוך שמירה על תאימות מלאה ללחצני החיצים.

הצהרה על תמיכה מרחוק במצביע בקובץ המניפסט

כדי לציין שאפשר לנווט באפליקציה באמצעות הצבעה וקלט מגע, צריך להגדיר את המטא-נתונים android.software.leanback.supports_touch בקובץ מניפסט של אפליקציה לערך true:

<manifest ...>
    <!-- Signal whether the app is adaptive or built just for TV -->
    <uses-feature
        android:name="android.software.leanback"
        android:required="true|false" />
    <!-- Ensure the app can be installed on conventional TVs -->
    <uses-feature
        android:name="android.hardware.touchscreen"
        android:required="false" />
    <!-- Signal whether the app supports pointer remotes -->
    <meta-data
        android:name="android.software.leanback.supports_touch"
        android:value="true" />
    <application ...>
        ...
    </application>
</manifest>

תמיכה באינטראקציות של קליק, ריחוף וגלילה

כשמציעים תמיכה בשלטים עם מצביע, צריך לוודא שרכיבי ממשק המשתמש מגיבים בצורה מתאימה לקלט של סמן ועכבר בכל האינטראקציות הבאות:

  • לחיצה ובחירה: כל רכיבי ממשק המשתמש שאפשר להתמקד בהם ולבחור אותם צריכים להיות ניתנים ללחיצה באמצעות השלט הרחוק עם מצביע, בהתאם להתנהגות של בחירה באמצעות כפתורי החיצים (D-pad) (KEYCODE_DPAD_CENTER).
  • מצבי ריחוף ויזואליים: אפקט ריחוף ויזואלי ברור שמציין מתי סמן העכבר נמצא מעל פריט שאפשר לבחור.
  • גלילה באמצעות החלקה וגלילה מהירה: גלילה אופקית ואנכית שמופעלת על ידי החלקה או גלילה מהירה על לחצן מרכזי רגיש למגע בלחצני החיצים צריכה לפעול בצורה חלקה בכל התוכן שאפשר לגלול בו.
  • גלילה באמצעות גרירה: המשתמשים צריכים להיות מסוגלים לגרור כדי לגלול אנכית (למעלה ולמטה) או אופקית (שמאלה וימינה) במאגרי מידע שניתן לגלול בהם.
    • ‫Jetpack Compose: מאגרי תגים סטנדרטיים עם אפשרות גלילה תומכים כברירת מחדל בגלילה באמצעות מצביע ובגלילה באמצעות מגע. למידע על הטמעות בהתאמה אישית, אפשר לעיין במאמר בנושא קלט באמצעות מצביע ב-Compose.
    • תצוגות: תצוגות סטנדרטיות שאפשר לגלול בהן תומכות בגלילה באמצעות מגע כברירת מחדל. מידע על טיפול בקלט בהתאמה אישית זמין במאמר מגע וקלט.
  • הזזה של פס ההתקדמות בהפעלת מדיה: במהלך הפעלת מדיה (כמו תוכניות טלוויזיה וסרטים), המשתמשים צריכים להיות מסוגלים ליצור אינטראקציה עם פס ההתקדמות של ההפעלה (פס החיפוש) על ידי הצבעה ולחיצה כדי לעבור לסימן זמן בעבר או בעתיד, וגם על ידי גרירה (הזזה) לאורך פס ההתקדמות כדי לעבור לזמן ספציפי.

טיפול באירועים של לחצנים

כשהמשתמש לוחץ על לחצן בשלט, האפליקציה מקבלת אירוע עם KeyEvent. ההתנהגות הרצויה של הלחצן יכולה להיות אירוע מדיה, כמו הפעלה, השהיה או עצירה, או אירוע מסוג טלוויזיה, כמו בחירה או ניווט. כדי לספק חוויית משתמש טובה, צריך להקצות התנהגות עקבית ללחצני הבקרה.

אירועים בממשק המשתמש של הטלוויזיה

מקצים התנהגות של ממשק משתמש בטלוויזיה ללחצנים שיוצרים סוגים של KeyEvent, כמו שמוצג בטבלה הבאה:

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, אתם יכולים להשתמש ב-MediaControllerAdapter כדי לקרוא לאחת מהשיטות של MediaControllerCompat.TransportControls שמוצגות בטבלה. שימו לב שהכפתורים לבחירה פועלים ככפתורי הפעלה או השהיה בהקשר הזה.

KeyEvent קריאה ל-TransportControls התנהגות
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() עצירה

הגדרת התנהגות מתאימה של כפתור 'הקודם'

הכפתור "הקודם" אף פעם לא אמור לפעול כמתג. לדוגמה, אל תשתמשו בו גם כדי לפתוח תפריט וגם כדי לסגור אותו. השתמשו בו רק כדי לנווט אחורה, בסגנון של נתיב ניווט, בין המסכים הקודמים שהמשתמש צפה בהם.

מכיוון שהכפתור "הקודם" מבצע רק ניווט ליניארי לאחור, אפשר להשתמש בו כדי לצאת מתפריט בתוך האפליקציה שנפתח על ידי לחצן אחר ולחזור לאפליקציה. לחיצה חוזרת על הכפתור "הקודם" חייבת להוביל בסופו של דבר למסך הבית של Android TV. לדוגמה: משחק > מסך ההשהיה של המשחק > המסך הראשי של המשחק > מסך הבית של Android TV או הפעלה של תוכנית טלוויזיה > המסך הראשי של אפליקציית הטלוויזיה

מסך הבית של Android TV.

מידע נוסף על עיצוב לניווט זמין במאמר עיצוב ניווט אחורה וניווט למעלה. מידע על הטמעה זמין במאמר הפעלת ניווט לאחור תקין.

איך משתמשים בשלטים למשחקים

כשמפתחים משחקים ל-Android TV, צריך לתכנן את מערכת הבקרה כך שתפעל גם עם שלטים רחוקים רגילים של טלוויזיה וגם עם בקרי משחקים ייעודיים.

תמיכה באמצעי הבקרה של לחצני החיצים (D-pad)

כדאי לתכנן את מערכת הבקרה סביב כפתורי החיצים, כי הם ברירת המחדל במכשירי Android TV. השחקן צריך להיות מסוגל להשתמש בלחצני החיצים (D-pad) בכל ההיבטים של המשחק – לא רק כדי לשלוט במשחק עצמו, אלא גם כדי לנווט בתפריטים ובמודעות. לכן, חשוב לוודא שהמשחק ל-Android TV לא מתייחס לממשק מגע עם שפה כמו הקשה כאן כדי להמשיך.

האופן שבו אתם מעצבים את האינטראקציה של השחקן עם השלט יכול להיות המפתח להשגת חוויית משתמש מעולה. כדאי להביא בחשבון את השיטות המומלצות הבאות:

  • הסבר מראש על הדרישות לגבי בקרים: כדאי להשתמש בתיאור של המשחק ב-Google Play כדי להסביר לשחקנים מהן הדרישות לגבי בקרים. אם משחק מתאים יותר לשלט עם ג'ויסטיק מאשר לשלט עם כפתורי חצים בלבד, צריך לציין זאת בבירור. שחקן שמשתמש בשלט לא מתאים למשחק עלול ליהנות מחוויה גרועה ולתת למשחק שלכם דירוג נמוך.
  • משתמשים במיפוי עקבי של לחצנים: מיפוי אינטואיטיבי של לחצנים הוא המפתח לחוויית משתמש טובה. לדוגמה, צריך לפעול לפי המוסכמות המקובלות וללחוץ על לחצן A כדי לאשר ועל לחצן B כדי לבטל. אפשר גם לאפשר למשתמשים למפות מחדש את הלחצנים כדי להציע גמישות. מידע נוסף על מיפוי לחצנים זמין במאמר בנושא טיפול בפעולות של בקרים.
  • זיהוי היכולות של בקר המשחק והתאמה בהתאם: שאילתה לגבי היכולות של בקר המשחק כדי לבצע אופטימיזציה של ההתאמה בין בקר המשחק לבין המשחק. לדוגמה, יכול להיות שתתכננו ששחקן ינווט אובייקט על ידי הנפת השלט באוויר, אבל אם בשלט של השחקן אין מד תאוצה וג'ירוסקופ, הנפת השלט לא תפעל. שולחים שאילתה לבקר, ואם הוא לא תומך בזיהוי תנועה, עוברים לשיטת בקרה חלופית שזמינה. מידע נוסף על שאילתות לגבי יכולות של בקרים זמין במאמר תמיכה בבקרים בגרסאות שונות של Android.

שימוש בכפתורים המתאימים

לא בכל השלטים של משחקים יש לחצנים של התחלה, חיפוש או תפריט. חשוב לוודא שממשק המשתמש לא תלוי בשימוש בלחצנים האלה.

טיפול בכמה שלטי משחק

כשכמה שחקנים משחקים במשחק, כל אחד עם שלט משלו, חשוב למפות כל זוג של שחקן ושלט. מידע על הטמעה של זיהוי מספר הבקר מופיע במאמר getControllerNumber().

טיפול בניתוקים של בקרים

אם השלט מתנתק באמצע המשחק, צריך להשהות את המשחק ולהציג תיבת דו-שיח שבה מוצגת לשחקן שהשלט שלו התנתק בקשה לחבר מחדש את השלט.

בנוסף, בתיבת הדו-שיח מוצגים טיפים לפתרון בעיות. לדוגמה, אומרים לנגן "תבדוק את חיבור ה-Bluetooth". מידע נוסף על הטמעה של תמיכה במכשירי קלט זמין במאמר בנושא טיפול בפעולות של בקרים ובמאמר סקירה כללית על Bluetooth.

הצגת הוראות לגבי השלט

אם במשחק שלכם יש הוראות ויזואליות לשליטה במשחק, אתם צריכים להשתמש בתמונה של בקר ללא מיתוג, ולכלול בה רק לחצנים שתואמים ל-Android.

כדי להוריד תמונות לדוגמה של בקר תואם ל-Android, אפשר להוריד את תבנית הגיימפד ל-Android TV (ZIP). הוא כולל שלט לבן על רקע שחור ושלט שחור על רקע לבן – כמו שמוצג באיור 1 – כקובץ PNG וכקובץ Adobe® Illustrator®‎.

**איור 1.** הוראות לדוגמה לבקר באמצעות תבנית Gamepad של Android TV.