โหมดความเข้ากันได้ของอุปกรณ์

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

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

Android 16

Android 16 (ระดับ API 36) จะไม่สนใจข้อจำกัดด้านการวางแนวหน้าจอ สัดส่วนการแสดงผล และความสามารถในการปรับขนาดของแอปเพื่อปรับปรุงเลย์เอาต์ของแอปในรูปแบบของอุปกรณ์ที่มีความกว้างที่เล็กที่สุด >= 600dp

การลบล้างต่อแอปต่อไปนี้จะใช้ไม่ได้กับแอปที่กำหนดเป้าหมายเป็น API ระดับ 36

เลือกไม่รับ

แอปของคุณสามารถกำหนดเป้าหมายเป็นระดับ API เป้าหมาย 36 แต่เลือกไม่ใช้ลักษณะการทำงานของ Android 16 ได้ ในกรณีนี้ OVERRIDE_ANY_ORIENTATION_TO_USER จะใช้ไม่ได้

ประกาศพร็อพเพอร์ตี้ไฟล์ Manifest

如需停用 API 级别 36 行为,请声明 PROPERTY_COMPAT_ALLOW_RESTRICTED_RESIZABILITY 清单属性。

如需停用特定活动,请在 <activity> 元素中设置相应属性:

<activity ...>
    <property
        android:name="android.window.PROPERTY_COMPAT_ALLOW_RESTRICTED_RESIZABILITY"
        android:value="true" />
    ...
</activity>

如需为整个应用停用,请在 <application> 元素中设置该属性:

<application ...>
    <property
        android:name="android.window.PROPERTY_COMPAT_ALLOW_RESTRICTED_RESIZABILITY"
        android:value="true" />
    ...
</application>

อุปกรณ์อ้างอิง

อุปกรณ์ต่อไปนี้อาจต้องมีการลบล้างต่อแอปเนื่องจากการกำหนดค่าที่ผิดปกติ หรือการกำหนดค่าที่แอปไม่รองรับได้ดี

  • แท็บเล็ต: แท็บเล็ตบางรุ่น เช่น Pixel Tablet จะมีการวางแนวเริ่มต้นเป็นแนวนอน อุปกรณ์จะอยู่ในแนวนอนตามปกติเมื่อ Display#getRotation() แสดงผล Surface.ROTATION_0 หากแอปถือว่า ROTATION_0 เป็นแนวตั้ง เลย์เอาต์ของแอปและพรีวิวของกล้องอาจไม่ตรงกับจอแสดงผลของอุปกรณ์
  • อุปกรณ์พับได้แนวนอน: อุปกรณ์พับได้บางรุ่น เช่น Pixel Fold จะอยู่ใน แนวตั้งเมื่อพับ แต่จะอยู่ในแนวนอนเมื่อกางออก หากแอปถือว่าการวางแนวที่กางออกเป็นแนวตั้ง ก็อาจเกิดการกะพริบ วนซ้ำหรือปัญหาเกี่ยวกับเลย์เอาต์
  • โทรศัพท์ฝาพับแบบพับได้: โดยปกติแล้วโทรศัพท์ฝาพับที่กางออกจะอยู่ในแนวนอน แต่เมื่อพับแล้ว โทรศัพท์มักจะมีจอแสดงผลขนาดเล็กใน แนวนอน แอปต้องระบุและรองรับการวางแนวของจอแสดงผลที่แตกต่างกัน
  • จอแสดงผลภายนอก: อุปกรณ์บางรุ่นสามารถเริ่มเซสชันการใช้งานหน้าต่างเดสก์ท็อป บนจอแสดงผลภายนอกที่เชื่อมต่อได้ แอปต้องค้นหาจอแสดงผลภายนอกเพื่อดูข้อมูล เช่น ขนาดหน้าจอและความละเอียด มิฉะนั้นแอปอาจคาดการณ์เกี่ยวกับจอแสดงผลอย่างไม่ถูกต้อง ซึ่งอาจทําให้แอปทํางานไม่ถูกต้อง
  • จอแสดงผลในรถยนต์: จอแสดงผลในรถยนต์ส่วนใหญ่เป็นแนวนอน แต่ก็มีบางรุ่นที่เป็นแนวตั้ง การพัฒนาแอปที่จอดรถสำหรับจอแสดงผลในรถยนต์จะคล้ายกับการพัฒนาสำหรับแท็บเล็ต

ปัญหาด้านความเข้ากันได้ที่พบบ่อย

แอปมักประสบปัญหาด้านความเข้ากันได้เนื่องจากข้อจำกัดด้านการวางแนวของแอป ข้อจำกัดด้านความสามารถในการปรับขนาดและสัดส่วนภาพ การจัดการการวางแนวของ พรีวิวกล้องที่ไม่ถูกต้อง และการใช้ API ในทางที่ผิด

เล็ทเทอร์บ็อกซิง

การแสดงจอดำบนและล่างจะวางแอปไว้ตรงกลางหน้าจอ หรือในหน้าจอขนาดใหญ่ จะวางไว้ที่ด้านใดด้านหนึ่งเพื่อให้เข้าถึงได้สะดวก แมตต์ (แถบสีทึบ หรือวอลเปเปอร์เบลอ) จะเติมพื้นที่แสดงผลที่ไม่ได้ใช้ตามด้านข้างหรือด้านบนและ ด้านล่างของแอป

การเกิดแถบดำด้านบนและด้านล่างมักเกิดขึ้นในอุปกรณ์หน้าจอขนาดใหญ่ เนื่องจากมิติข้อมูลและ สัดส่วนภาพของจอแสดงผลในอุปกรณ์มักแตกต่างจากของโทรศัพท์มาตรฐาน ซึ่งเป็นอุปกรณ์ที่แอปส่วนใหญ่ออกแบบมาให้ใช้งาน

รูปที่ 1 แอปที่จำกัดเฉพาะการวางแนวตั้งจะแสดงเป็นแถบดำด้านข้างบนแท็บเล็ตแนวนอนและอุปกรณ์แบบพับได้

ปัญหา

แอปไม่รองรับการกำหนดค่าการแสดงผลทั้งหมดเนื่องจากแอปมี การวางแนวคงที่ อัตราส่วนคงที่ หรือปรับขนาดไม่ได้

การตั้งค่าการกำหนดค่าที่ควบคุมการวางแนวและความสามารถในการปรับขนาดของแอปมีดังนี้

  • screenOrientation: ระบุการวางแนวคงที่สำหรับ แอป นอกจากนี้ แอปยังตั้งค่าการวางแนวที่รันไทม์ได้โดยใช้ Activity#setRequestedOrientation()

  • resizeableActivity: ระบุว่าระบบสามารถ ปรับขนาดแอปให้พอดีกับหน้าต่างที่มีขนาดต่างๆ ได้หรือไม่ ใน Android 11 (ระดับ API 30) และต่ำกว่า จะระบุว่าแอปรองรับโหมดหลายหน้าต่างหรือไม่ ใน Android 12 (API ระดับ 31) ขึ้นไป จะระบุว่าแอป รองรับโหมดหลายหน้าต่างในหน้าจอขนาดเล็ก (คลาสขนาดหน้าต่างแบบกะทัดรัด) หรือไม่ ใน Android 12 ขึ้นไป แอปจะรองรับโหมดหลายหน้าต่างบนหน้าจอขนาดใหญ่ (คลาสขนาดหน้าต่างปานกลางหรือขยาย) โดยไม่คำนึงถึงการตั้งค่านี้

  • maxAspectRatio: ระบุสัดส่วนภาพสูงสุด ที่แอปรองรับ เฉพาะแอปที่ตั้งค่า resizeableActivity เป็น false เท่านั้นที่ตั้งค่า maxAspectRatio ได้

  • minAspectRatio: ระบุอัตราส่วนภาพขั้นต่ำ ที่แอปรองรับ เฉพาะแอปที่มี resizeableActivity ตั้งค่าเป็น false เท่านั้นที่ ตั้งค่า minAspectRatio ได้

การเพิ่มประสิทธิภาพ

แอปควรรองรับการแสดงผลในอุปกรณ์ทั้งหมดและโหมดหลายหน้าต่าง การวางแนวและขนาด นําข้อจํากัดด้านการวางแนวและสัดส่วนคงที่ ทั้งหมดออกจากเลย์เอาต์แอปและไฟล์ Manifest ของแอป

วิธีแก้ปัญหาชั่วคราวเกี่ยวกับความเข้ากันได้

หากแอปที่มีการวางแนวหรือสัดส่วนภาพคงที่ทำงานในหน้าต่างที่แอปไม่รองรับขนาดหรือการวางแนวของหน้าต่างโดยตรง Android จะแสดงแถบดำด้านบนและด้านล่างของแอปเพื่อรักษาความต่อเนื่อง

ตั้งแต่ Android 12 (API ระดับ 31) และต่อเนื่องไปจนถึง 12L (API ระดับ 32) แพลตฟอร์มจะใช้การเพิ่มประสิทธิภาพต่างๆ กับแอปที่แสดงแบบกล่องจดหมาย ผู้ผลิต อุปกรณ์จะใช้การเพิ่มประสิทธิภาพ UI คุณไม่จำเป็นต้องทำการพัฒนาเพิ่มเติม เพื่อให้แอปได้รับประโยชน์จากการปรับปรุง

Android 12 (ระดับ API 31) มีการปรับปรุงด้านความสวยงามต่อไปนี้ ซึ่งผู้ผลิตอุปกรณ์สามารถกำหนดค่าได้

  • มุมโค้ง: มุมของหน้าต่างแอปดูสวยงามยิ่งขึ้น
  • ความโปร่งใสของแถบระบบ: แถบสถานะและแถบนำทางที่ซ้อนทับแอปจะโปร่งแสงบางส่วน ทำให้ไอคอนในแถบมองเห็นได้เสมอเมื่ออยู่เหนือพื้นหลังแบบ Letterbox
  • สัดส่วนภาพที่กำหนดค่าได้: ปรับสัดส่วนภาพของแอปได้ เพื่อปรับปรุงรูปลักษณ์ของแอป

รูปที่ 2 แอปแบบ Letterbox พร้อมการเพิ่มประสิทธิภาพ UI

12L (ระดับ API 32) มีการปรับปรุงฟังก์ชันการทำงานดังต่อไปนี้

  • การวางตำแหน่งที่กำหนดค่าได้: ในหน้าจอขนาดใหญ่ ผู้ผลิตอุปกรณ์สามารถ วางตำแหน่งแอปไว้ทางด้านซ้ายหรือขวาของจอแสดงผล ซึ่งจะช่วยให้ โต้ตอบได้ง่ายขึ้น

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

Android 13 (API ระดับ 33) เพิ่มกล่องโต้ตอบการให้ความรู้แก่ผู้ใช้เกี่ยวกับการวางตำแหน่งแอปที่แสดงแถบดำด้านบนและด้านล่าง บนหน้าจอหรือการรวมแถบดำด้านบนและด้านล่างในโหมดแยกหน้าจอ

รูปที่ 3 แอปที่มีแถบดำด้านบนและด้านล่างพร้อมกล่องโต้ตอบการให้ความรู้แก่ผู้ใช้

โหมดความเข้ากันได้ของขนาด

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

การเปลี่ยนแปลงการกำหนดค่าอุปกรณ์ที่อาจทําให้เกิดโหมดความเข้ากันได้ของขนาดมีดังนี้

  • การหมุนอุปกรณ์
  • อุปกรณ์ที่พับได้กำลังพับหรือกางออก
  • เปลี่ยนระหว่างโหมดการแสดงผลแบบเต็มหน้าจอและแบบแยกหน้าจอ

ปัญหา

โดยปกติแล้ว โหมดความเข้ากันได้ของขนาดจะใช้กับกิจกรรมที่ถูกจำกัดใน การวางแนวหรือสัดส่วนภาพ และได้รับการกำหนดค่า (หรือกำหนดโดยระบบ) ให้ ปรับขนาดไม่ได้

ระบบจะถือว่าแอปของคุณปรับขนาดได้และจะไม่วางแอปในโหมดความเข้ากันได้ของขนาด หากแอปเป็นไปตามเกณฑ์ต่อไปนี้

หากแอปของคุณไม่เป็นไปตามเงื่อนไขใดๆ ระบบจะถือว่าแอปปรับขนาดไม่ได้และอาจอยู่ในโหมดความเข้ากันได้ของขนาด

การเพิ่มประสิทธิภาพ

แอปควรรองรับขนาดการแสดงผลทั้งหมด ทําให้แอปปรับขนาดได้โดยตั้งค่าแอตทริบิวต์ android:resizeableActivityขององค์ประกอบ <activity> หรือ <application> เป็น true ใน ไฟล์ Manifest ของแอป ออกแบบเลย์เอาต์ที่ปรับเปลี่ยนตามอุปกรณ์/เลย์เอาต์ที่ปรับตามขนาดหน้าจอสำหรับแอปของคุณ ดูข้อมูลเพิ่มเติมได้ที่รองรับขนาดการแสดงผลต่างๆ และรองรับโหมดหลายหน้าต่าง

วิธีแก้ปัญหาชั่วคราวเกี่ยวกับความเข้ากันได้

Android จะนำแอปไปไว้ในโหมดความเข้ากันได้ของขนาดเมื่อระบบพิจารณาว่าการแสดงแอปที่อยู่ในกรอบดำสามารถปรับปรุงได้โดยการปรับขนาดแอปเพื่อเติมเต็มหน้าต่างแสดงผลในอย่างน้อย 1 มิติ ระบบจะแสดงตัวควบคุมการรีสตาร์ท ซึ่งจะสร้างกระบวนการของแอปขึ้นใหม่ สร้างกิจกรรมขึ้นใหม่ และวาดการแสดงผล อีกครั้ง ดูภาพรวมกระบวนการและเธรดด้วย

