אפליקציות למכשירים מתקפלים ולמכשירים עם כמה מסכים
באופן כללי, לא מומלץ להסתמך באפליקציות על מזהי סטטיים או על לוגיקה שמבוססת על מזהי תצוגה מסוימים. ברוב המקרים, האפליקציות צריכות להתאים את עצמן למסכים שונים ולפעול בהם, והמערכת צריכה לקבוע איפה הן ימוקמו. לדוגמה, כדי ליצור חוויה חדשה וייחודית למכשירים מתקפלים ולהפעיל אפליקציה מיוחדת במסך החיצוני כשהמכשיר מקופל.
במקרה כזה, 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>
מידע נוסף זמין במאמר מזהי תצוגה סטטיים.
מידע נוסף זמין במאמרים הבאים: