ภาพรวมฟีเจอร์และ API

Android 12 มาพร้อมฟีเจอร์และ API ใหม่ๆ ที่ยอดเยี่ยมสำหรับนักพัฒนาแอป ส่วนด้านล่างจะช่วยให้คุณทราบข้อมูลเกี่ยวกับฟีเจอร์สำหรับแอปและเริ่มต้นใช้งาน API ที่เกี่ยวข้อง

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

ประสบการณ์ของผู้ใช้

Material You

Android 12 เปิดตัวภาษาออกแบบใหม่ที่เรียกว่า Material You ซึ่งจะช่วยให้คุณสร้างแอปที่สวยงามและปรับเปลี่ยนในแบบของคุณได้มากขึ้น หากต้องการนำการอัปเดต Material Design 3 ล่าสุดทั้งหมดมาใช้ในแอป ให้ลองใช้คอมโพเนนต์ Material Design เวอร์ชันอัลฟ่า

Material You

การปรับปรุงวิดเจ็ต

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

ดูข้อมูลเพิ่มเติมได้ที่การปรับปรุงวิดเจ็ต Android 12

การแทรกข้อมูลอย่างละเอียด

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

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

API หน้าจอเริ่มต้น (Splash Screen) ของแอป

Android 12 เปิดตัวภาพเคลื่อนไหวใหม่สำหรับการเปิดแอปทั้งหมด ซึ่งรวมถึงการเคลื่อนไหวเข้าสู่แอปจากจุดที่เปิด หน้าจอเริ่มต้นที่แสดงไอคอนแอป และการเปลี่ยนเข้าสู่ตัวแอปเอง ดูรายละเอียดเพิ่มเติมได้ในคู่มือนักพัฒนาซอฟต์แวร์เกี่ยวกับหน้าจอเริ่มต้น (Splash Screen)

API มุมโค้งมน

Android 12 เปิดตัว RoundedCorner และ WindowInsets.getRoundedCorner(int position) ซึ่งให้รัศมีและจุดศูนย์กลางสำหรับมุมโค้งมน

ดูข้อมูลเพิ่มเติมได้ที่มุมโค้งมน

ประสบการณ์การโต้ตอบด้วยการสัมผัสที่สมจริง

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

เอฟเฟกต์แอคชูเอเตอร์

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

เอฟเฟกต์การโต้ตอบการสัมผัสที่เชื่อมโยงกับเสียง

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

ดูข้อมูลเพิ่มเติมในเอกสารอ้างอิง HapticGenerator

AppSearch

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

แผนภาพแสดงการจัดทำดัชนีและการค้นหาภายใน AppSearch

AppSearch มี 2 รูปแบบ ได้แก่ ดัชนีในเครื่องสำหรับแอปพลิเคชันของคุณที่เข้ากันได้กับ Android เวอร์ชันเก่า หรือดัชนีส่วนกลางที่ดูแลรักษาสำหรับทั้งระบบใน Android 12 เมื่อใช้ดัชนีส่วนกลาง แอปพลิเคชันของคุณจะอนุญาตให้แสดงข้อมูลบนแพลตฟอร์ม UI ของระบบโดยคอมโพเนนต์อัจฉริยะที่ติดตั้งไว้ล่วงหน้าของระบบได้ ข้อมูลที่แสดงบนแพลตฟอร์ม UI ของระบบจะขึ้นอยู่กับ OEM นอกจากนี้ แอปพลิเคชันของคุณยังแชร์ข้อมูลกับแอปพลิเคชันอื่นๆ ได้อย่างปลอดภัย เพื่อให้แอปพลิเคชันเหล่านั้นค้นหาข้อมูลดังกล่าวได้ด้วย

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

โหมดเกม

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

ดูข้อมูลเพิ่มเติมได้ที่โหมดเกม

คำแนะนำและการปรับปรุงการแสดงภาพซ้อนภาพ (PiP)

Android 12 มีการปรับปรุงต่อไปนี้สำหรับโหมด PiP

การรองรับท่าทางสัมผัสใหม่สำหรับ PiP

ตอนนี้ Android 12 รองรับท่าทางสัมผัสเพื่อซ่อนและบีบเพื่อซูมสำหรับหน้าต่าง PiP แล้ว

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

  • ตอนนี้ผู้ใช้สามารถปรับขนาดหน้าต่าง PIP ได้โดยใช้การบีบเพื่อซูม

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

ฟีเจอร์เหล่านี้ได้แก่

การแจ้งเตือนสายเรียกเข้าใหม่ที่อนุญาตให้จัดอันดับความสำคัญของสายเรียกเข้า

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

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

ใช้โค้ดต่อไปนี้กับการโทรทุกประเภท

Kotlin

// Create a new call with the user as caller.
val incoming_caller = Person.Builder()
    .setName("Jane Doe")
    .setImportant(true)
    .build()

Java

// Create a new call with the user as caller.
Person incoming_caller = new Person.Builder()
    .setName("Jane Doe")
    .setImportant(true)
    .build();

ใช้ forIncomingCall() เพื่อสร้างการแจ้งเตือนรูปแบบการโทรสำหรับสายเรียกเข้า

Kotlin

// Create a call style notification for an incoming call.
val builder = Notification.Builder(context, CHANNEL_ID)
    .setContentIntent(contentIntent)
    .setSmallIcon(smallIcon)
    .setStyle(
         Notification.CallStyle.forIncomingCall(caller, declineIntent, answerIntent))
    .addPerson(incoming_caller)

Java

// Create a call style notification for an incoming call.
Notification.Builder builder = Notification.Builder(context, CHANNEL_ID)
    .setContentIntent(contentIntent)
    .setSmallIcon(smallIcon)
    .setStyle(
        Notification.CallStyle.forIncomingCall(caller, declineIntent, answerIntent))
    .addPerson(incoming_caller);

ใช้ forOngoingCall() เพื่อสร้างการแจ้งเตือนสไตล์การโทรสำหรับการโทรที่ดำเนินอยู่

Kotlin

// Create a call style notification for an ongoing call.
val builder = Notification.Builder(context, CHANNEL_ID)
    .setContentIntent(contentIntent)
    .setSmallIcon(smallIcon)
    .setStyle(
         Notification.CallStyle.forOnGoingCall(caller, hangupIntent))
    .addPerson(second_caller)

Java

// Create a call style notification for an ongoing call.
Notification.Builder builder = Notification.Builder(context, CHANNEL_ID)
    .setContentIntent(contentIntent)
    .setSmallIcon(smallIcon)
    .setStyle(
        Notification.CallStyle.forOnGoingCall(caller, hangupIntent))
    .addPerson(second_caller);

ใช้ forScreeningCall() เพื่อสร้างการแจ้งเตือนสไตล์การโทรสำหรับการสกรีนสายเรียกเข้า

Kotlin

// Create a call style notification for screening a call.
val builder = Notification.Builder(context, CHANNEL_ID)
    .setContentIntent(contentIntent)
    .setSmallIcon(smallIcon)
    .setStyle(
         Notification.CallStyle.forScreeningCall(caller, hangupIntent, answerIntent))
    .addPerson(second_caller)

Java

Notification.Builder builder = Notification.Builder(context, CHANNEL_ID)
    .setContentIntent(contentIntent)
    .setSmallIcon(smallIcon)
    .setStyle(
        Notification.CallStyle.forScreeningCall(caller, hangupIntent, answerIntent))
    .addPerson(second_caller);

การรองรับรูปภาพที่สมบูรณ์ยิ่งขึ้นสำหรับการแจ้งเตือน

ใน Android 12 คุณสามารถปรับปรุงประสบการณ์การแจ้งเตือนของแอปได้โดยการแสดงภาพเคลื่อนไหวในการแจ้งเตือน MessagingStyle() และ BigPictureStyle() นอกจากนี้ ตอนนี้แอปของคุณยังช่วยให้ผู้ใช้ส่งข้อความพร้อมรูปภาพเมื่อตอบกลับข้อความจากหน้าต่างแจ้งเตือนได้ด้วย

การปรับปรุงโหมดใหญ่พิเศษสำหรับการไปยังส่วนต่างๆ ด้วยท่าทางสัมผัส

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

การแชร์ URL ล่าสุด (Pixel เท่านั้น)

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

ดูข้อมูลเพิ่มเติมได้ที่เปิดใช้การแชร์ URL ล่าสุด

ความปลอดภัยและความเป็นส่วนตัว

แดชบอร์ดความเป็นส่วนตัว

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

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

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

สิทธิ์เข้าถึงบลูทูธ

Android 12 เปิดตัวสิทธิ์ BLUETOOTH_SCAN, BLUETOOTH_ADVERTISE และ BLUETOOTH_CONNECT สิทธิ์เหล่านี้ช่วยให้แอปที่กำหนดเป้าหมายเป็น Android 12 โต้ตอบกับอุปกรณ์บลูทูธได้ง่ายขึ้น โดยเฉพาะแอปที่ไม่จำเป็นต้องเข้าถึงตำแหน่งของอุปกรณ์

อัปเดตการประกาศสิทธิ์เข้าถึงบลูทูธของแอป

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

การค้นหากลุ่มสิทธิ์

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

  • หากต้องการระบุกลุ่มสิทธิ์ที่ระบบวางสิทธิ์ที่แพลตฟอร์มกำหนดไว้ ให้เรียกใช้ getGroupOfPlatformPermission()
  • หากต้องการกำหนดสิทธิ์ที่แพลตฟอร์มกำหนดซึ่งระบบได้วางไว้ในกลุ่มสิทธิ์หนึ่งๆ ให้เรียกใช้ getPlatformPermissionsForGroup()

ซ่อนหน้าต่างการวางซ้อนแอปพลิเคชัน

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

หลังจากประกาศสิทธิ์ HIDE_OVERLAY_WINDOWS แล้ว แอปจะเรียกใช้ setHideOverlayWindows() เพื่อระบุว่าควรซ่อนหน้าต่างทั้งหมดประเภท TYPE_APPLICATION_OVERLAY เมื่อหน้าต่างของแอปเองปรากฏขึ้น แอปอาจเลือกดำเนินการนี้เมื่อแสดงหน้าจอที่มีความละเอียดอ่อน เช่น ขั้นตอนการยืนยันธุรกรรม

แอปที่แสดงหน้าต่างประเภท TYPE_APPLICATION_OVERLAY ควรพิจารณาทางเลือกอื่นที่อาจเหมาะสมกับกรณีการใช้งานมากกว่า เช่น การแสดงภาพซ้อนภาพหรือบับเบิล

แฟล็กการป้องกันสิทธิ์ของผู้ลงนามที่รู้จัก

ตั้งแต่ Android 12 เป็นต้นไป แอตทริบิวต์ knownCerts สำหรับสิทธิ์ระดับลายเซ็นจะช่วยให้คุณอ้างอิงไดเจสต์ของใบรับรองการรับรองที่รู้จักได้ ณ เวลาที่ประกาศ

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

เอกสารรับรองคุณสมบัติของอุปกรณ์

Android 12 ขยายชุดแอปที่สามารถยืนยันพร็อพเพอร์ตี้ของอุปกรณ์ที่อยู่ในใบรับรองการรับรองเมื่อแอปเหล่านี้สร้างคีย์ใหม่

ตั้งแต่ Android 9 (ระดับ API 28) เป็นต้นไป เจ้าของนโยบายด้านอุปกรณ์ (DPO) ที่ใช้ Keymaster 4.0 ขึ้นไปจะยืนยันคุณสมบัติของอุปกรณ์ในใบรับรองเอกสารรับรองเหล่านี้ได้ ตั้งแต่ Android 12 เป็นต้นไป แอปที่กำหนดเป้าหมายเป็น Android 12 (ระดับ API 31) ขึ้นไปจะทำการยืนยันนี้ได้โดยใช้เมธอด setDevicePropertiesAttestationIncluded()

พร็อพเพอร์ตี้ของอุปกรณ์ที่สร้างขึ้นจะมีช่อง Build ต่อไปนี้

  • BRAND
  • DEVICE
  • MANUFACTURER
  • MODEL
  • PRODUCT

การดำเนินการกับการแจ้งเตือนในหน้าจอล็อกที่ปลอดภัย

ตั้งแต่ Android 12 เป็นต้นไป คลาส Notification.Action.Builder จะรองรับเมธอด setAuthenticationRequired() ซึ่งช่วยให้แอปกำหนดให้อุปกรณ์ต้องปลดล็อกก่อนที่แอปจะเรียกใช้การดำเนินการแจ้งเตือนที่ระบุ วิธีนี้จะช่วยเพิ่มความปลอดภัยอีกชั้นให้กับการแจ้งเตือนในอุปกรณ์ที่ล็อกอยู่

สตริงที่แปลได้สำหรับ BiometricPrompt

Android 12 เปิดตัว API ใหม่เพื่อช่วยปรับปรุงประสบการณ์ของผู้ใช้ในการตรวจสอบสิทธิ์ด้วยข้อมูลไบโอเมตริกของแอป คลาสที่ฝัง BiometricManager.Strings ใหม่ประกอบด้วยเมธอด getButtonLabel(), getPromptMessage() และ getSettingName() ซึ่งช่วยให้แอปดึงข้อมูลป้ายกำกับปุ่ม ข้อความแจ้ง หรือชื่อการตั้งค่าแอปที่ผู้ใช้อ่านได้และแปลแล้ว ใช้ป้ายกำกับเหล่านี้เพื่อสร้างวิธีการที่แสดงต่อผู้ใช้ที่แม่นยำยิ่งขึ้น ซึ่งเจาะจงสำหรับวิธีการตรวจสอบสิทธิ์ด้วยข้อมูลไบโอเมตริกที่ใช้ เช่น "ใช้การปลดล็อกด้วยใบหน้า" หรือ "ใช้ลายนิ้วมือเพื่อดำเนินการต่อ"

สื่อ

การแปลงสื่อเป็นรูปแบบที่เข้ากันได้

ตั้งแต่ Android 12 (ระดับ API 31) เป็นต้นไป ระบบจะแปลงวิดีโอ HEVC(H.265) และ HDR (HDR10 และ HDR10+) ที่บันทึกในอุปกรณ์เป็น AVC (H.264) โดยอัตโนมัติ ซึ่งเป็นรูปแบบที่เข้ากันได้กับโปรแกรมเล่นมาตรฐานอย่างกว้างขวาง ซึ่งจะใช้ประโยชน์จากตัวแปลงรหัสสมัยใหม่เมื่อพร้อมใช้งานโดยไม่ลดความเข้ากันได้กับแอปพลิเคชันรุ่นเก่า

ดูรายละเอียดเพิ่มเติมได้ที่การแปลงสื่อเป็นรูปแบบที่เข้ากันได้

คลาสประสิทธิภาพ

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

ดูรายละเอียดเพิ่มเติมได้ที่คลาสประสิทธิภาพ

การปรับปรุงการเข้ารหัสวิดีโอ

Android 12 กำหนดชุดคีย์มาตรฐานสำหรับควบคุมค่าพารามิเตอร์การควอนไทเซชัน (QP) สำหรับการเข้ารหัสวิดีโอ ซึ่งช่วยให้นักพัฒนาแอปหลีกเลี่ยงโค้ดเฉพาะของผู้ให้บริการได้

