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

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

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

ในการระบุจอแสดงผล ให้ใช้ ID เฉพาะ (ค่าเริ่มต้นนี้ใช้ DisplayInfo#uniqueId ) หรือ ID พอร์ตจริงสำหรับจอแสดงผลฮาร์ดแวร์ (ดู 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 ใช้สำหรับการระบุการแสดงผลในแอตทริบิวต์ name ซึ่งสำหรับการแสดงผลจำลองจะเป็น 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>

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

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