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

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

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

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

Material You

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

Material You

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

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

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

แทรกเนื้อหาอย่างละเอียด

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

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

API ภาพหน้าจอของแอป

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

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 ช่วยให้แอปพลิเคชันจัดทําดัชนี Structured Data และค้นหา Structured Data ดังกล่าวได้ด้วยความสามารถในการค้นหาข้อความแบบเต็มในตัว นอกจากนี้ 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 สำหรับสิทธิ์ระดับลายเซ็นจะอนุญาตให้คุณอ้างอิงถึงข้อมูลสรุปของใบรับรองการรับรองที่รู้จัก ณ เวลาประกาศ

แอปของคุณสามารถประกาศแอตทริบิวต์นี้และใช้ Flag 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() ซึ่งช่วยให้แอปเรียกข้อมูลป้ายกำกับปุ่ม ข้อความพรอมต์ หรือชื่อการตั้งค่าแอปที่แปลแล้วและผู้ใช้อ่านได้ ใช้ป้ายกำกับเหล่านี้เพื่อสร้างวิธีการที่แสดงต่อผู้ใช้อย่างละเอียดยิ่งขึ้นสำหรับการตรวจสอบสิทธิ์ด้วยข้อมูลไบโอเมตริกที่ใช้ เช่น "ใช้การปลดล็อกด้วยใบหน้า" หรือ "ใช้ลายนิ้วมือเพื่อดำเนินการต่อ"

การตรวจหาฟิชชิงในแอปการรับส่งข้อความ (Pixel เท่านั้น)

ผู้ใช้จะเห็นข้อความเช่นนี้เมื่อตรวจพบข้อความที่น่าสงสัย

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

  • คำขอที่น่าสงสัย เช่น ขอให้ส่งรหัส เงิน หรือสิ่งอื่นๆ ที่คล้ายกัน
  • URL ที่ไม่น่าเชื่อถือ
  • ไฟล์แนบที่เป็นอันตราย
  • ลิงก์ไปยังแอปที่เป็นอันตราย

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

นักพัฒนาแอปสามารถเลือกไม่ใช้ฟีเจอร์นี้ได้โดยเพิ่มแท็กข้อมูลเมตาใหม่ที่มีสตริง com.google.android.ALLOW_PHISHING_DETECTION ในไฟล์ Manifest ของแอป เช่น

<manifest>
    <application android:name="com.messagingapp">
        <meta-data android:name="com.google.android.ALLOW_PHISHING_DETECTION" android:value="false" />

    </application>
</manifest>

สื่อ

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

ตั้งแต่ 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

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

  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 ใหม่รองรับลักษณะการทํางานที่ไม่ซ้ำกันของเซ็นเซอร์เหล่านี้ และพิจารณาว่า API อาจรองรับการกําหนดค่าและชุดค่าผสมสตรีมที่แตกต่างกันเมื่อทํางานในโหมดความละเอียดเต็มหรือ "ความละเอียดสูงสุด" เทียบกับโหมด "ค่าเริ่มต้น"

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

ให้สิทธิ์เข้าถึงร่องรอยการลบออกโดยตรงแก่แอป

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

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

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

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

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

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

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

วิธีติดตั้งใช้งาน RenderEffect

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

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

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

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

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

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

การปลุกแอปที่ใช้ร่วมกันให้ทำงานอยู่เสมอ

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

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

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

โปรไฟล์ Companion Device Manager

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

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

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

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

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

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

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

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

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

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

เมื่ออุปกรณ์ที่กําหนดเป้าหมายเป็น Android 12 (API ระดับ 31) ขึ้นไปทํางานในอุปกรณ์ที่รองรับฮาร์ดแวร์ การใช้การเชื่อมต่อแบบ peer-to-peer จะไม่ยกเลิกการเชื่อมต่อ 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