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

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

โดยทั่วไป แอปไม่ควรใช้ตัวระบุแบบคงที่หรือตรรกะที่อาศัย รหัสดิสเพลย์บางรหัส ในกรณีส่วนใหญ่ แอปควรปรับขนาดและทำงานบนจอแสดงผลที่ต่างกัน และระบบควรควบคุมตำแหน่งที่จะค้นหาแอป ตัวอย่างเช่น ในการสร้าง ใหม่ที่ไม่เหมือนใครสำหรับอุปกรณ์แบบพับได้และเปิดตัวแอปพิเศษ หน้าจอภายนอกเมื่อพับอุปกรณ์

ในกรณีนี้ SystemUI (หรือคอมโพเนนต์ของระบบอื่น) ควรตรวจพบ พับ พิจารณาว่าเหมาะสมที่จะดำเนินการหรือไม่ แล้วเปิด กิจกรรมเป้าหมายและระบุรหัสการแสดงผลภายนอกเป็นเป้าหมายการเปิดตัว แอปไม่ควรตรวจพบการดำเนินการนี้หรือดำเนินการใดๆ ในการตอบกลับ ดำเนินการเปิดตัวบนจอแสดงผลที่เฉพาะเจาะจง อีกนัยหนึ่ง อย่าเดาว่า สิ่งที่ใช้งานได้บนอุปกรณ์หนึ่ง จะใช้กับอุปกรณ์อื่นๆ ได้ กล่าวสั้นๆ คือ เฉพาะอุปกรณ์ โค้ดช่วยเพิ่มการกระจาย Fragment

จำกัดการเข้าถึงจอแสดงผล

หากการกำหนดค่าอุปกรณ์ต้องมีการจำกัดการเข้าถึง ขอแนะนำให้ใช้แฟล็ก Display#FLAG_PRIVATE เพื่อกำหนดจอแสดงผลดังกล่าวเป็นแบบส่วนตัว ซึ่งจะเป็นการจำกัดทั้งหมดยกเว้น ไม่ให้เพิ่มเนื้อหาไปยังจอแสดงผลได้ ความพยายามใดๆ ที่จะเปิดกิจกรรมหรือ เพิ่มหน้าต่างโดยใครก็ได้ยกเว้นเจ้าของ จะทำให้เกิด SecurityException หากระบบเป็นเจ้าของจอแสดงผล ระบบจะเพิ่มหน้าต่างและเปิดกิจกรรมได้

นอกจากนี้ เอนทิตีที่วางอยู่บนจอแสดงผลยังเข้าถึงจอแสดงผลนั้นได้เสมอด้วย หากเจ้าของเปิดกิจกรรมบนจอแสดงผล ก็จะเปิดกิจกรรมอื่นๆ ได้ กิจกรรมของคุณบนจอแสดงผลนี้ ด้วยเหตุนี้ เจ้าของจึงมีหน้าที่จำกัด เข้าถึงและอนุญาตแอปที่เชื่อถือได้เท่านั้น

นอกจากนี้ยังมีการเพิ่มข้อจำกัดให้กับจอแสดงผลเสมือนเนื่องจากทุกแอปสามารถ สร้างโดยไม่แสดงต่อผู้ใช้ หากจอแสดงผลเสมือนไม่ได้ ระบบเป็นเจ้าของ เฉพาะกิจกรรมที่มี allowEmbedded ได้รับอนุญาต และผู้โทรควรมีรหัส ACTIVITY_EMBEDDING สิทธิ์

โปรดดูข้อมูลเพิ่มเติมจากหัวข้อดังนี้

  • ActivityStackSupervisor#isCallerAllowedToLaunchOnDisplay()
  • ActivityDisplay#isUidPresent()
  • DisplayManagerService#isUidPresentOnDisplay()

หากต้องการควบคุมการเปิดตัวกิจกรรมอย่างมีเงื่อนไข ให้ใช้ LaunchParamsController ซึ่งจะสกัดกั้นการเรียกใช้กิจกรรมทั้งหมด และช่วยให้คอมโพเนนต์ของระบบแก้ไข พารามิเตอร์ที่ใช้ในการเปิดใช้งาน ฟีเจอร์นี้มีให้บริการในsystem_server

กำหนดการตั้งค่าหน้าต่างแสดงผลและการตกแต่งระบบ

การตกแต่งระบบ ต่อการแสดงผล 1 จอใน DisplayWindowSettings อุปกรณ์ สามารถกำหนดค่าเริ่มต้นได้ใน /data/system/display_settings.xml

ค่านี้จะกำหนดว่าการตกแต่งระบบ (Launcher วอลเปเปอร์ แถบนำทาง และหน้าต่างตกแต่งอื่นๆ) และ 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>

โปรดดูรายละเอียดที่หัวข้อตัวระบุโฆษณาแบบดิสเพลย์แบบคงที่

โปรดดูข้อมูลเพิ่มเติมจากหัวข้อดังนี้