ภาพรวมฟีเจอร์และ 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 ช่วยให้แอปพลิเคชันสามารถจัดทำดัชนีข้อมูลที่มีโครงสร้าง และค้นหาข้อมูลนั้นด้วยความสามารถในการค้นหาข้อความแบบเต็มในตัว นอกจากนี้ 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 Media ด้วย

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

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

เมื่ออุปกรณ์ที่กําหนดเป้าหมายเป็น 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