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

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

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

במקרה כזה, 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>

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

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