โหมดความเข้ากันได้ของการแสดงผล

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

ระบบจะเปิดใช้โหมดความเข้ากันได้ของการแสดงผลสำหรับเกมโดยค่าเริ่มต้น (อิงตามแฟล็ก android:appCategory) เพื่อปรับปรุงความเสถียรและความต่อเนื่อง โหมดความเข้ากันได้ของการแสดงผลจะไม่หยุดการกำหนดค่าของแอปไว้เหมือนกับโหมดความเข้ากันได้ของขนาด แอปจะยังคงได้รับการอัปเดตการกำหนดค่าทั้งหมดผ่าน API เช่น Callback ของ onConfigurationChanged() แต่จะไม่ต้องรีสตาร์ท ที่รบกวนการทำงาน ซึ่งหมายความว่าเกมที่รองรับ API อย่างเหมาะสม เช่น onConfigurationChanged() จะยังคงอัปเดต UI ได้อย่างรวดเร็วแม้ว่าจะอยู่ในโหมดความเข้ากันได้ของจอแสดงผลก็ตาม

หากต้องการเลือกไม่ใช้โหมดความเข้ากันได้ของการแสดงผลและจัดการการเปลี่ยนแปลงการกำหนดค่าในแอป ให้ประกาศการรองรับการเปลี่ยนแปลงการกำหนดค่าในไฟล์ AndroidManifest.xml ของแอป และจัดการการเปลี่ยนแปลงการกำหนดค่าในแฮนเดิลการเรียกกลับ onConfigurationChanged()

<activity
    android:name=".MyGameActivity"
    android:configChanges="colorMode|touchscreen|density|...">
    ...
</activity>

ลูปกะพริบ

เมื่อแอปไม่รองรับการวางแนวการแสดงผลทั้งหมด แอปอาจขอการวางแนวใหม่ซ้ำๆ เมื่อมีการเปลี่ยนแปลงการกำหนดค่า ซึ่งจะทำให้เกิด ลูปที่ไม่มีที่สิ้นสุดที่ทำให้จอแสดงผลกะพริบหรือแอปหมุนไปเรื่อยๆ

ปัญหา

ใน Android 12 (ระดับ API 31) ขึ้นไป ผู้ผลิตอุปกรณ์สามารถกำหนดค่าอุปกรณ์ให้ไม่สนใจข้อจำกัดด้านการวางแนวที่แอประบุไว้ และบังคับใช้โหมดความเข้ากันได้แทน ตัวอย่างเช่น อุปกรณ์แบบพับได้อาจไม่สนใจการตั้งค่าandroid:screenOrientation="portrait" ของกิจกรรมเมื่อกิจกรรมแสดงบนหน้าจอ ด้านในของอุปกรณ์ในโหมดแนวนอนขนาดแท็บเล็ต

หากระบบไม่สนใจข้อจำกัดการวางแนวของแอป แอปจะตั้งค่าการวางแนวโดยอัตโนมัติได้โดยการเรียกใช้ Activity#setRequestedOrientation() การเรียกใช้ จะทริกเกอร์การรีสตาร์ทแอปหากแอปไม่ได้จัดการการเปลี่ยนแปลงการกำหนดค่า (ดูจัดการการเปลี่ยนแปลงการกำหนดค่า) หลังจาก รีสตาร์ทแล้ว ระบบจะไม่สนใจข้อจำกัดการวางแนวของแอปอีกครั้ง แอปจะเรียกใช้ setRequestedOrientation() ซ้ำ การเรียกใช้จะทริกเกอร์การรีสตาร์ทแอป และ วนซ้ำไปเรื่อยๆ

อีกกรณีที่คุณอาจพบปัญหานี้คือเมื่อการวางแนวปกติ (การวางแนวปกติตามที่ Android กำหนด) ของหน้าจออุปกรณ์เป็นแนวนอน (นั่นคือการเรียก Display#getRotation() จะแสดงผลเป็น Surface.ROTATION_0 ขณะที่อุปกรณ์มีสัดส่วนภาพเป็นแนวนอน) ในอดีต แอปต่างๆ สันนิษฐานว่า Display.getRotation() = Surface.ROTATION_0 หมายถึงอุปกรณ์อยู่ในแนวนอน แต่ในความเป็นจริงแล้ว ไม่เสมอไป เช่น ในหน้าจอด้านในของอุปกรณ์พับได้บางรุ่นและ ในแท็บเล็ตบางรุ่น

แอปที่อยู่ในแนวนอนบนหน้าจอด้านในแบบพับได้อาจตรวจสอบ การหมุนหน้าจอ รับค่า ROTATION_0 สันนิษฐานว่าการวางแนวตามธรรมชาติ ของอุปกรณ์เป็นแนวตั้ง และเรียกใช้ setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT ) เพื่อกำหนดค่าเลย์เอาต์ของแอปใหม่ หลังจากแอปรีสตาร์ท (ในการวางแนวแนวนอน) แอปอาจตรวจสอบการหมุนหน้าจออีกครั้ง รับค่า ROTATION_0 เรียกใช้ setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT) และวนซ้ำไปเรื่อยๆ

การเพิ่มประสิทธิภาพ

แอปไม่ควรทำสิ่งต่อไปนี้

  • ตั้งค่าการวางแนวเริ่มต้นด้วย Activity#setRequestedOrientation() ในเมธอด กิจกรรม onCreate() เนื่องจากคำขอการวางแนวอาจ ทริกเกอร์โดยไม่คาดคิดจากการเปลี่ยนแปลงการกำหนดค่าที่ไม่ได้จัดการ
  • สมมติว่าการวางแนวตามธรรมชาติของอุปกรณ์ (ROTATION_0) คือแนวตั้ง
  • กำหนดการวางแนวตามสัญญาณที่ไม่เกี่ยวข้องกับขนาดหน้าต่างปัจจุบัน เช่น Display#getRotation(), การมีอยู่ของ FoldingFeature หรือAPI ที่เลิกใช้งานแล้ว

วิธีแก้ปัญหาชั่วคราวเกี่ยวกับความเข้ากันได้

Android จะไม่สนใจการเรียกใช้ Activity#setRequestedOrientation() ในสถานการณ์ต่อไปนี้

  • กิจกรรมได้เปิดตัวอีกครั้งจากการเรียกใช้เมธอดก่อนหน้านี้แล้ว หรือ มีการเปิดใช้การหมุนเวียนการบังคับความเข้ากันได้ของกล้อง (ดูตัวอย่างกล้องด้านล่าง)

    ผู้ผลิตอุปกรณ์สามารถใช้ลักษณะการทำงานนี้กับแอปที่มี OVERRIDE_ENABLE_COMPAT_IGNORE_REQUESTED_ORIENTATION

  • กิจกรรมดังกล่าวส่งคำขอการวางแนวมากกว่า 2 รายการใน 1 วินาที ซึ่ง แสดงว่าเกิดการวนซ้ำ จากคำขอ 2 รายการในลูป Android จะใช้คำขอที่เพิ่มพื้นที่แสดงแอปให้มากที่สุด

    ผู้ผลิตอุปกรณ์สามารถใช้ลักษณะการทำงานนี้กับแอปที่มี OVERRIDE_ENABLE_COMPAT_IGNORE_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED

  • เจ้าของอุปกรณ์เสมือนจริงได้ลบล้างการเรียกใช้เมธอดในอุปกรณ์บางรุ่น

ตัวอย่างจากกล้อง

การแสดงตัวอย่างกล้อง (หรือช่องมองภาพ) ของแอปกล้องอาจไม่ตรงกันหรือบิดเบี้ยว ในแท็บเล็ต แล็ปท็อป และจอแสดงผลแบบพับได้

ดูตัวอย่างกล้องในหน้าต่างเดสก์ท็อปด้วย

ปัญหา

เอกสารคำจำกัดความความเข้ากันได้ของ Android ระบุว่า "ต้องวางเซ็นเซอร์รูปภาพของกล้องให้ด้านยาวของกล้องตรงกับด้านยาวของหน้าจอ"

แอปมักจะสันนิษฐานว่าการวางแนวอุปกรณ์และการวางแนวเซ็นเซอร์กล้องเป็น แนวตั้ง ซึ่งเป็นสมมติฐานที่สมเหตุสมผลในโทรศัพท์มือถือมาตรฐาน แต่การวางแนวตามปกติของแท็บเล็ตและแล็ปท็อป รวมถึงเซ็นเซอร์กล้องอาจเป็นแนวนอน นอกจากนี้ รูปแบบใหม่ๆ เช่น อุปกรณ์แบบพับได้ อาจมี การวางแนวที่เป็นธรรมชาติหลายแบบและเซ็นเซอร์กล้องหลายตัวที่มีการวางแนวแตกต่างกัน

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

การเพิ่มประสิทธิภาพ

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

วิธีแก้ปัญหาชั่วคราวเกี่ยวกับความเข้ากันได้

อุปกรณ์จะอยู่ในแนวนอนเมื่อ Display#getRotation() แสดงผลเป็น Surface.ROTATION_0 ระบบจะคำนวณ CameraCharacteristics.SENSOR_ORIENTATION จากแนวการวางอุปกรณ์ตามธรรมชาติ Android จะจัดแนวหน้าต่างแนวตั้งของแอปที่จำกัดเฉพาะแนวตั้งให้สอดคล้องกับการวางแนวตามธรรมชาติของอุปกรณ์ ซึ่งเป็นสิ่งที่แอปส่วนใหญ่คาดหวัง Android จะครอบตัดรูปภาพจากเซ็นเซอร์กล้องด้วยเมื่อ การวางแนวเซ็นเซอร์เป็นแนวนอนและการแสดงตัวอย่างจากกล้องเป็นแนวตั้ง วิธีแก้ปัญหาที่เฉพาะเจาะจงมีดังนี้

  • บังคับหมุนตัวอย่างกล้องสำหรับแอปที่จำกัดเฉพาะแนวตั้ง: แอปที่จำกัดเฉพาะการวางแนวตั้งจะคาดหวังว่าการวางแนวตามธรรมชาติของอุปกรณ์และการวางแนวเซ็นเซอร์กล้องจะเป็นแนวตั้ง อย่างไรก็ตาม ใน Android 12 (ระดับ API 31) ขึ้นไป แอปจะทำงานได้ในหลายการวางแนวอุปกรณ์ หาก ผู้ผลิตอุปกรณ์ไม่สนใจข้อกำหนดการวางแนว

    เมื่อเชื่อมต่อแอปที่จำกัดเฉพาะแนวตั้งกับกล้อง Android จะบังคับ หมุนแอปเพื่อจัดแนวหน้าต่างแนวตั้งของแอปให้สอดคล้องกับ การวางแนวตามธรรมชาติของอุปกรณ์

    ในแท็บเล็ตบางรุ่น (ดูอุปกรณ์อ้างอิง) หน้าต่างแนวตั้งของแอปจะหมุนเป็นแนวตั้งแบบเต็มหน้าจอเพื่อให้สอดคล้องกับ การวางแนวตามธรรมชาติของอุปกรณ์ แอปจะแสดงเต็มหน้าจอหลังจากบังคับ การหมุน

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

  • การครอบตัดกล้องหน้าด้านใน: เซ็นเซอร์กล้องหน้าด้านในของโทรศัพท์แบบพับได้บางรุ่นจะอยู่ในแนวนอน นอกจากการบังคับหมุนตัวอย่างกล้องบนหน้าจอด้านในแบบพับได้แล้ว Android ยังครอบตัดขอบเขตการมองเห็นของกล้องหน้าด้านใน (แนวนอน) เพื่อให้เซ็นเซอร์จับภาพมุมมองตรงข้ามกับการวางแนวของอุปกรณ์

  • บังคับรีเฟรชตัวอย่างกล้อง: ระบบจะวนรอบวิธีการตรวจหากิจกรรม onStop() และ onStart() (ค่าเริ่มต้น) หรือ onPause() และ onResume() (ใช้โดยการลบล้างต่อแอป OVERRIDE_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE) หลังจากหมุนเพื่อบังคับเพื่อให้แน่ใจว่าตัวอย่างกล้องแสดงอย่างถูกต้อง

  • การปรับขนาดสัดส่วนภาพ: ระบบจะเปลี่ยนสัดส่วนภาพของ ตัวอย่างกล้องที่หมุนโดยอัตโนมัติเป็นสัดส่วนภาพขั้นต่ำที่สูงขึ้น ซึ่ง ช่วยให้มั่นใจว่าตัวอย่างกล้องจะได้รับการปรับขนาดอย่างเหมาะสม

นักพัฒนาแอปสามารถลบล้างวิธีแก้ปัญหาเหล่านี้ได้หากแอปจัดการตัวอย่างกล้องอย่างถูกต้อง ดูการลบล้างต่อแอป

API ที่มักถูกนำไปใช้ในทางที่ผิด

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

View API บางรายการออกแบบมาเพื่อวัตถุประสงค์พิเศษที่นักพัฒนาแอปอาจไม่เข้าใจดีนัก

ปัญหา

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

API Display ที่เลิกใช้งานแล้วและมักมีการใช้งานในทางที่ผิด

ดูข้อมูลเพิ่มเติมได้ที่ รองรับโหมดหลายหน้าต่าง

API การดูที่ถูกนำไปใช้ในทางที่ผิด:

การเพิ่มประสิทธิภาพ

อย่าวางตำแหน่งองค์ประกอบ UI โดยอิงตามขนาดการแสดงผลจริง ย้ายข้อมูลแอปไปยัง API ที่อิงตาม WindowMetrics ซึ่งรวมถึง API ต่อไปนี้ WindowManager

วิธีแก้ปัญหาชั่วคราวเกี่ยวกับความเข้ากันได้

การลบล้าง 2 รายการจะปรับ API ของ Display ที่เลิกใช้งานแล้วและ API ของ View ที่ใช้ในทางที่ผิดเพื่อ แสดงขอบเขตของแอป ALWAYS_SANDBOX_DISPLAY_APIS สำหรับ API ของ Display OVERRIDE_SANDBOX_VIEW_BOUNDS_APIS สำหรับ API ของ View ALWAYS_SANDBOX_DISPLAY_APIS จะมีผลโดยค่าเริ่มต้นกับ แอปที่มีสิทธิ์ใช้โหมดความเข้ากันได้ของขนาดด้วย

กิจกรรมที่โปร่งใส

กิจกรรมโปร่งใสเป็นผลมาจากรูปแบบพื้นหลังโปร่งใส เช่น

<style name="Transparent" parent="AppTheme">
    <item name="android:windowIsTranslucent">true</item>
    <item name="android:windowBackground">@android:color/transparent</item>
</style>

ธีมที่เกี่ยวข้องกับกล่องโต้ตอบ เช่น Theme.MaterialComponents.Dialog สามารถ รวมรูปแบบที่ทำให้กิจกรรมโปร่งใสได้

กิจกรรมโปร่งใสไม่ครอบคลุมพื้นที่โฆษณาที่มีอยู่ทั้งหมด ซึ่งทําให้จัดการได้ยากเนื่องจากพื้นที่โฆษณาที่มีอยู่สามารถเปลี่ยนแปลงได้ตามการเปลี่ยนแปลงการกําหนดค่า เช่น การหมุนอุปกรณ์ การพับและกางอุปกรณ์ และโหมดหลายหน้าต่าง

ปัญหา

กิจกรรมโปร่งใสควรเป็นไปตามขอบเขตของกิจกรรมทึบแสงแรกที่อยู่ ใต้กิจกรรมโปร่งใสในสแต็กกิจกรรมของงาน อย่างไรก็ตาม กิจกรรมที่ทึบแสงซึ่งเปิดกล่องโต้ตอบการให้สิทธิ์อาจเป็น trampoline (กิจกรรมที่เปิดกิจกรรมอื่นแล้วหายไป) และระบบจึงไม่สามารถกำหนดขอบเขตของกิจกรรม trampoline ที่เปิดกิจกรรมกล่องโต้ตอบการให้สิทธิ์แบบโปร่งใสได้

การเพิ่มประสิทธิภาพ

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

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

แอปควรเปิดคำขอสิทธิ์จากกิจกรรมที่ยังคง มองเห็นได้จนกว่าผู้ใช้จะตัดสินใจเกี่ยวกับสิทธิ์

มุมมน

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

กล่องโต้ตอบสิทธิ์จะไม่เติมพื้นที่แสดงผลที่ใช้ได้เนื่องจากเลย์เอาต์กล่องโต้ตอบ มักใช้ LayoutParams.WRAP_CONTENT แทน LayoutParams.MATCH_PARENT

วิธีแก้ปัญหาชั่วคราวเกี่ยวกับความเข้ากันได้

แสดงกิจกรรมที่เปิดใช้กิจกรรมกล่องโต้ตอบจนกว่าผู้ใช้จะตอบกลับกล่องโต้ตอบ

ระบบจะตรวจสอบว่ากิจกรรมโปร่งใสสืบทอดข้อจำกัดทั้งหมดจาก กิจกรรมทึบแสงแรกที่อยู่ใต้กิจกรรมโปร่งใสในสแต็กกิจกรรม ซึ่งรวมถึงข้อจำกัดที่เกี่ยวข้องกับสิ่งต่อไปนี้

  • โหมดความเข้ากันได้ของขนาด
  • การวางแนว
  • อัตราส่วน

เกม Unity

เกม Unity จะทำงานบน Android แบบเต็มหน้าจอหรือในโหมดหลายหน้าต่าง อย่างไรก็ตาม เกม Unity จำนวนมากจะสูญเสียโฟกัสและหยุดวาดเนื้อหาเมื่อแอปอยู่ใน โหมดหลายหน้าต่าง

ปัญหา

Unity ได้เพิ่มตัวเลือก Resizable Window ใน Unity 2019.4 เพื่อรองรับโหมดหลายหน้าต่างใน Android อย่างไรก็ตาม การติดตั้งใช้งานครั้งแรกไม่ได้ตอบสนองต่อวงจรกิจกรรมใน โหมดหลายหน้าต่างอย่างถูกต้อง ทำให้ UnityPlayer ระงับการเล่นเมื่อแอปสูญเสียโฟกัส เพลเยอร์แสดงหน้าจอสีดำหรือเฟรมที่ค้างสุดท้ายของเกม การเล่นเกมจะกลับมาทำงานต่อเมื่อ ผู้ใช้แตะหน้าจอเท่านั้น แอปจำนวนมากที่ใช้เอนจิน Unity ประสบปัญหานี้และ แสดงเป็นหน้าต่างสีดำในโหมดหลายหน้าต่าง

การเพิ่มประสิทธิภาพ

อัปเกรด Unity เป็น 2019.4.40 ขึ้นไป แล้วส่งออกเกมอีกครั้ง เลือกตัวเลือก Resizable Windowใน การตั้งค่าโปรแกรมเล่น Android ไว้ มิฉะนั้น เกมจะหยุดชั่วคราวเมื่อไม่ได้โฟกัส แม้ว่าเกมจะมองเห็นได้ทั้งหมดใน โหมดหลายหน้าต่าง

วิธีแก้ปัญหาชั่วคราวเกี่ยวกับความเข้ากันได้

ผู้ผลิตอุปกรณ์สามารถใช้การลบล้างต่อแอป OVERRIDE_ENABLE_COMPAT_FAKE_FOCUS เพื่อระบุเหตุการณ์โฟกัสปลอมให้กับแอปใน โหมดหลายหน้าต่าง การลบล้างจะช่วยให้กิจกรรมวาดเนื้อหาใหม่และ ไม่ถูกปิดกั้น

หน้าต่างเดสก์ท็อป

เมื่อแอปทำงานในสภาพแวดล้อมการแสดงหน้าต่างเดสก์ท็อป แอปอาจพบ โหมดความเข้ากันได้เพิ่มเติม

แอปที่มีการวางแนวที่ล็อกจะปรับขนาดได้อย่างอิสระ แม้ว่ากิจกรรมจะล็อกเป็นการวางแนวตั้ง แต่ผู้ใช้ยังคงปรับขนาดแอปเป็นการวางแนวนอนได้

ภาพเคลื่อนไหวของแอปแนวตั้งที่ปรับขนาดเป็นแนวนอน

อย่างไรก็ตาม หากประกาศกิจกรรมเป็นแบบปรับขนาดไม่ได้ (resizeableActivity = false) UI ของกิจกรรมจะปรับขนาดโดยคง สัดส่วนเดิมไว้

ภาพเคลื่อนไหวของแอปที่กำลังปรับขนาด UI จะปรับขนาดให้เต็มหน้าต่างเดสก์ท็อป

การแสดงตัวอย่างจากกล้องในหน้าต่างเดสก์ท็อป

เมื่อแอปทำงานในหน้าต่างเดสก์ท็อป การหมุนจอแสดงผลและการวางแนวหน้าต่างอาจแตกต่างจากที่พบในโหมดเต็มหน้าจอในโทรศัพท์มาตรฐาน

ปัญหา

แอปมักจะสันนิษฐานว่าการวางแนวอุปกรณ์และการวางแนวเซ็นเซอร์กล้องเป็น แนวตั้ง ซึ่งอาจทำให้พรีวิวของกล้องไม่ตรงแนวหรือบิดเบี้ยว

การเพิ่มประสิทธิภาพ

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

วิธีแก้ปัญหาชั่วคราวเกี่ยวกับความเข้ากันได้

เมื่อแอปที่มีการวางแนวคงที่ในระบบหน้าต่างบนเดสก์ท็อปเริ่มแสดงตัวอย่างกล้อง ระบบอาจทริกเกอร์การประมวลผลความเข้ากันได้ของกล้องเพื่อหลีกเลี่ยงการแสดงตัวอย่างที่ยืดออกและ แสดงด้านข้าง

การดูแลจะจำกัดสภาพแวดล้อมเพื่อจับคู่การวางแนวที่ขอในลักษณะต่อไปนี้

  • ใส่แถบดำด้านข้างหน้าต่างแอปให้เป็นไปตามการวางแนวที่ขอ: เพื่อหลีกเลี่ยงปัญหา การยืดเนื่องจากการปรับขนาดที่ไม่เหมาะสม

  • แซนด์บ็อกซ์การหมุนจอแสดงผล: กลุ่มทดสอบจะจำลองอุปกรณ์ ที่วางในแนวนอนหรือแนวตั้งตามที่ขอ เนื่องจากสมมติฐานที่ไม่ถูกต้องที่พบบ่อยที่สุด สำหรับพรีวิวของกล้องคือแอปทำงานบนอุปกรณ์แนวตั้ง การหมุนจอแสดงผล จึงอยู่ในแซนด์บ็อกซ์ที่ 0 องศาสำหรับแอปที่ขอการวางแนวแนวตั้ง และ 90 องศาสำหรับอุปกรณ์ที่ขอการวางแนวแนวนอน

  • การครอบตัดกล้อง: หากการหมุนจอแสดงผลมีการเปลี่ยนแปลง การเปลี่ยนแปลงนี้จะแสดงในฟีดกล้อง หากอุปกรณ์อยู่ในแนวนอนและระบบทริกเกอร์การดำเนินการสำหรับแอปที่ขอการวางแนวตั้ง ระบบจะครอบตัดมุมมองของกล้องให้คล้ายกับกล้องที่วางแนวตั้ง

  • หมุนและครอบตัดฟีดกล้อง: ระบบจะวนรอบผ่านเมธอดกิจกรรม onStop() และ onStart() (โดยค่าเริ่มต้น) หรือ onPause() และ onResume() (ใช้โดยการลบล้างต่อแอป OVERRIDE_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE) หลังจากใช้การรักษาเพื่อให้แน่ใจว่าตัวอย่างกล้องแสดงอย่างถูกต้อง

นักพัฒนาแอปสามารถลบล้างวิธีแก้ปัญหาเหล่านี้ได้หากแอปจัดการตัวอย่างกล้องอย่างถูกต้อง ดูการลบล้างต่อแอป

กำลังปรับขนาด

เมื่อการทดสอบการวางแนวที่จำลองคำขอทำงานอยู่ การปรับขนาดหน้าต่างจะปรับขนาด UI ช่องมองภาพในขณะที่ยังคงอัตราส่วนภาพไว้ ส่วนที่เหลือของ หน้าต่างแอปสามารถปรับขนาดได้อย่างอิสระ

ทดสอบแอปเพื่อหาปัญหาความเข้ากันได้

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

มีแถบดำด้านบน-ล่างของภาพ

ตรวจสอบว่าแต่ละกิจกรรมใช้พื้นที่แสดงผลทั้งหมดที่แอปมีได้ ก่อนอื่น ให้ประกาศโค้ดต่อไปนี้ในโฟลเดอร์ทดสอบ

Kotlin

fun isLetterboxed(activity: AppCompatActivity): Boolean {
    if (isInMultiWindowMode) return false

    val wmc = WindowMetricsCalculator.getOrCreate()
    val currentBounds = wmc.computeCurrentWindowMetrics(this).bounds
    val maxBounds = wmc.computeMaximumWindowMetrics(this).bounds

    val isScreenPortrait = maxBounds.height() > maxBounds.width()

    return if (isScreenPortrait) {
        currentBounds.height() < maxBounds.height()
    } else {
        currentBounds.width() < maxBounds.width()
    }
}

Java

public boolean isLetterboxed(AppCompatActivity activity) {
    if (activity.isInMultiWindowMode()) {
        return false;
    }

    WindowMetricsCalculator wmc = WindowMetricsCalculator.getOrCreate();
    Rect currentBounds = wmc.computeCurrentWindowMetrics(activity).getBounds();
    Rect maxBounds = wmc.computeMaximumWindowMetrics(activity).getBounds();

    boolean isScreenPortrait = maxBounds.height() > maxBounds.width();

    return (isScreenPortrait)
        ? currentBounds.height() < maxBounds.height()
        : currentBounds.width() < maxBounds.width();
}

จากนั้นเรียกใช้การทดสอบเพื่อยืนยันลักษณะการทำงานและตรวจสอบว่ากิจกรรมเป้าหมายไม่ได้ อยู่ในกรอบจดหมาย

Kotlin

@get:Rule
val activityRule = ActivityScenarioRule(MainActivity::class.java)

@Test
fun activity_launched_notLetterBoxed() {
    activityRule.scenario.onActivity {
        assertFalse(it.isLetterboxed())
    }
}

Java

@Rule
public ActivityScenarioRule<MainActivity> rule = new ActivityScenarioRule<>(MainActivity.class);

@Test
public void activity_launched_notLetterBoxed() {
    try (ActivityScenario<MainActivity> scenario =
        ActivityScenario.launch(MainActivity.class)) {
            scenario.onActivity( activity -> {
                assertFalse(activity.isLetterboxed());
            });
        }
}

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

การลบล้างต่อแอป

Android มีการลบล้างที่จะเปลี่ยนลักษณะการทำงานที่กำหนดค่าไว้ของแอป เช่น FORCE_RESIZE_APP ลบล้างจะสั่งให้ระบบข้ามโหมดความเข้ากันได้ของขนาดและปรับขนาดแอปให้พอดีกับขนาดการแสดงผล แม้ว่า resizeableActivity="false" จะระบุไว้ในไฟล์ Manifest ของแอปก็ตาม

ผู้ผลิตอุปกรณ์จะใช้การลบล้างกับแอปบางแอปหรือทุกแอปในอุปกรณ์ที่เฉพาะเจาะจง ใน Android 14 (ระดับ API 34) ขึ้นไป ผู้ใช้สามารถใช้การลบล้างกับแอปผ่านการตั้งค่าอุปกรณ์ได้ ใน Android 16 (ระดับ API 36) ขึ้นไป เจ้าของอุปกรณ์เสมือนจะใช้การลบล้างในอุปกรณ์บางรุ่นที่เจ้าของอุปกรณ์เสมือนจัดการ

การลบล้างต่อแอปของผู้ใช้

ใน Android 14 ขึ้นไป เมนูการตั้งค่าจะช่วยให้ผู้ใช้เปลี่ยนสัดส่วน ภาพของแอปได้ อุปกรณ์ที่มีหน้าจอขนาดใหญ่ เช่น อุปกรณ์อ้างอิง จะใช้เมนูนี้

เมนูจะมีรายการแอปทั้งหมดที่ติดตั้งในอุปกรณ์ ผู้ใช้เลือกแอป แล้วตั้งค่าสัดส่วนภาพของแอปเป็น 3:4, 1:1, เต็มหน้าจอ หรือค่าอื่นๆ ที่ผู้ผลิตอุปกรณ์กำหนดค่าไว้ ผู้ใช้ยังรีเซ็ตสัดส่วนภาพเป็นค่าเริ่มต้นของแอปได้ด้วย ซึ่งระบุไว้ในไฟล์ Manifest ของแอป

แอปสามารถเลือกไม่ใช้การลบล้างความเข้ากันได้โดยการตั้งค่าแท็ก PackageManager.Property ต่อไปนี้

  • PROPERTY_COMPAT_ALLOW_USER_ASPECT_RATIO_OVERRIDE

    หากต้องการเลือกไม่ใช้การลบล้างความเข้ากันได้ของสัดส่วนภาพของผู้ใช้ ให้เพิ่มพร็อพเพอร์ตี้ ลงในไฟล์ Manifest ของแอปและตั้งค่าเป็น false

    <application>
        <property
            android:name="android.window.
            PROPERTY_COMPAT_ALLOW_USER_ASPECT_RATIO_OVERRIDE"
            android:value="false" />
    </application>
    

    ระบบจะยกเว้นแอปของคุณจากรายการแอปในการตั้งค่าอุปกรณ์ ผู้ใช้ จะลบล้างสัดส่วนภาพของแอปไม่ได้

    การตั้งค่าพร็อพเพอร์ตี้เป็น true จะไม่มีผล

  • PROPERTY_COMPAT_ALLOW_USER_ASPECT_RATIO_FULLSCREEN_OVERRIDE

    หากต้องการเลือกไม่ใช้ตัวเลือกแบบเต็มหน้าจอของการลบล้างความเข้ากันได้ของสัดส่วนภาพของผู้ใช้ ให้เพิ่มพร็อพเพอร์ตี้ลงในไฟล์ Manifest ของแอปและตั้งค่าเป็น false

    <application>
        <property
            android:name="android.window.PROPERTY_COMPAT_ALLOW_USER_ASPECT_RATIO_FULLSCREEN_OVERRIDE"
            android:value="false" />
    </application>
    

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

    การตั้งค่าพร็อพเพอร์ตี้นี้เป็น true จะไม่มีผล

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

การลบล้างระดับแอปของอุปกรณ์

ผู้ผลิตอุปกรณ์และเจ้าของอุปกรณ์เสมือนจริง (เลือกแอปที่เชื่อถือได้และได้รับสิทธิ์) จะใช้การลบล้างในแต่ละแอปบนอุปกรณ์ที่เฉพาะเจาะจง ซึ่งรวมถึงแท็บเล็ต, อุปกรณ์พับได้, อุปกรณ์ ChromeOS และจอแสดงผลในรถยนต์ อุปกรณ์อ้างอิงอาจใช้การลบล้างบางอย่างกับแอปต่างๆ โดยค่าเริ่มต้น

แอปสามารถเลือกไม่ใช้การลบล้างส่วนใหญ่ได้ (ดูตารางการลบล้าง ต่อแอปด้านล่าง)

คุณทดสอบแอปโดยเปิดหรือปิดใช้การลบล้างได้โดยใช้เฟรมเวิร์กความเข้ากันได้ (ดูเครื่องมือเฟรมเวิร์กความเข้ากันได้) เมื่อเปิดใช้ การลบล้างจะมีผลกับทั้งแอป

นอกจากนี้ คุณยังใช้ Android Debug Bridge (adb) เพื่อเปิดหรือปิดใช้ การลบล้าง และระบุว่าการลบล้างใดที่ใช้กับแอปได้ด้วย

เปิดหรือปิดใช้การลบล้างโดยทำดังนี้

adb shell am compat enable/disable <override name/id> <package>

สำหรับอุปกรณ์อ้างอิง ให้ตรวจสอบว่าการลบล้างใดมีผลกับแอปของคุณ

adb shell dumpsys platform_compat | grep <package name>

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

การลบล้างต่อแอป
ประเภท ชื่อ รหัส คำอธิบาย
Input Compat OVERRIDE_MOUSE_TO_TOUCH 413207127 แปลงอินสแตนซ์ MotionEvent จากอุปกรณ์เมาส์เป็นเหตุการณ์การแตะโดยการเขียนซ้ำแหล่งที่มาและประเภทเครื่องมือของ MotionEvent เมื่อมีการนำส่งไปยังแอปพลิเคชัน
การปรับขนาดได้ FORCE_RESIZE_APP 174042936 ข้ามโหมดความเข้ากันได้ของขนาดสำหรับแอปเมื่อมีการเปลี่ยนแปลงการกำหนดค่า
FORCE_NON_RESIZE_APP 181136395 บังคับให้แอปเข้าสู่โหมดความเข้ากันได้ของขนาดเมื่อมีการเปลี่ยนแปลงการกำหนดค่า
สัดส่วนภาพ OVERRIDE_MIN_ASPECT_RATIO 174042980 การลบล้าง Gatekeeper ที่ต้องเปิดใช้เพื่อใช้การลบล้างสัดส่วนภาพอื่นๆ
OVERRIDE_MIN_ASPECT_RATIO_PORTRAIT_ONLY 203647190 หากเปิดใช้ (ค่าเริ่มต้น) ขีดจำกัดจะลบล้างขอบเขตเป็นกิจกรรมแนวตั้งเท่านั้น
OVERRIDE_MIN_ASPECT_RATIO_SMALL 349045028 เปลี่ยนสัดส่วนภาพขั้นต่ำเป็น 4:3
OVERRIDE_MIN_ASPECT_RATIO_MEDIUM 180326845 เปลี่ยนสัดส่วนภาพขั้นต่ำเป็น 3:2
OVERRIDE_MIN_ASPECT_RATIO_LARGE 180326787 เปลี่ยนสัดส่วนภาพขั้นต่ำเป็น 16:9
OVERRIDE_MIN_ASPECT_RATIO_TO_ALIGN_WITH_SPLIT_SCREEN 208648326 เปลี่ยนอัตราส่วนต่ำสุดให้พอดีกับขนาดการแสดงผล 50% (หรืออัตราส่วนการแบ่งหน้าจอ)
OVERRIDE_MIN_ASPECT_RATIO_EXCLUDE_PORTRAIT_FULLSCREEN 218959984 ปิดใช้การลบล้างอัตราส่วนภาพขั้นต่ำเพื่อให้แอปแสดงแบบเต็มหน้าจอเมื่ออุปกรณ์อยู่ในแนวนอน
การวางแนว OVERRIDE_ANY_ORIENTATION 265464455 เปิดใช้การลบล้างการวางแนว
OVERRIDE_ANY_ORIENTATION_TO_USER 310816437 ลบล้างข้อจำกัดด้านการวางแนว การปรับขนาด และสัดส่วนภาพ
OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT 265452344 ลบล้างการวางแนวให้เป็นแนวตั้งเมื่อกิจกรรมมีการวางแนวที่ไม่ได้กำหนด
OVERRIDE_UNDEFINED_ORIENTATION_TO_NOSENSOR 265451093 ลบล้างการวางแนวเป็น nosensor (ใช้การวางแนวตามธรรมชาติของอุปกรณ์) เมื่อกิจกรรมมีการวางแนวที่ไม่ได้กำหนด
OVERRIDE_LANDSCAPE_ORIENTATION_TO_REVERSE_LANDSCAPE 266124927 หมุนแอปที่ใช้ได้เฉพาะแนวนอน 180 องศา
OVERRIDE_ORIENTATION_ONLY_FOR_CAMERA 265456536 จำกัดขอบเขตการลบล้างการวางแนวเมื่อแอปเชื่อมต่อกับกล้อง
OVERRIDE_USE_DISPLAY_LANDSCAPE_NATURAL_ORIENTATION 255940284 ตั้งค่าการแสดงผลเป็นแนวนอนคงที่เมื่องานเป็นแบบเต็มหน้าจอ (รวมถึงเมื่อมีแถบดำด้านบนและด้านล่าง)
OVERRIDE_ENABLE_COMPAT_IGNORE_REQUESTED_ORIENTATION 254631730 ไม่สนใจคำขอการวางแนวจากแอปเพื่อหลีกเลี่ยงการหมุนวนซ้ำไม่สิ้นสุด
OVERRIDE_ENABLE_COMPAT_IGNORE_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED 273509367 ไม่สนใจคำขอการวางแนวที่ซ้ำกันขณะที่กิจกรรมกำลังเปิดตัวอีกครั้ง หาก Android ตรวจพบว่าแอปขอการวางแนวใหม่อย่างน้อย 2 รายการภายใน 1 วินาที ระบบจะถือว่าเป็นการวนซ้ำของการหมุนและใช้การลบล้าง
OVERRIDE_RESPECT_REQUESTED_ORIENTATION 236283604 ป้องกันการเกิดแถบดำโดยการปิดใช้การตั้งค่าคำขอการวางแนวที่ผู้ผลิตอุปกรณ์ไม่สนใจ
API แซนด์บ็อกซ์ NEVER_SANDBOX_DISPLAY_APIS 184838306 ป้องกันการเปลี่ยนแปลงลักษณะการทำงานของ API การแสดงผล
ALWAYS_SANDBOX_DISPLAY_APIS 185004937 บังคับให้ Display API ในแอปแสดงขอบเขตของแอป Display API จะแสดงขอบเขตพื้นที่แสดงผลเชิงตรรกะ แต่บางครั้งแอปจะถือว่า Display API แสดงขอบเขตของแอป ซึ่งทำให้เกิดปัญหาเกี่ยวกับ UI
OVERRIDE_SANDBOX_VIEW_BOUNDS_APIS 237531167 บังคับให้ View API ที่ใช้ในแอปแสดงขอบเขตของแอป View API จะแสดงขอบเขตพื้นที่แสดงผลเชิงตรรกะ แต่บางครั้งแอปจะถือว่า View API แสดงขอบเขตของแอป ซึ่งทำให้เกิดปัญหาเกี่ยวกับ UI
ความเข้ากันได้ของกล้อง OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION 263959004 ปิดการหมุนบังคับ โดยค่าเริ่มต้น ระบบจะบังคับหมุนแอปกล้องที่มีการวางแนวคงที่ทั้งหมดเมื่อเปิดตัวอย่างกล้อง
OVERRIDE_CAMERA_COMPAT_DISABLE_SIMULATE_REQUESTED_ORIENTATION 398195815 ปิดการจำลองการปรับการวางแนวที่ขอเพื่อความเข้ากันได้ของกล้อง โดยค่าเริ่มต้น ระบบจะปรับแอปกล้องที่มีการวางแนวคงที่ตามการวางแนวที่ขอเมื่อเปิดตัวอย่างกล้อง
OVERRIDE_CAMERA_COMPAT_DISABLE_REFRESH 264304459 นำการรีเฟรชแบบฮาร์ดเริ่มต้นออกเมื่อมีการหมุนตัวอย่างกล้องโดยบังคับ
OVERRIDE_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE 264301586 เปลี่ยนการรีเฟรชแบบฮาร์ดเป็นการรีเฟรชแบบซอฟต์เมื่อมีการหมุนตัวอย่างกล้องโดยบังคับ ซึ่งจะช่วยรักษาสถานะในระหว่างการหมุนโดยบังคับ โดยค่าเริ่มต้น Android จะทำการรีเฟรชแบบเต็มเมื่อมีการหมุนตัวอย่างกล้องโดยบังคับ การรีเฟรชแบบฮาร์ดอาจทำให้เกิดปัญหาที่แอปสูญเสียสถานะหรือกลายเป็นสีดำ ทั้งนี้ขึ้นอยู่กับวิธีที่แอปแคชสถานะก่อนหน้า
OVERRIDE_CAMERA_LANDSCAPE_TO_PORTRAIT 250678880 ครอบตัดบัฟเฟอร์รูปภาพของกล้องหน้าด้านใน หากปิดใช้การลบล้าง ระบบจะนำการครอบตัดกล้องหน้าด้านในออกและเพิ่มขอบเขตการมองเห็นของตัวอย่างกล้อง โดยค่าเริ่มต้นในอุปกรณ์พับได้บางรุ่น (ดูอุปกรณ์อ้างอิง) ระบบจะครอบตัดตัวอย่างกล้องของแอปกล้องทั้งหมดเมื่อใช้กล้องหน้าด้านใน
เบ็ดเตล็ด OVERRIDE_ENABLE_COMPAT_FAKE_FOCUS 263259275 ป้องกันไม่ให้แอปเป็นสีดำเมื่อแอปสูญเสียโฟกัสในโหมดแยกหน้าจอ แอปจะรอจนกว่าจะได้รับโฟกัสก่อนที่จะวาดเนื้อหาของแอป ซึ่งอาจทำให้แอปค้างหรือเป็นสีดำ การลบล้างช่วยให้ Android ส่งเหตุการณ์โฟกัสปลอมไปยังแอปได้ ซึ่งจะส่งสัญญาณให้แอปเริ่มวาดเนื้อหาอีกครั้ง

OVERRIDE_MOUSE_TO_TOUCH

เปิดใช้การจัดการความเข้ากันได้ซึ่งจะแปลงอินสแตนซ์ MotionEvent จากเมาส์หรือทัชแพดเป็นเหตุการณ์การแตะโดยการเขียนMotionEventแหล่งที่มาใหม่เป็น SOURCE_TOUCHSCREEN และMotionEventประเภทเครื่องมือเป็น TOOL_TYPE_FINGER เมื่อมีการส่งเหตุการณ์การเคลื่อนไหวไปยังแอปพลิเคชัน

วิธีที่แอปจะให้ผลลัพธ์เหมือนกับการลบล้าง

ไม่เกี่ยวข้อง คุณควรแก้ปัญหาในตรรกะของแอปพลิเคชัน

วิธีเพิ่มประสิทธิภาพแอป

แอปของคุณควรจัดการเหตุการณ์อินพุตจากเมาส์และทัชแพด รวมถึงท่าทางสัมผัสของทัชแพดและการเลื่อนล้อเมาส์ ดูแป้นพิมพ์ เมาส์ และแทร็กแพด

วิธีปิดใช้หรือเลือกไม่ใช้การลบล้าง

ประกาศ FEATURE_PC ในองค์ประกอบ <uses-feature> ในไฟล์ Manifest ของแอปพลิเคชัน

<uses-feature android:name="android.hardware.type.pc"
              android:required="false" />

หมายเหตุ: ตั้งค่า android:required="false" เพื่อให้ฟีเจอร์ PC เป็นตัวเลือกและ Google Play ไม่ยกเว้นแอปพลิเคชันในอุปกรณ์ที่ไม่ใช่ PC

แฟล็กพร็อพเพอร์ตี้เพื่อปรับการลบล้าง

ไม่มี

คำสั่ง adb เพื่อทดสอบการลบล้าง

วิธีใช้การลบล้าง

adb shell am compat enable OVERRIDE_MOUSE_TO_TOUCH <package>

วิธีนำการลบล้างออก

adb shell am compat disable OVERRIDE_MOUSE_TO_TOUCH <package>

หมายเหตุ: คำสั่งจะมีผลชั่วคราวหรือนำการลบล้างออกเท่านั้น

FORCE_RESIZE_APP

บังคับให้แพ็กเกจที่ใช้การลบล้างสามารถปรับขนาดได้และเข้าสู่โหมดหลายหน้าต่างได้ ใช้ได้กับจอแสดงผลทุกขนาด

วิธีที่แอปจะให้ผลลัพธ์เหมือนกับการลบล้าง

ในไฟล์ Manifest ของแอป ให้ตั้งค่าแอตทริบิวต์ android:resizeableActivity เป็น true

วิธีเพิ่มประสิทธิภาพแอป

ใช้เลย์เอาต์ที่ปรับเปลี่ยนตามอุปกรณ์/แบบปรับได้เพื่อให้แอปปรับให้เข้ากับขนาดจอแสดงผลและ สัดส่วนภาพทั้งหมดได้ ดูรองรับขนาดการแสดงผลต่างๆ

วิธีปิดใช้หรือเลือกไม่ใช้การลบล้าง

ตั้งค่าสถานะพร็อพเพอร์ตี้ PROPERTY_COMPAT_ALLOW_RESIZEABLE_ACTIVITY_OVERRIDES เป็น false

แฟล็กพร็อพเพอร์ตี้เพื่อปรับการลบล้าง

<property android:name="android.window.PROPERTY_COMPAT_ALLOW_RESIZEABLE_ACTIVITY_OVERRIDES"
  android:value="true|false"/>

คำสั่ง adb เพื่อทดสอบการลบล้าง

วิธีใช้การลบล้างและทำให้แอปปรับขนาดได้

adb shell am compat enable FORCE_RESIZE_APP <package>

วิธีนำการลบล้างออก

adb shell am compat disable FORCE_RESIZE_APP <package>

หมายเหตุ: คำสั่งจะมีผลชั่วคราวหรือนำการลบล้างออกเท่านั้น

FORCE_NON_RESIZE_APP

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

วิธีที่แอปจะให้ผลลัพธ์เหมือนกับการลบล้าง

ตั้งค่าทั้งแอตทริบิวต์ android:resizeableActivity และ android.supports_size_changes แฟล็กข้อมูลเมตาเป็น false ในไฟล์ Manifest ของแอป และประกาศข้อจำกัดการวางแนวหรือสัดส่วนภาพ

วิธีเพิ่มประสิทธิภาพแอป

แอปทั้งหมดที่ทำงานได้ดีเมื่อปรับขนาดควรตั้งค่า android:resizeableActivity หรือ android.supports_size_changes เป็น true ควรปรับปรุงแอปอื่นๆ ให้ทำงานได้ดีเมื่อมีการปรับขนาด ดูที่ android:resizeableActivity

วิธีปิดใช้หรือเลือกไม่ใช้การลบล้าง

ตั้งค่าสถานะพร็อพเพอร์ตี้ PROPERTY_COMPAT_ALLOW_RESIZEABLE_ACTIVITY_OVERRIDES เป็น false

แฟล็กพร็อพเพอร์ตี้เพื่อปรับการลบล้าง

<property android:name="android.window.PROPERTY_COMPAT_ALLOW_RESIZEABLE_ACTIVITY_OVERRIDES"
  android:value="true|false"/>

คำสั่ง adb เพื่อทดสอบการลบล้าง

วิธีใช้การลบล้างและทำให้แอปปรับขนาดไม่ได้

adb shell am compat enable FORCE_NON_RESIZE_APP <package>

วิธีนำการลบล้างออก

adb shell am compat disable FORCE_NON_RESIZE_APP <package>

หมายเหตุ: คำสั่งจะมีผลชั่วคราวหรือนำการลบล้างออกเท่านั้น

OVERRIDE_MIN_ASPECT_RATIO

ผู้ควบคุมการลบล้างทั้งหมดที่บังคับใช้สัดส่วนภาพขั้นต่ำที่กำหนด

วิธีที่แอปจะให้ผลลัพธ์เหมือนกับการลบล้าง

ตั้งค่า android:minAspectRatio ที่ระดับกิจกรรมหรือแอป

วิธีเพิ่มประสิทธิภาพแอป

อย่าตั้งค่าข้อจำกัดอัตราส่วนภาพในแอป ตรวจสอบว่าแอปรองรับ ขนาดการแสดงผลที่แตกต่างกัน ใช้คลาสขนาดหน้าต่าง เพื่อรองรับเลย์เอาต์ต่างๆ ตามจำนวนพื้นที่ที่แอปมี บนหน้าจอ ดู Compose WindowSizeClass API และ View WindowSizeClass API

วิธีปิดใช้หรือเลือกไม่ใช้การลบล้าง

ระบุข้อจำกัดอัตราส่วนภาพหรือตั้งค่าสถานะพร็อพเพอร์ตี้ PROPERTY_COMPAT_ALLOW_MIN_ASPECT_RATIO_OVERRIDE เป็น false

แฟล็กพร็อพเพอร์ตี้เพื่อปรับการลบล้าง

<property android:name="android.window.PROPERTY_COMPAT_ALLOW_MIN_ASPECT_RATIO_OVERRIDE"
  android:value="false"/>

คำสั่ง adb เพื่อทดสอบการลบล้าง

วิธีใช้การลบล้าง

adb shell am compat enable OVERRIDE_MIN_ASPECT_RATIO <package>

วิธีนำการลบล้างออก

adb shell am compat disable OVERRIDE_MIN_ASPECT_RATIO <package>

หมายเหตุ: คำสั่งจะมีผลชั่วคราวหรือนำการลบล้างออกเท่านั้น

OVERRIDE_MIN_ASPECT_RATIO_PORTRAIT_ONLY

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

วิธีที่แอปจะให้ผลลัพธ์เหมือนกับการลบล้าง

ดู OVERRIDE_MIN_ASPECT_RATIO

วิธีเพิ่มประสิทธิภาพแอป

ดู OVERRIDE_MIN_ASPECT_RATIO

วิธีปิดใช้หรือเลือกไม่ใช้การลบล้าง

ดู OVERRIDE_MIN_ASPECT_RATIO

แฟล็กพร็อพเพอร์ตี้เพื่อปรับการลบล้าง

ดู OVERRIDE_MIN_ASPECT_RATIO

คำสั่ง adb เพื่อทดสอบการลบล้าง

วิธีใช้การลบล้าง

adb shell am compat enable OVERRIDE_MIN_ASPECT_RATIO_PORTRAIT_ONLY <package>

วิธีนำการลบล้างออก

adb shell am compat disable OVERRIDE_MIN_ASPECT_RATIO_PORTRAIT_ONLY <package>

หมายเหตุ: คำสั่งจะมีผลชั่วคราวหรือนำการลบล้างออกเท่านั้น

OVERRIDE_MIN_ASPECT_RATIO_SMALL

ตั้งค่าสัดส่วนภาพขั้นต่ำของกิจกรรมเป็นค่าต่ำสุด (4:3)

วิธีที่แอปจะให้ผลลัพธ์เหมือนกับการลบล้าง

ดู OVERRIDE_MIN_ASPECT_RATIO

วิธีเพิ่มประสิทธิภาพแอป

ดู OVERRIDE_MIN_ASPECT_RATIO

วิธีปิดใช้หรือเลือกไม่ใช้การลบล้าง

ดู OVERRIDE_MIN_ASPECT_RATIO

แฟล็กพร็อพเพอร์ตี้เพื่อปรับการลบล้าง

ดู OVERRIDE_MIN_ASPECT_RATIO

คำสั่ง adb เพื่อทดสอบการลบล้าง

วิธีใช้การลบล้าง

adb shell am compat enable OVERRIDE_MIN_ASPECT_RATIO_SMALL <package>

วิธีนำการลบล้างออก

adb shell am compat disable OVERRIDE_MIN_ASPECT_RATIO_SMALL <package>

หมายเหตุ: คำสั่งจะมีผลชั่วคราวหรือนำการลบล้างออกเท่านั้น

OVERRIDE_MIN_ASPECT_RATIO_MEDIUM

ตั้งค่าสัดส่วนภาพขั้นต่ำของกิจกรรมเป็นค่าปานกลาง (3:2)

วิธีที่แอปจะให้ผลลัพธ์เหมือนกับการลบล้าง

ดู OVERRIDE_MIN_ASPECT_RATIO

วิธีเพิ่มประสิทธิภาพแอป

ดู OVERRIDE_MIN_ASPECT_RATIO

วิธีปิดใช้หรือเลือกไม่ใช้การลบล้าง

ดู OVERRIDE_MIN_ASPECT_RATIO

แฟล็กพร็อพเพอร์ตี้เพื่อปรับการลบล้าง

ดู OVERRIDE_MIN_ASPECT_RATIO

คำสั่ง adb เพื่อทดสอบการลบล้าง

วิธีใช้การลบล้าง

adb shell am compat enable OVERRIDE_MIN_ASPECT_RATIO_MEDIUM <package>

วิธีนำการลบล้างออก

adb shell am compat disable OVERRIDE_MIN_ASPECT_RATIO_MEDIUM <package>

หมายเหตุ: คำสั่งจะมีผลชั่วคราวหรือนำการลบล้างออกเท่านั้น

OVERRIDE_MIN_ASPECT_RATIO_LARGE

ตั้งค่าสัดส่วนภาพขั้นต่ำของกิจกรรมเป็นค่าขนาดใหญ่ (16:9)

วิธีที่แอปจะให้ผลลัพธ์เหมือนกับการลบล้าง

ดู OVERRIDE_MIN_ASPECT_RATIO

วิธีเพิ่มประสิทธิภาพแอป

ดู OVERRIDE_MIN_ASPECT_RATIO

วิธีปิดใช้หรือเลือกไม่ใช้การลบล้าง

ดู OVERRIDE_MIN_ASPECT_RATIO

แฟล็กพร็อพเพอร์ตี้เพื่อปรับการลบล้าง

ดู OVERRIDE_MIN_ASPECT_RATIO

คำสั่ง adb เพื่อทดสอบการลบล้าง

วิธีใช้การลบล้าง

adb shell am compat enable OVERRIDE_MIN_ASPECT_RATIO_LARGE <package>

วิธีนำการลบล้างออก

adb shell am compat disable OVERRIDE_MIN_ASPECT_RATIO_LARGE <package>`

หมายเหตุ: คำสั่งจะมีผลชั่วคราวหรือนำการลบล้างออกเท่านั้น

OVERRIDE_MIN_ASPECT_RATIO_TO_ALIGN_WITH_SPLIT_SCREEN

เปิดใช้สัดส่วนภาพแบบแยกหน้าจอ อนุญาตให้แอปใช้พื้นที่ว่างทั้งหมดในโหมดแยกหน้าจอเพื่อหลีกเลี่ยงการมีแถบดำด้านบน-ล่างของภาพ

วิธีที่แอปจะให้ผลลัพธ์เหมือนกับการลบล้าง

ดู OVERRIDE_MIN_ASPECT_RATIO

วิธีเพิ่มประสิทธิภาพแอป

ดู OVERRIDE_MIN_ASPECT_RATIO

วิธีปิดใช้หรือเลือกไม่ใช้การลบล้าง

ดู OVERRIDE_MIN_ASPECT_RATIO

แฟล็กพร็อพเพอร์ตี้เพื่อปรับการลบล้าง

ดู OVERRIDE_MIN_ASPECT_RATIO

คำสั่ง adb เพื่อทดสอบการลบล้าง

วิธีใช้การลบล้าง

adb shell am compat enable OVERRIDE_MIN_ASPECT_RATIO_TO_ALIGN_WITH_SPLIT_SCREEN <package>

วิธีนำการลบล้างออก

adb shell am compat disable OVERRIDE_MIN_ASPECT_RATIO_TO_ALIGN_WITH_SPLIT_SCREEN <package>

หมายเหตุ: คำสั่งจะมีผลชั่วคราวหรือนำการลบล้างออกเท่านั้น

OVERRIDE_MIN_ASPECT_RATIO_EXCLUDE_PORTRAIT_FULLSCREEN

ปิดใช้การลบล้างสัดส่วนภาพขั้นต่ำในโหมดเต็มหน้าจอแนวตั้งเพื่อใช้พื้นที่หน้าจอทั้งหมด ที่มี

วิธีที่แอปจะให้ผลลัพธ์เหมือนกับการลบล้าง

ดู OVERRIDE_MIN_ASPECT_RATIO

วิธีเพิ่มประสิทธิภาพแอป

ดู OVERRIDE_MIN_ASPECT_RATIO

วิธีปิดใช้หรือเลือกไม่ใช้การลบล้าง

ดู OVERRIDE_MIN_ASPECT_RATIO

แฟล็กพร็อพเพอร์ตี้เพื่อปรับการลบล้าง

ดู OVERRIDE_MIN_ASPECT_RATIO

คำสั่ง adb เพื่อทดสอบการลบล้าง

วิธีใช้การลบล้าง

adb shell am compat enable OVERRIDE_MIN_ASPECT_RATIO_EXCLUDE_PORTRAIT_FULLSCREEN <package>

วิธีนำการลบล้างออก

adb shell am compat disable OVERRIDE_MIN_ASPECT_RATIO_EXCLUDE_PORTRAIT_FULLSCREEN <package>

หมายเหตุ: คำสั่งจะมีผลชั่วคราวหรือนำการลบล้างออกเท่านั้น

OVERRIDE_ANY_ORIENTATION

เปิดใช้การลบล้างต่อไปนี้เพื่อลบล้างการวางแนว

วิธีที่แอปจะให้ผลลัพธ์เหมือนกับการลบล้าง

ตั้งค่าแอตทริบิวต์ไฟล์ Manifest ของ activity:screenOrientation หรือใช้ API ของ Activity#setRequestedOrientation()

วิธีเพิ่มประสิทธิภาพแอป

แอปของคุณควรรองรับการวางแนวทั้งหมด การเปลี่ยนการวางแนวเป็นการ เปลี่ยนแปลงการกำหนดค่า ซึ่งจัดการได้ 2 วิธี ได้แก่ การปล่อยให้ ระบบทำลายและสร้างแอปขึ้นใหม่ หรือจัดการการเปลี่ยนแปลงการกำหนดค่า ด้วยตนเอง หากคุณจัดการการเปลี่ยนแปลงการกำหนดค่าด้วยตนเอง คุณจะคงสถานะแอปไว้ได้โดยใช้ ViewModel ในบางกรณี คุณอาจเลือกที่จะล็อก การวางแนวบนจอแสดงผลขนาดเล็กเท่านั้นได้ แต่การทำเช่นนี้อาจไม่ปรับขนาดได้ดีเท่ากับการ อนุญาตให้ผู้ใช้หมุนแอปตามต้องการ ใน Android 12L ขึ้นไป การกำหนดแนวคงที่สามารถลบล้างได้โดยการกำหนดค่าอุปกรณ์ ดูข้อมูลเพิ่มเติมเกี่ยวกับการจัดการการเปลี่ยนแปลงการกำหนดค่าและการรองรับการวางแนวทั้งหมดได้ที่จัดการการเปลี่ยนแปลงการกำหนดค่า ภาพรวม ViewModel และการจำกัดการวางแนวแอปในโทรศัพท์แต่ไม่ได้จำกัดในอุปกรณ์หน้าจอขนาดใหญ่

วิธีปิดใช้หรือเลือกไม่ใช้การลบล้าง

ตั้งค่าสถานะพร็อพเพอร์ตี้ PROPERTY_COMPAT_ALLOW_ORIENTATION_OVERRIDE เป็น false

แฟล็กพร็อพเพอร์ตี้เพื่อปรับการลบล้าง

<property android:name="android.window.PROPERTY_COMPAT_ALLOW_ORIENTATION_OVERRIDE"
  android:value="true|false"/>

คำสั่ง adb เพื่อทดสอบการลบล้าง

วิธีใช้การลบล้าง

adb shell am compat enable OVERRIDE_ANY_ORIENTATION <package>

วิธีนำการลบล้างออก

adb shell am compat disable OVERRIDE_ANY_ORIENTATION <package>

หมายเหตุ: คำสั่งจะมีผลชั่วคราวหรือนำการลบล้างออกเท่านั้น

OVERRIDE_ANY_ORIENTATION_TO_USER

ช่วยให้แอปแสดงโฆษณาในพื้นที่แสดงผลที่มีอยู่ได้ ลบล้างข้อจำกัดด้านการวางแนว ความสามารถในการปรับขนาด และสัดส่วนภาพที่ระบุไว้ในไฟล์ Manifest ของแอป นอกจากนี้ ยังไม่รับสายที่โทรไปยัง Activity#setRequestedOrientation() หรือ Activity#getRequestedOrientation()

วิธีที่แอปจะให้ผลลัพธ์เหมือนกับการลบล้าง

  • อย่าตั้งค่าแอตทริบิวต์ไฟล์ Manifest android:screenOrientation หรือตั้งค่าแอตทริบิวต์เป็น "user"

  • ตั้งค่าแอตทริบิวต์ไฟล์ Manifest android:resizeableActivity เป็น true

  • ในหน้าจอขนาดเล็ก หากต้องการรองรับการปรับขนาดแอปขณะปิดใช้โหมดหลายหน้าต่างด้วย android:resizeableActivity=false ให้ตั้งค่าแฟล็กข้อมูลเมตา android.supports_size_changes เป็น true อย่าตั้งค่า minAspectRatio และ maxAspectRatio

    รองรับโหมดหลายหน้าต่าง

วิธีเพิ่มประสิทธิภาพแอป

เปิดใช้แอปให้รองรับการวางแนวทั้งหมด และอย่าตั้งค่าscreenOrientation ข้อกำหนดในไฟล์ Manifest ของแอป รองรับการปรับขนาดแอป โหมดหลายหน้าต่าง และสัดส่วนการแสดงผลทั้งหมดโดยตั้งค่าแอตทริบิวต์ android:resizeableActivity ในไฟล์ Manifest ของแอปเป็น true ดูรองรับขนาดการแสดงผลต่างๆ

วิธีปิดใช้หรือเลือกไม่ใช้การลบล้าง

ดู OVERRIDE_ANY_ORIENTATION

แฟล็กพร็อพเพอร์ตี้เพื่อปรับการลบล้าง

ดู OVERRIDE_ANY_ORIENTATION

คำสั่ง adb เพื่อทดสอบการลบล้าง

วิธีใช้การลบล้าง

adb shell am compat enable OVERRIDE_ANY_ORIENTATION_TO_USER <package>

วิธีนำการลบล้างออก

adb shell am compat disable OVERRIDE_ANY_ORIENTATION_TO_USER <package>

หมายเหตุ: คำสั่งจะมีผลชั่วคราวหรือนำการลบล้างออกเท่านั้น

OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT

เปิดใช้การวางแนวตั้งสำหรับกิจกรรมทั้งหมดในแพ็กเกจ หากไม่ได้เปิดใช้ OVERRIDE_ANY_ORIENTATION ระบบจะใช้การลบล้าง เฉพาะในกรณีที่กิจกรรมไม่ได้ระบุการวางแนวคงที่อื่นๆ

วิธีที่แอปจะให้ผลลัพธ์เหมือนกับการลบล้าง

ดู OVERRIDE_ANY_ORIENTATION

วิธีเพิ่มประสิทธิภาพแอป

ดู OVERRIDE_ANY_ORIENTATION

วิธีปิดใช้หรือเลือกไม่ใช้การลบล้าง

ดู OVERRIDE_ANY_ORIENTATION

แฟล็กพร็อพเพอร์ตี้เพื่อปรับการลบล้าง

ดู OVERRIDE_ANY_ORIENTATION

คำสั่ง adb เพื่อทดสอบการลบล้าง

วิธีใช้การลบล้าง

adb shell am compat enable OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT <package>

วิธีนำการลบล้างออก

adb shell am compat disable OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT <package>

หมายเหตุ: คำสั่งจะมีผลชั่วคราวหรือนำการลบล้างออกเท่านั้น

OVERRIDE_UNDEFINED_ORIENTATION_TO_NOSENSOR

เปิดใช้การวางแนว nosensor สำหรับกิจกรรมทั้งหมดใน แพ็กเกจ ระบบจะใช้การลบล้างก็ต่อเมื่อกิจกรรมไม่ได้ระบุการวางแนวคงที่อื่นๆ เว้นแต่จะเปิดใช้ OVERRIDE_ANY_ORIENTATION

วิธีที่แอปจะให้ผลลัพธ์เหมือนกับการลบล้าง

ดู OVERRIDE_ANY_ORIENTATION

วิธีเพิ่มประสิทธิภาพแอป

ดู OVERRIDE_ANY_ORIENTATION

วิธีปิดใช้หรือเลือกไม่ใช้การลบล้าง

ดู OVERRIDE_ANY_ORIENTATION

แฟล็กพร็อพเพอร์ตี้เพื่อปรับการลบล้าง

ดู OVERRIDE_ANY_ORIENTATION

คำสั่ง adb เพื่อทดสอบการลบล้าง

วิธีใช้การลบล้าง

adb shell am compat enable OVERRIDE_UNDEFINED_ORIENTATION_TO_NOSENSOR <package>

วิธีนำการลบล้างออก

adb shell am compat disable OVERRIDE_UNDEFINED_ORIENTATION_TO_NOSENSOR <package>

หมายเหตุ: คำสั่งจะมีผลชั่วคราวหรือนำการลบล้างออกเท่านั้น

OVERRIDE_LANDSCAPE_ORIENTATION_TO_REVERSE_LANDSCAPE

เปิดใช้การวางแนว reverseLandscape สำหรับกิจกรรมทั้งหมดใน แพ็กเกจ ระบบจะใช้การลบล้างก็ต่อเมื่อกิจกรรมไม่ได้ระบุการวางแนวคงที่อื่นๆ เว้นแต่จะเปิดใช้ OVERRIDE_ANY_ORIENTATION

วิธีที่แอปจะให้ผลลัพธ์เหมือนกับการลบล้าง

ดู OVERRIDE_ANY_ORIENTATION

วิธีเพิ่มประสิทธิภาพแอป

ดู OVERRIDE_ANY_ORIENTATION

วิธีปิดใช้หรือเลือกไม่ใช้การลบล้าง

ดู OVERRIDE_ANY_ORIENTATION

แฟล็กพร็อพเพอร์ตี้เพื่อปรับการลบล้าง

ดู OVERRIDE_ANY_ORIENTATION

คำสั่ง adb เพื่อทดสอบการลบล้าง

วิธีใช้การลบล้าง

adb shell am compat enable OVERRIDE_LANDSCAPE_ORIENTATION_TO_REVERSE_LANDSCAPE <package>

วิธีนำการลบล้างออก

adb shell am compat disable OVERRIDE_LANDSCAPE_ORIENTATION_TO_REVERSE_LANDSCAPE <package>

หมายเหตุ: คำสั่งจะมีผลชั่วคราวหรือนำการลบล้างออกเท่านั้น

OVERRIDE_ORIENTATION_ONLY_FOR_CAMERA

ข้อจำกัด OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT, OVERRIDE_UNDEFINED_ORIENTATION_TO_NOSENSOR, และ OVERRIDE_LANDSCAPE_ORIENTATION_TO_REVERSE_LANDSCAPE จะมีผลเมื่อการเชื่อมต่อกล้องทำงานอยู่เท่านั้น

วิธีที่แอปจะให้ผลลัพธ์เหมือนกับการลบล้าง

ดู OVERRIDE_ANY_ORIENTATION

วิธีเพิ่มประสิทธิภาพแอป

ดู OVERRIDE_ANY_ORIENTATION

วิธีปิดใช้หรือเลือกไม่ใช้การลบล้าง

ดู OVERRIDE_ANY_ORIENTATION

แฟล็กพร็อพเพอร์ตี้เพื่อปรับการลบล้าง

ดู OVERRIDE_ANY_ORIENTATION

คำสั่ง adb เพื่อทดสอบการลบล้าง

วิธีใช้การลบล้าง

adb shell am compat enable OVERRIDE_ORIENTATION_ONLY_FOR_CAMERA <package>

วิธีนำการลบล้างออก

adb shell am compat disable OVERRIDE_ORIENTATION_ONLY_FOR_CAMERA <package>

หมายเหตุ: คำสั่งจะมีผลชั่วคราวหรือนำการลบล้างออกเท่านั้น

OVERRIDE_USE_DISPLAY_LANDSCAPE_NATURAL_ORIENTATION

จำกัดการวางแนวจอแสดงผลเป็นแนวนอนตามการวางแนวธรรมชาติเมื่อเป็นไปตาม เงื่อนไขต่อไปนี้

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

วิธีที่แอปจะให้ผลลัพธ์เหมือนกับการลบล้าง

ไม่เกี่ยวข้อง คุณควรแก้ปัญหาในตรรกะของแอปพลิเคชัน

วิธีเพิ่มประสิทธิภาพแอป

ดู OVERRIDE_ANY_ORIENTATION

วิธีปิดใช้หรือเลือกไม่ใช้การลบล้าง

ตั้งค่าสถานะพร็อพเพอร์ตี้ PROPERTY_COMPAT_ALLOW_DISPLAY_ORIENTATION_OVERRIDE เป็น false

แฟล็กพร็อพเพอร์ตี้เพื่อปรับการลบล้าง

<property android:name="android.window.PROPERTY_COMPAT_ALLOW_DISPLAY_ORIENTATION_OVERRIDE"
  android:value="true|false"/>

คำสั่ง adb เพื่อทดสอบการลบล้าง

วิธีใช้การลบล้าง

adb shell am compat enable OVERRIDE_USE_DISPLAY_LANDSCAPE_NATURAL_ORIENTATION <package>

วิธีนำการลบล้างออก

adb shell am compat disable OVERRIDE_USE_DISPLAY_LANDSCAPE_NATURAL_ORIENTATION <package>

หมายเหตุ: คำสั่งจะมีผลชั่วคราวหรือนำการลบล้างออกเท่านั้น

OVERRIDE_ENABLE_COMPAT_IGNORE_REQUESTED_ORIENTATION

เปิดใช้นโยบายความเข้ากันได้ที่ข้ามการอัปเดตการวางแนวแอปเพื่อตอบสนองต่อแอป ที่เรียกใช้ Activity#setRequestedOrientation() เมื่อแอป เปิดตัวอีกครั้งหรือมีการจัดการความเข้ากันได้ของกล้องที่ใช้งานอยู่

วิธีที่แอปจะให้ผลลัพธ์เหมือนกับการลบล้าง

ตั้งค่าสถานะพร็อพเพอร์ตี้ PROPERTY_COMPAT_IGNORE_REQUESTED_ORIENTATION เป็น true

วิธีเพิ่มประสิทธิภาพแอป

ดู OVERRIDE_ANY_ORIENTATION

วิธีปิดใช้หรือเลือกไม่ใช้การลบล้าง

ตั้งค่าสถานะพร็อพเพอร์ตี้ PROPERTY_COMPAT_IGNORE_REQUESTED_ORIENTATION เป็น false

แฟล็กพร็อพเพอร์ตี้เพื่อปรับการลบล้าง

<property android:name="android.window.PROPERTY_COMPAT_IGNORE_REQUESTED_ORIENTATION"
  android:value="true|false"/>

คำสั่ง adb เพื่อทดสอบการลบล้าง

วิธีใช้การลบล้าง

adb shell am compat enable OVERRIDE_ENABLE_COMPAT_IGNORE_REQUESTED_ORIENTATION <package>

วิธีนำการลบล้างออก

adb shell am compat disable OVERRIDE_ENABLE_COMPAT_IGNORE_REQUESTED_ORIENTATION <package>

หมายเหตุ: คำสั่งจะมีผลชั่วคราวหรือนำการลบล้างออกเท่านั้น

OVERRIDE_ENABLE_COMPAT_IGNORE_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED

เปิดใช้นโยบายความเข้ากันได้ซึ่งไม่สนใจการวางแนวที่แอปขอใน การตอบสนองต่อการเรียก Activity#setRequestedOrientation() ของแอปมากกว่า 2 ครั้ง ใน 1 วินาที หากกิจกรรมไม่ได้อยู่ในรูปแบบจดหมายสำหรับวางแนวคงที่

วิธีที่แอปจะให้ผลลัพธ์เหมือนกับการลบล้าง

ไม่เกี่ยวข้อง คุณควรแก้ปัญหาในตรรกะของแอปพลิเคชัน

วิธีเพิ่มประสิทธิภาพแอป

ดู OVERRIDE_ANY_ORIENTATION

วิธีปิดใช้หรือเลือกไม่ใช้การลบล้าง

ตั้งค่าสถานะพร็อพเพอร์ตี้ PROPERTY_COMPAT_ALLOW_IGNORING_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED เป็น false

แฟล็กพร็อพเพอร์ตี้เพื่อปรับการลบล้าง

<property android:name="android.window.PROPERTY_COMPAT_ALLOW_IGNORING_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED"
  android:value="false"/>

คำสั่ง adb เพื่อทดสอบการลบล้าง

วิธีใช้การลบล้าง

adb shell am compat enable OVERRIDE_ENABLE_COMPAT_IGNORE_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED <package>

วิธีนำการลบล้างออก

adb shell am compat disable OVERRIDE_ENABLE_COMPAT_IGNORE_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED <package>

หมายเหตุ: คำสั่งจะมีผลชั่วคราวหรือนำการลบล้างออกเท่านั้น

OVERRIDE_RESPECT_REQUESTED_ORIENTATION

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

วิธีที่แอปจะให้ผลลัพธ์เหมือนกับการลบล้าง

ไม่เกี่ยวข้อง คุณควรแก้ปัญหาในตรรกะของแอปพลิเคชัน

วิธีเพิ่มประสิทธิภาพแอป

ดู OVERRIDE_ANY_ORIENTATION

วิธีปิดใช้หรือเลือกไม่ใช้การลบล้าง

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

แฟล็กพร็อพเพอร์ตี้เพื่อปรับการลบล้าง

ไม่มีการแจ้งว่าพร็อพเพอร์ตี้นี้ไม่เหมาะสมสำหรับการลบล้างนี้

คำสั่ง adb เพื่อทดสอบการลบล้าง

วิธีใช้การลบล้าง

adb shell am compat enable OVERRIDE_RESPECT_REQUESTED_ORIENTATION <package>

วิธีนำการลบล้างออก

adb shell am compat disable OVERRIDE_RESPECT_REQUESTED_ORIENTATION <package>

หมายเหตุ: คำสั่งจะมีผลชั่วคราวหรือนำการลบล้างออกเท่านั้น

NEVER_SANDBOX_DISPLAY_APIS

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

วิธีที่แอปจะให้ผลลัพธ์เหมือนกับการลบล้าง

ประกาศว่ากิจกรรมปรับขนาดได้โดยตั้งค่าแอตทริบิวต์ไฟล์ Manifest android:resizeableActivity เป็น true หรือตั้งค่าสถานะข้อมูลเมตา android.supports_size_changes เป็น true

วิธีเพิ่มประสิทธิภาพแอป

แอปที่ประกาศว่าปรับขนาดได้อย่างเต็มที่ควรไม่พึ่งพาขนาดการแสดงผลเพื่อจัดตำแหน่งองค์ประกอบ UI ย้ายข้อมูลแอปไปยัง API ที่อัปเดตล่าสุดซึ่ง มีWindowMetrics หากใช้ Jetpack Compose ให้ใช้ประโยชน์จาก API ของ WindowSizeClass เพื่อวาด UI ตามพื้นที่หน้าจอที่แอปมีในจอแสดงผลปัจจุบัน ดูใช้คลาสขนาดหน้าต่าง

วิธีปิดใช้หรือเลือกไม่ใช้การลบล้าง

เลือกไม่ใช้ไม่ได้ ย้ายข้อมูลจาก API ที่เลิกใช้งานแล้ว

แฟล็กพร็อพเพอร์ตี้เพื่อปรับการลบล้าง

ไม่มีการแจ้งว่าพร็อพเพอร์ตี้นี้ไม่เหมาะสมสำหรับการลบล้างนี้

คำสั่ง adb เพื่อทดสอบการลบล้าง

วิธีใช้การลบล้าง

adb shell am compat enable NEVER_SANDBOX_DISPLAY_APIS <package>

วิธีนำการลบล้างออก

adb shell am compat disable NEVER_SANDBOX_DISPLAY_APIS <package>

หมายเหตุ: คำสั่งจะมีผลชั่วคราวหรือนำการลบล้างออกเท่านั้น

ALWAYS_SANDBOX_DISPLAY_APIS

บังคับให้แพ็กเกจใช้แซนด์บ็อกซ์ Display API เสมอ ไม่ว่าจะอยู่ในโหมดการแสดงหน้าต่างใดก็ตาม Display API จะระบุขอบเขตของแอปเสมอ

วิธีที่แอปจะให้ผลลัพธ์เหมือนกับการลบล้าง

ประกาศว่ากิจกรรมปรับขนาดไม่ได้โดยตั้งค่าแอตทริบิวต์ android:resizeableActivity เป็น false หรือตั้งค่า android.supports_size_changesแฟล็กข้อมูลเมตาเป็น false

วิธีเพิ่มประสิทธิภาพแอป

แอปที่ประกาศว่าปรับขนาดได้อย่างเต็มที่ไม่ควรใช้ขนาดการแสดงผลเพื่อ จัดตำแหน่งองค์ประกอบ UI ย้ายข้อมูลแอปจาก API ที่เลิกใช้งานแล้วไปยัง API ล่าสุดที่ให้ WindowMetrics ดูWindowMetricsCalculator

วิธีปิดใช้หรือเลือกไม่ใช้การลบล้าง

เลือกไม่ใช้ไม่ได้ ย้ายข้อมูลจาก API ที่เลิกใช้งานแล้ว

แฟล็กพร็อพเพอร์ตี้เพื่อปรับการลบล้าง

ไม่มีการแจ้งว่าพร็อพเพอร์ตี้นี้ไม่เหมาะสมสำหรับการลบล้างนี้

คำสั่ง adb เพื่อทดสอบการลบล้าง

วิธีใช้การลบล้าง

adb shell am compat enable ALWAYS_SANDBOX_DISPLAY_APIS <package>

วิธีนำการลบล้างออก

adb shell am compat disable ALWAYS_SANDBOX_DISPLAY_APIS <package>

หมายเหตุ: คำสั่งจะมีผลชั่วคราวหรือนำการลบล้างออกเท่านั้น

OVERRIDE_SANDBOX_VIEW_BOUNDS_APIS

บังคับให้แพ็กเกจแซนด์บ็อกซ์ API View ต่อไปนี้ให้เป็นขอบเขตของกิจกรรม

วิธีที่แอปจะให้ผลลัพธ์เหมือนกับการลบล้าง

แก้ไขปัญหาในโค้ดของแอปพลิเคชันโดยใช้ API ที่ระบุขอบเขตของ หน้าต่างแอปและออฟเซ็ตที่สัมพันธ์กับหน้าต่างแอปแทนที่จะเป็นขอบเขตของ จอแสดงผลของอุปกรณ์และออฟเซ็ตที่สัมพันธ์กับจอแสดงผลของอุปกรณ์

วิธีเพิ่มประสิทธิภาพแอป

แอปควรใช้ View API โดยคำนึงถึงความเป็นไปได้ที่จะเกิดการแสดงภาพแบบกล่องจดหมาย และโหมดหลายหน้าต่างที่ใช้กับแอป ดูWindowMetricsCalculator

วิธีปิดใช้หรือเลือกไม่ใช้การลบล้าง

ตั้งค่าสถานะพร็อพเพอร์ตี้ PROPERTY_COMPAT_ALLOW_SANDBOXING_VIEW_BOUNDS_APIS เป็น false

แฟล็กพร็อพเพอร์ตี้เพื่อปรับการลบล้าง

<property android:name="android.window.PROPERTY_COMPAT_ALLOW_SANDBOXING_VIEW_BOUNDS_APIS"
  android:value="false"/>

คำสั่ง adb เพื่อทดสอบการลบล้าง

วิธีใช้การลบล้าง

adb shell am compat enable OVERRIDE_SANDBOX_VIEW_BOUNDS_APIS <package>

วิธีนำการลบล้างออก

adb shell am compat disable OVERRIDE_SANDBOX_VIEW_BOUNDS_APIS <package>

หมายเหตุ: คำสั่งจะมีผลชั่วคราวหรือนำการลบล้างออกเท่านั้น

OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION

ปิดใช้การหมุนเวียน ปรับปรุงประสบการณ์ของผู้ใช้ในบางแอป

วิธีที่แอปจะให้ผลลัพธ์เหมือนกับการลบล้าง

ตั้งค่าสถานะพร็อพเพอร์ตี้ PROPERTY_CAMERA_COMPAT_ALLOW_FORCE_ROTATION เป็น false

วิธีเพิ่มประสิทธิภาพแอป

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

วิธีปิดใช้หรือเลือกไม่ใช้การลบล้าง

ตั้งค่าสถานะพร็อพเพอร์ตี้ PROPERTY_CAMERA_COMPAT_ALLOW_FORCE_ROTATION เป็น true

แฟล็กพร็อพเพอร์ตี้เพื่อปรับการลบล้าง

<property android:name="android.window.PROPERTY_CAMERA_COMPAT_ALLOW_FORCE_ROTATION"
  android:value="true|false"/>

คำสั่ง adb เพื่อทดสอบการลบล้าง

หากต้องการใช้การลบล้างซึ่งจะนำการหมุนบังคับออก ให้ทำดังนี้

adb shell am compat enable OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION <package>

หากต้องการนำการลบล้างออก ซึ่งจะช่วยให้เกิดการหมุนเวียนแบบบังคับได้ ให้ทำดังนี้

adb shell am compat disable OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION <package>

หมายเหตุ: คำสั่งจะมีผลชั่วคราวหรือนำการลบล้างออกเท่านั้น

OVERRIDE_CAMERA_COMPAT_DISABLE_SIMULATE_REQUESTED_ORIENTATION

ปิดใช้การจำลองการประมวลผลการวางแนวที่ขอสำหรับกล้อง ปรับปรุงประสบการณ์ของผู้ใช้ในบางแอป

วิธีที่แอปจะให้ผลลัพธ์เหมือนกับการลบล้าง

ตั้งค่าสถานะพร็อพเพอร์ตี้ PROPERTY_CAMERA_COMPAT_ALLOW_SIMULATE_REQUESTED_ORIENTATION เป็น false

วิธีเพิ่มประสิทธิภาพแอป

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

วิธีปิดใช้หรือเลือกไม่ใช้การลบล้าง

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

แฟล็กพร็อพเพอร์ตี้เพื่อปรับการลบล้าง

<property android:name="android.window.PROPERTY_CAMERA_COMPAT_ALLOW_SIMULATE_REQUESTED_ORIENTATION"
  android:value="true|false"/>

คำสั่ง adb เพื่อทดสอบการลบล้าง

หากต้องการใช้การลบล้างซึ่งจะนำการจำลองการวางแนวที่ขอออก ให้ทำดังนี้

adb shell am compat enable OVERRIDE_CAMERA_COMPAT_DISABLE_SIMULATE_REQUESTED_ORIENTATION <package>

หากต้องการนำการลบล้างออก ซึ่งจะช่วยให้จำลองการวางแนวที่ขอได้ ให้ทำดังนี้

adb shell am compat disable OVERRIDE_CAMERA_COMPAT_DISABLE_SIMULATE_REQUESTED_ORIENTATION <package>

หมายเหตุ: คำสั่งจะมีผลชั่วคราวหรือนำการลบล้างออกเท่านั้น

OVERRIDE_CAMERA_COMPAT_DISABLE_REFRESH

ปิดใช้การรีเฟรชกิจกรรมหลังจากหมุนโดยบังคับ ปรับปรุงประสบการณ์ของผู้ใช้ เมื่อการรีเฟรชทำให้แอปสูญเสียสถานะ

วิธีที่แอปจะให้ผลลัพธ์เหมือนกับการลบล้าง

ตั้งค่าสถานะพร็อพเพอร์ตี้ PROPERTY_CAMERA_COMPAT_ALLOW_REFRESH เป็น false

วิธีเพิ่มประสิทธิภาพแอป

ดู OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION

วิธีปิดใช้หรือเลือกไม่ใช้การลบล้าง

ตั้งค่าสถานะพร็อพเพอร์ตี้ PROPERTY_CAMERA_COMPAT_ALLOW_REFRESH เป็น true

แฟล็กพร็อพเพอร์ตี้เพื่อปรับการลบล้าง

<property android:name="android.window.PROPERTY_CAMERA_COMPAT_ALLOW_REFRESH"
  android:value="true|false"/>

คำสั่ง adb เพื่อทดสอบการลบล้าง

หากต้องการใช้การลบล้างซึ่งจะนำการรีเฟรชกิจกรรมออก ให้ทำดังนี้

adb shell am compat enable OVERRIDE_CAMERA_COMPAT_DISABLE_REFRESH <package>

วิธีนำการลบล้างออก ซึ่งจะช่วยให้รีเฟรชกิจกรรมได้

adb shell am compat disable OVERRIDE_CAMERA_COMPAT_DISABLE_REFRESH <package>

หมายเหตุ: คำสั่งจะมีผลชั่วคราวหรือนำการลบล้างออกเท่านั้น

OVERRIDE_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE

ทำให้แพ็กเกจที่ใช้การรีเฟรชกิจกรรมโดยใช้รอบonResume()onPause()onResume() แทนonResume()onStop()onResume() หลังจากบังคับหมุนความเข้ากันได้ของกล้อง

วิธีที่แอปจะให้ผลลัพธ์เหมือนกับการลบล้าง

ตั้งค่าสถานะพร็อพเพอร์ตี้ PROPERTY_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE เป็น true

วิธีเพิ่มประสิทธิภาพแอป

ดู OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION

วิธีปิดใช้หรือเลือกไม่ใช้การลบล้าง

ตั้งค่าสถานะพร็อพเพอร์ตี้ PROPERTY_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE เป็น false

แฟล็กพร็อพเพอร์ตี้เพื่อปรับการลบล้าง

<property android:name="android.window.PROPERTY_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE"
  android:value="true|false"/>

คำสั่ง adb เพื่อทดสอบการลบล้าง

วิธีใช้การลบล้าง

adb shell am compat enable OVERRIDE_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE <package>

วิธีนำการลบล้างออก

adb shell am compat disable OVERRIDE_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE <package>

หมายเหตุ: คำสั่งจะมีผลชั่วคราวหรือนำการลบล้างออกเท่านั้น

OVERRIDE_CAMERA_LANDSCAPE_TO_PORTRAIT

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

วิธีที่แอปจะให้ผลลัพธ์เหมือนกับการลบล้าง

ตั้งค่าสถานะพร็อพเพอร์ตี้ PROPERTY_COMPAT_OVERRIDE_LANDSCAPE_TO_PORTRAIT เป็น true

วิธีเพิ่มประสิทธิภาพแอป

ดู OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION

วิธีปิดใช้หรือเลือกไม่ใช้การลบล้าง

ตั้งค่าสถานะพร็อพเพอร์ตี้ PROPERTY_COMPAT_OVERRIDE_LANDSCAPE_TO_PORTRAIT เป็น false

แฟล็กพร็อพเพอร์ตี้เพื่อปรับการลบล้าง

<property android:name="android.camera.PROPERTY_COMPAT_OVERRIDE_LANDSCAPE_TO_PORTRAIT"
  android:value="true|false"/>

คำสั่ง adb เพื่อทดสอบการลบล้าง

หากต้องการใช้การลบล้างซึ่งจะใช้การครอบตัดกล้องหน้าด้านใน ให้ทำดังนี้

adb shell am compat enable OVERRIDE_CAMERA_LANDSCAPE_TO_PORTRAIT <package>

วิธีนำการลบล้างออก ซึ่งจะนำการครอบตัดกล้องหน้าด้านในออก

adb shell am compat disable OVERRIDE_CAMERA_LANDSCAPE_TO_PORTRAIT <package>

หมายเหตุ: คำสั่งจะมีผลชั่วคราวหรือนำการลบล้างออกเท่านั้น

OVERRIDE_DISABLE_MEDIA_PROJECTION_SINGLE_APP_OPTION

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

วิธีที่แอปจะให้ผลลัพธ์เหมือนกับการลบล้าง

อนุญาตลักษณะการทำงานของการฉายภาพสื่อเริ่มต้น (ใช้งานใน Android 14, ระดับ API 34 พร้อม createScreenCaptureIntent()) ซึ่งช่วยให้ผู้ใช้เลือกว่าจะแชร์ทั้งหน้าจอหรือหน้าต่างแอปเดียว โดยไม่คำนึงถึงโหมดการจัดกรอบเวลา หรือโทรหา createScreenCaptureIntent(MediaProjectionConfig) พร้อมอาร์กิวเมนต์ MediaProjectionConfig ที่ส่งคืนจากการ เรียกใช้ createConfigForUserChoice()

วิธีเพิ่มประสิทธิภาพแอป

อนุญาตให้ผู้ใช้เลือกว่าจะแชร์ทั้งจอแสดงผลของอุปกรณ์หรือหน้าต่างแอป ในระหว่างการฉายภาพสื่อ ซึ่งเป็นลักษณะการทำงานเริ่มต้นใน Android 14

ทำให้แอปปรับขนาดได้ (resizeableActivity="true") เพื่อ รองรับโหมดหลายหน้าต่าง

วิธีปิดใช้หรือเลือกไม่ใช้การลบล้าง

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

แฟล็กพร็อพเพอร์ตี้เพื่อปรับการลบล้าง

ไม่มี

คำสั่ง adb เพื่อทดสอบการลบล้าง

หากต้องการใช้การลบล้าง ซึ่งจะยกเลิกการเลือกไม่ใช้การแชร์หน้าจอบางส่วนของแอป (นั่นคือ เปิดใช้การแชร์หน้าจอบางส่วน) ให้ทำดังนี้

adb shell am compat enable OVERRIDE_DISABLE_MEDIA_PROJECTION_SINGLE_APP_OPTION <package>

หากต้องการยกเลิกการลบล้างซึ่งอนุญาตให้แอปเลือกไม่ใช้การแชร์หน้าจอบางส่วน ให้ทำดังนี้

adb shell am compat disable OVERRIDE_DISABLE_MEDIA_PROJECTION_SINGLE_APP_OPTION <package>

หมายเหตุ: คำสั่งจะมีผลชั่วคราวหรือนำการลบล้างออกเท่านั้น

OVERRIDE_ENABLE_COMPAT_FAKE_FOCUS

เปิดใช้การส่งโฟกัสปลอมสำหรับแอปที่ไม่ได้โฟกัสในโหมดแยกหน้าจอ เอนจินเกมบางตัว จะรอรับโฟกัสก่อนที่จะวาดเนื้อหาของแอป ดังนั้น โฟกัสปลอมจึงช่วยให้แอปไม่เป็นสีดำเมื่อกลับมาทำงานต่อและยังไม่มีโฟกัส

วิธีที่แอปจะให้ผลลัพธ์เหมือนกับการลบล้าง

ตั้งค่าสถานะพร็อพเพอร์ตี้ PROPERTY_COMPAT_ENABLE_FAKE_FOCUS เป็น true

วิธีเพิ่มประสิทธิภาพแอป

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

หากคุณใช้เกมเอนจิน Unity ให้อัปเกรดเป็นเวอร์ชัน 2019.4.40 ขึ้นไป แล้วส่งออกเกมอีกครั้ง เลือกตัวเลือกหน้าต่างที่ปรับขนาดได้ในการตั้งค่าโปรแกรมเล่น Android

วิธีปิดใช้หรือเลือกไม่ใช้การลบล้าง

ตั้งค่าสถานะพร็อพเพอร์ตี้ PROPERTY_COMPAT_ENABLE_FAKE_FOCUS เป็น false

แฟล็กพร็อพเพอร์ตี้เพื่อปรับการลบล้าง

<property android:name="android.window.PROPERTY_COMPAT_ENABLE_FAKE_FOCUS"
  android:value="true|false"/>

คำสั่ง adb เพื่อทดสอบการลบล้าง

วิธีใช้การลบล้าง

adb shell am compat enable OVERRIDE_ENABLE_COMPAT_FAKE_FOCUS <package>

วิธีนำการลบล้างออก

adb shell am compat disable OVERRIDE_ENABLE_COMPAT_FAKE_FOCUS <package>

หมายเหตุ: คำสั่งจะมีผลชั่วคราวหรือนำการลบล้างออกเท่านั้น

OVERRIDE_EXCLUDE_CAPTION_INSETS_FROM_APP_BOUNDS

เมื่อเปิดใช้การลบล้าง กิจกรรมจะได้รับการกำหนดค่าที่มี การแทรกแถบคำบรรยายแทนเสียง โดยปกติแล้ว ระบบจะไม่รวมการแทรกแถบคำบรรยายแทนเสียงไว้ในการ กำหนดค่า

วิธีที่แอปจะให้ผลลัพธ์เหมือนกับการลบล้าง

เปิดใช้การแสดงผลแบบไร้ขอบ โปรดดูข้อมูลต่อไปนี้

วิธีเพิ่มประสิทธิภาพแอป

คุณหลีกเลี่ยงปัญหานี้ได้หากแอปเปิดใช้การแสดงผลแบบไร้ขอบ

วิธีปิดใช้หรือเลือกไม่ใช้การลบล้าง

ตั้งค่าสถานะพร็อพเพอร์ตี้ PROPERTY_COMPAT_ALLOW_EXCLUDE_CAPTION_INSETS เป็น false

แฟล็กพร็อพเพอร์ตี้เพื่อปรับการลบล้าง

<property android:name="android.window.PROPERTY_COMPAT_ALLOW_EXCLUDE_CAPTION_INSETS"
  android:value="true|false"/>

คำสั่ง adb เพื่อทดสอบการลบล้าง

วิธีใช้การลบล้าง

adb shell am compat enable OVERRIDE_EXCLUDE_CAPTION_INSETS_FROM_APP_BOUNDS <package>

วิธีนำการลบล้างออก

adb shell am compat disable OVERRIDE_EXCLUDE_CAPTION_INSETS_FROM_APP_BOUNDS <package>

หมายเหตุ: คำสั่งจะมีผลชั่วคราวหรือนำการลบล้างออกเท่านั้น

แหล่งข้อมูลเพิ่มเติม


  1. เจ้าของอุปกรณ์เสมือนจริงคือแอปที่เชื่อถือได้หรือมีสิทธิ์ซึ่งจัดการอุปกรณ์เสมือนจริง เจ้าของอุปกรณ์เสมือนจริงสร้างอุปกรณ์เสมือนจริงเพื่อแสดงผลแอป แล้วจึงฉายแอปไปยังอุปกรณ์ระยะไกล เช่น คอมพิวเตอร์ส่วนบุคคล เทคโนโลยีความจริงเสมือน (VR) หรือระบบสาระบันเทิงในรถยนต์ เจ้าของอุปกรณ์เสมือนจริงอยู่ในอุปกรณ์ในพื้นที่ เช่น โทรศัพท์