แนวทางปฏิบัติที่แนะนำ

แอพสำหรับอุปกรณ์พับได้และหลายหน้าจอ

โดยทั่วไป แอพไม่ควรพึ่งพาตัวระบุคงที่หรือตรรกะที่ขึ้นอยู่กับ 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>

ดูรายละเอียด คงที่ตัวระบุการแสดงผล

สำหรับข้อมูลเพิ่มเติม โปรดดู: