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