คีย์ใหม่จะพร้อมใช้งานใน MediaFormat API และในคลังสื่อ NDK ด้วย

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

โฟกัสอัตโนมัติ

ตั้งแต่ Android 12 (ระดับ API 31) เป็นต้นไป เมื่อแอปขอโฟกัสเสียงขณะที่แอปอื่นมีโฟกัสและกำลังเล่นอยู่ ระบบจะค่อยๆ เบาเสียงแอปที่กำลังเล่นอยู่

ดูรายละเอียดเพิ่มเติมได้ที่โฟกัสเสียงใน Android 12 ขึ้นไป

การอัปเดต MediaDrm

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

  1. สร้าง MediaDrm
  2. เปิดเซสชันเพื่อรับรหัสเซสชัน
  3. สร้าง MediaCrypto โดยใช้รหัสเซสชัน
  4. โทร MediaCrypto.requiresSecureDecoderComponent(mimeType)

เมื่อใช้เมธอดใหม่ requiresSecureDecoder(@NonNull String mime) และ requiresSecureDecoder(@NonNull String mime, @SecurityLevel int level) คุณจะกำหนดค่านี้ได้ทันทีที่สร้าง MediaDrm

กล้อง

ส่วนขยายของผู้ให้บริการ Camera2

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

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

ดูข้อมูลเพิ่มเติมได้ที่ CameraExtensionCharacteristics

การรองรับเซ็นเซอร์กล้อง Quad Bayer

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

กราฟิกและรูปภาพ

ให้แอปเข้าถึงการติดตาม Tombstone โดยตรง

ตั้งแต่ Android 12 เป็นต้นไป คุณจะเข้าถึง Tombstone ของการขัดข้องของระบบในแอปเป็นบัฟเฟอร์โปรโตคอลได้ผ่านเมธอด ApplicationExitInfo.getTraceInputStream() บัฟเฟอร์โปรโตคอลจะได้รับการจัดรูปแบบโดยใช้สคีมานี้ ก่อนหน้านี้ วิธีเดียวที่จะเข้าถึงข้อมูลนี้ได้คือผ่าน Android Debug Bridge (adb)

ดูข้อมูลเพิ่มเติมได้ที่ให้แอปเข้าถึงการติดตาม Tombstone โดยตรง

การรองรับรูปภาพ AVIF

Android 12 เปิดตัวการรองรับรูปภาพที่ใช้รูปแบบไฟล์ภาพ AV1 (AVIF) AVIF เป็นรูปแบบคอนเทนเนอร์สำหรับรูปภาพและลำดับรูปภาพที่เข้ารหัสโดยใช้ AV1 AVIF ใช้ประโยชน์จากเนื้อหาที่เข้ารหัสภายในเฟรมจากการบีบอัดวิดีโอ ซึ่งจะช่วยปรับปรุงคุณภาพรูปภาพได้อย่างมากสำหรับไฟล์ขนาดเดียวกันเมื่อเทียบกับรูปแบบรูปภาพที่เก่ากว่า เช่น JPEG ดูข้อมูลเชิงลึกเกี่ยวกับข้อดีของรูปแบบนี้ได้ที่บล็อกโพสต์ของ Jake Archibald

การเบลอ ฟิลเตอร์สี และเอฟเฟกต์อื่นๆ ที่ง่ายขึ้น

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

นอกจากนี้ คุณยังใช้เอฟเฟกต์กับ RenderNode พื้นฐานสำหรับ View ได้โดยเรียกใช้ View.setRenderEffect(RenderEffect)

วิธีใช้ RenderEffect

view.setRenderEffect(RenderEffect.createBlurEffect(radiusX, radiusY, SHADER_TILE_MODE))

การถอดรหัสภาพเคลื่อนไหวแบบเนทีฟ

ใน Android 12, API ImageDecoder ของ NDK ได้รับการขยายเพื่อถอดรหัสเฟรมและข้อมูลเวลาทั้งหมดจากรูปภาพที่ใช้รูปแบบไฟล์ GIF แบบเคลื่อนไหวและ WebP แบบเคลื่อนไหว เมื่อเปิดตัวใน Android 11, API นี้จะถอดรหัสเฉพาะรูปภาพแรกจากภาพเคลื่อนไหวในรูปแบบเหล่านี้

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

ดูรายละเอียดเพิ่มเติมเกี่ยวกับ API ได้ที่เอกสารอ้างอิง API และตัวอย่างใน GitHub

การเชื่อมต่อ

การเปิดแอปที่ใช้ร่วมกันไว้ตลอดเวลา

Android 12 เปิดตัว API ที่ทำสิ่งต่อไปนี้เพื่อรองรับความจำเป็นของแอปที่ใช้ร่วมกันที่ต้องทำงานต่อไปเพื่อจัดการอุปกรณ์

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

หากต้องการใช้ API อุปกรณ์ของคุณต้องเชื่อมต่อโดยใช้เครื่องมือจัดการอุปกรณ์ที่ใช้ร่วมกัน ดูข้อมูลเพิ่มเติมได้ที่ CompanionDeviceManager.startObservingDevicePresence() และ CompanionDeviceService.onDeviceAppeared()

โปรไฟล์ Companion Device Manager

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

แอปพาร์ทเนอร์ใน Android 12 (ระดับ API 31) ขึ้นไปสามารถใช้โปรไฟล์อุปกรณ์ที่ใช้ร่วมกันเมื่อเชื่อมต่อกับนาฬิกา การใช้โปรไฟล์จะลดความซับซ้อนของกระบวนการลงทะเบียนด้วยการรวมการให้สิทธิ์ชุดสิทธิ์เฉพาะประเภทอุปกรณ์ไว้ในขั้นตอนเดียว

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

ดูข้อมูลเพิ่มเติมได้ที่ AssociationRequest.Builder.setDeviceProfile()

การปรับปรุงการประมาณแบนด์วิดท์

ใน Android 12 ความสามารถในการประมาณแบนด์วิดท์ที่ได้จาก getLinkDownstreamBandwidthKbps() และ getLinkUpstreamBandwidthKbps() ได้รับการปรับปรุงทั้งสำหรับการเชื่อมต่อ Wi-Fi และการเชื่อมต่อเครือข่ายมือถือ ค่าที่แสดงผลในตอนนี้แสดงถึงอัตราความเร็วผ่านเฉลี่ยถ่วงน้ำหนักตลอดเวลาของผู้ใช้ต่อผู้ให้บริการหรือ SSID ของ Wi-Fi, ประเภทเครือข่าย และระดับสัญญาณในแอปพลิเคชันทั้งหมดบนอุปกรณ์ วิธีนี้จะแสดงค่าประมาณของอัตราความเร็วที่คาดไว้ซึ่งแม่นยำและสมจริงยิ่งขึ้น แสดงค่าประมาณเมื่อเริ่มแอปพลิเคชันแบบ Cold Start และใช้รอบน้อยกว่าเมื่อเทียบกับการใช้วิธีการประมาณอัตราความเร็วอื่นๆ

การปรับปรุง Wi-Fi Aware (NAN)

Android 12 เพิ่มการปรับปรุงบางอย่างให้กับ Wi-Fi Aware ดังนี้

  • ในอุปกรณ์ที่ใช้ Android 12 (API ระดับ 31) ขึ้นไป คุณสามารถใช้ Callback onServiceLost() เพื่อรับการแจ้งเตือนเมื่อแอปสูญเสียบริการที่ค้นพบเนื่องจากบริการหยุดทำงานหรืออยู่นอกระยะ
  • วิธีตั้งค่าเส้นทางข้อมูลหลายเส้นทาง (NAN Data Path) กำลังจะเปลี่ยนไปเพื่อให้มีประสิทธิภาพมากขึ้น เวอร์ชันก่อนหน้าใช้การรับส่งข้อความ L2 เพื่อแลกเปลี่ยนข้อมูลเพียร์ของผู้เริ่มต้น ซึ่งทำให้เกิดเวลาในการตอบสนอง ในอุปกรณ์ที่ใช้ Android 12 ขึ้นไป คุณสามารถกำหนดค่าผู้ตอบ (เซิร์ฟเวอร์) ให้ยอมรับเพียร์ใดก็ได้ กล่าวคือ ไม่จำเป็นต้องทราบข้อมูลผู้เริ่มต้นล่วงหน้า ซึ่งจะช่วยเร่งการเปิดใช้งานเส้นทางข้อมูลและเปิดใช้ลิงก์แบบจุดต่อจุดหลายรายการด้วยคำขอเครือข่ายเพียงรายการเดียว
  • เพื่อป้องกันไม่ให้เฟรมเวิร์กปฏิเสธคำขอการค้นพบหรือการเชื่อมต่อเนื่องจากทรัพยากรหมด ในอุปกรณ์ที่ใช้ Android 12 ขึ้นไป คุณสามารถเรียกใช้ WifiAwareManager.getAvailableAwareResources() ได้ ค่าที่แสดงผลของเมธอดนี้ช่วยให้คุณทราบจำนวนเส้นทางข้อมูลที่ใช้ได้ จำนวนเซสชันการเผยแพร่ที่ใช้ได้ และจำนวนเซสชันการสมัครใช้บริการที่ใช้ได้

การเชื่อมต่อแบบเพียร์ทูเพียร์ + การเชื่อมต่ออินเทอร์เน็ตพร้อมกัน

เมื่ออุปกรณ์ที่กำหนดเป้าหมายเป็น Android 12 (API ระดับ 31) ขึ้นไปทำงานบนอุปกรณ์ที่มีการรองรับฮาร์ดแวร์ การใช้การเชื่อมต่อแบบเพียร์ทูเพียร์จะไม่ยกเลิกการเชื่อมต่อ Wi-Fi ที่มีอยู่เมื่อสร้างการเชื่อมต่อกับอุปกรณ์เพียร์ หากต้องการตรวจสอบการรองรับฟีเจอร์นี้ ให้ใช้ WifiManager.isMultiStaConcurrencySupported()

เปิดใช้การชำระเงินผ่าน NFC ขณะปิดหน้าจอ

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

พื้นที่เก็บข้อมูล

Android 12 เปิดตัวความสามารถในการจัดการพื้นที่เก็บข้อมูลต่อไปนี้

ฟังก์ชันหลัก

การอัปเดตแอปอัตโนมัติ

Android 12 เปิดตัวเมธอด setRequireUserAction() สำหรับแอปที่ใช้ PackageInstaller API วิธีนี้ช่วยให้แอปโปรแกรมติดตั้งทำการอัปเดตแอปได้โดยไม่ต้องให้ผู้ใช้ยืนยันการดำเนินการ

ข้อมูลชิปเซ็ตของอุปกรณ์

Android 12 เพิ่มค่าคงที่ 2 ค่าลงใน android.os.Build ซึ่งจะแสดงข้อมูลผู้ให้บริการและรุ่นของชิปเซ็ต SoC ผ่าน SDK คุณสามารถเรียกดูข้อมูลนี้ได้โดยเรียกใช้ Build.SOC_MANUFACTURER และ Build.SOC_MODEL ตามลำดับ

การอัปเดต Java API หลัก

เราได้เพิ่มไลบรารีหลักต่อไปนี้ใน Android 12 ตามคำขอและการทำงานร่วมกันกับนักพัฒนาแอป

ชั้นเรียน API
java.lang.Deprecated
java.lang.Byte
java.lang.Short
java.lang.Math
java.lang.StrictMath
java.util.Set copyOf()
java.util.Map copyOf()
java.util.List copyOf()
java.time.Duration
java.time.LocalTime