שיטות מומלצות

אפליקציות למכשירים מתקפלים ולמכשירים עם כמה מסכים

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

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

הגבלת הגישה למסכים

אם להגדרת המכשיר נדרשת הגבלת גישה לאחד או יותר מוצגת, ההמלצה היא להשתמש בדגל Display#FLAG_PRIVATE להגדיר מסכים כאלה כפרטיים. כך רק הבעלים יוכל להוסיף תוכן לתצוגה. כל ניסיון להפעיל פעילות או הוספת חלון על ידי כל אחד, אבל הבעלים הוביל ל-SecurityException. אם המערכת היא הבעלים של המסך, היא יכולה להוסיף חלונות ולהפעיל פעילויות.

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

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

מידע נוסף זמין במאמרים הבאים:

  • ActivityStackSupervisor#isCallerAllowedToLaunchOnDisplay()
  • ActivityDisplay#isUidPresent()
  • DisplayManagerService#isUidPresentOnDisplay()

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

הגדרת הגדרות החלונות בתצוגה והגדרות לקישוט המערכת

קישוטי המערכת יכולים להיות מוגדרות לכל תצוגה בDisplayWindowSettings. מכשיר יכול לספק הגדרות ברירת מחדל /data/system/display_settings.xml

הערך הזה קובע אם קישוטי המערכת (מרכז האפליקציות, טפט, סרגל הניווט וחלונות עיצוב אחרים) וה-IME מופיעים במסך. פרטים נוספים זמינים במאמרים DisplayWindowSettings#shouldShowSystemDecorsLocked() ו-DisplayWindowSettings#shouldShowImeLocked().

כדי לזהות את המסך, משתמשים במזהה ייחודי (ברירת המחדל הזו משתמשת ב-DisplayInfo#uniqueId) או במזהה שקע פיזי במסכים לחומרה (ראו DisplayInfo#address).

לדוגמה, הדוגמה הבאה להגדרת תצוגה מאפשרת קישוטי מערכת ואת IME בתצוגה מדומה:

<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
<display-settings>
<config identifier="0" />
<display
  name="overlay:1"
  shouldShowSystemDecors="true"
  shouldShowIme="true" />
</display-settings>

בדוגמה שלמעלה, uniqueId משמש לזיהוי תצוגה במאפיין השם, שמשמש להדמיית תצוגה הוא overlay:1. בתצוגה מובנית, ערך לדוגמה יכול להיות "local:45354385242535243453". אפשרות אחרת היא להשתמש בפרטי היציאה של החומרה ולהגדיר את identifier="1" כך שתתאים ל-DisplayWindowSettings#IDENTIFIER_PORT, ואז לעדכן את השם כך שישתמש בפורמט "port:<port_id>":

<?xmlversion='1.0' encoding='utf-8' standalone='yes' ?>
<display-settings>
<config identifier="1" />
<display
  name="port:12345"
  shouldShowSystemDecors="true"
  shouldShowIme="true" />
</display-settings>

לפרטים נוספים, ראו מזהי תצוגה סטטיים.

מידע נוסף זמין במאמרים הבאים: