แอพสำหรับอุปกรณ์พับได้และหลายหน้าจอ
โดยทั่วไป แอพไม่ควรพึ่งพาตัวระบุคงที่หรือตรรกะที่ขึ้นอยู่กับ ID ที่แสดงบางตัว ในกรณีส่วนใหญ่ แอพควรปรับขนาดและทำงานบนจอแสดงผลต่างๆ และระบบควรควบคุมตำแหน่งที่จะค้นหาแอพ ตัวอย่างเช่น เพื่อสร้างประสบการณ์ใหม่ที่ไม่เหมือนใครสำหรับอุปกรณ์แบบพับได้และเปิดแอปพิเศษบนหน้าจอภายนอกเมื่ออุปกรณ์ถูกพับ
ในกรณีนี้ SystemUI (หรือส่วนประกอบอื่นๆ ของระบบ) ควรตรวจหาส่วนพับ พิจารณาว่าเหมาะสมที่จะดำเนินการหรือไม่ จากนั้นจึงเรียกใช้กิจกรรมเป้าหมายและระบุ ID การแสดงผลภายนอกเป็นเป้าหมายการเรียกใช้ แอปไม่ควรตรวจพบการกระทำนี้หรือดำเนินการใดๆ เพื่อเป็นการโต้ตอบ จากนั้นจึงเปิดการทำงานบนจอแสดงผลเฉพาะ กล่าวอีกนัยหนึ่ง อย่าคิดว่าสิ่งที่ใช้งานได้บนอุปกรณ์เครื่องหนึ่งจะทำงานบนอุปกรณ์อื่น กล่าวโดยย่อ รหัสเฉพาะอุปกรณ์จะเพิ่มการกระจายตัวของข้อมูล
การจำกัดการเข้าถึงจอแสดงผล
หากการกำหนดค่าอุปกรณ์ที่จำเป็นต้องมีข้อ จำกัด ในการเข้าถึงหนึ่งหรือมากกว่าแสดงให้ข้อเสนอแนะคือการใช้ 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
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>
ดูรายละเอียด คงที่ตัวระบุการแสดงผล
สำหรับข้อมูลเพิ่มเติม โปรดดู: