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

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

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

ประสบการณ์การใช้งานแบบใหม่

การควบคุมอุปกรณ์

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

การควบคุมสื่อ

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

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

โปรดดูข้อมูลเพิ่มเติมที่หัวข้อการควบคุมสื่อ

หน้าจอ

รองรับการแสดงโฆษณาสื่อกลางตามลำดับขั้นได้ดียิ่งขึ้น

Android 11 มี API หลายรายการที่รองรับจอแสดงผล Waterfall ซึ่งเป็นจอแสดงผลที่พันรอบขอบของอุปกรณ์ ระบบจะถือว่าจอแสดงผลเหล่านี้เป็นตัวแปรของจอแสดงผลที่มีส่วนเว้าบนจอ ตอนนี้เมธอดที่มีอยู่ DisplayCutout.getSafeInset…() จะแสดงผลส่วนที่เป็นขอบปลอดภัยเพื่อหลีกเลี่ยงพื้นที่โฆษณา Waterfall และส่วนที่ถูกตัดออก หากต้องการแสดงผลเนื้อหาแอปในพื้นที่ Waterfall ให้ทําดังนี้

  • โทรไปที่ DisplayCutout.getWaterfallInsets() เพื่อดูขนาดที่แน่นอนของส่วนแทรก Waterfall

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

เซ็นเซอร์มุมของบานพับและอุปกรณ์แบบพับได้

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

ดูอุปกรณ์แบบพับได้

การสนทนา

การปรับปรุงการสนทนา

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

ดูข้อมูลเพิ่มเติมเกี่ยวกับการสนทนาและวิธีที่แอปของคุณรองรับการสนทนาได้ที่หัวข้อผู้คนและการสนทนา

แชทบับเบิล

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

หากแอปกำหนดเป้าหมายเป็น Android 11 (API ระดับ 30) ขึ้นไป ระบบจะไม่แสดงการแจ้งเตือนของแอปเป็นป๊อปอัป เว้นแต่แอปจะเป็นไปตามข้อกำหนดการสนทนาใหม่ กล่าวโดยละเอียดคือ การแจ้งเตือนต้องเชื่อมโยงกับทางลัด

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

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

ตัวบ่งชี้ภาพ 5G

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

ความเป็นส่วนตัว

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

ความปลอดภัย

ข้อมูลอัปเดตเกี่ยวกับการตรวจสอบสิทธิ์ด้วยข้อมูลไบโอเมตริก

Android 11 มีการปรับปรุงการรับรองข้อมูลไบโอเมตริกหลายอย่างเพื่อช่วยให้คุณควบคุมระดับการรักษาความปลอดภัยให้กับข้อมูลของแอปได้ การเปลี่ยนแปลงเหล่านี้จะปรากฏในไลบรารีไบโอเมตริกของ Jetpack ด้วย

ประเภทการตรวจสอบสิทธิ์

Android 11 เปิดตัวอินเทอร์เฟซ BiometricManager.Authenticators ซึ่งคุณใช้ประกาศประเภทการตรวจสอบสิทธิ์ที่แอปรองรับได้

ระบุประเภทการตรวจสอบสิทธิ์ที่ใช้

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

การรองรับเพิ่มเติมสำหรับคีย์การตรวจสอบสิทธิ์ต่อการใช้งาน

Android 11 รองรับการตรวจสอบสิทธิ์โดยใช้คีย์การตรวจสอบสิทธิ์ต่อการใช้งานมากขึ้น

วิธีการที่เลิกใช้งาน

Android 11 เลิกใช้งานเมธอดต่อไปนี้

  • เมธอด setDeviceCredentialAllowed()
  • เมธอด setUserAuthenticationValidityDurationSeconds()
  • canAuthenticate() เวอร์ชันที่โอเวอร์โหลดซึ่งไม่ใช้อาร์กิวเมนต์

การแชร์ชุดข้อมูลขนาดใหญ่อย่างปลอดภัย

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

Android 11 อนุญาตให้แคชชุดข้อมูลขนาดใหญ่เหล่านี้ไว้ในอุปกรณ์โดยใช้ Shared Data Blob เพื่อช่วยลดความซ้ำซ้อนของข้อมูลทั้งในเครือข่ายและบนดิสก์ ดูข้อมูลเพิ่มเติมเกี่ยวกับการแชร์ชุดข้อมูลได้ที่คู่มือโดยละเอียดเกี่ยวกับการแชร์ชุดข้อมูลขนาดใหญ่

ดำเนินการเข้ารหัสตามไฟล์หลังจากการรีสตาร์ท OTA โดยไม่ใช้ข้อมูลเข้าสู่ระบบของผู้ใช้

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

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

การแก้ไขข้อบกพร่องผ่าน Wi-Fi

Android 11 รองรับการติดตั้งใช้งานและการแก้ไขข้อบกพร่องของแอปแบบไร้สายจากเวิร์กสเตชันผ่าน Android Debug Bridge (adb) ตัวอย่างเช่น คุณสามารถทำให้แอปที่แก้ไขข้อบกพร่องได้ใช้งานได้ในอุปกรณ์ระยะไกลหลายเครื่องโดยไม่ต้องเชื่อมต่ออุปกรณ์ผ่าน USB และไม่ต้องจัดการกับปัญหาการเชื่อมต่อ USB ที่พบได้ทั่วไป เช่น การติดตั้งไดรเวอร์ โปรดดูข้อมูลเพิ่มเติมที่หัวข้อเรียกใช้แอปในอุปกรณ์ฮาร์ดแวร์

การติดตั้ง APK แบบเพิ่มทีละรายการของ ADB

การติดตั้ง APK ขนาดใหญ่ (2 GB ขึ้นไป) ในอุปกรณ์อาจใช้เวลานาน แม้ว่าจะมีการเปลี่ยนแปลงแอปเพียงเล็กน้อยก็ตาม การติดตั้ง APK เพิ่มเติมของ ADB (Android Debug Bridge) จะเร่งกระบวนการนี้โดยการติดตั้ง APK เพียงพอที่จะเปิดแอปขณะสตรีมข้อมูลที่เหลือในเบื้องหลัง adb install จะใช้ฟีเจอร์นี้โดยอัตโนมัติหากอุปกรณ์รองรับและคุณติดตั้ง SDK Platform-Tools เวอร์ชันล่าสุดแล้ว หากไม่รองรับ ระบบจะใช้วิธีการติดตั้งเริ่มต้นโดยอัตโนมัติ

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

adb install --incremental

ก่อนเรียกใช้การติดตั้ง APK แบบเพิ่มทีละรายการของ ADB คุณต้องลงชื่อ APK และสร้างไฟล์ APK Signature Scheme v4 ไฟล์ลายเซ็น v4 ต้องอยู่ข้าง APK เพื่อให้ฟีเจอร์นี้ทำงานได้

การตรวจหาข้อผิดพลาดโดยใช้ตัวจัดสรรหน่วยความจำของระบบ

GWP-ASan เป็นฟีเจอร์การจัดสรรหน่วยความจำของระบบซึ่งช่วยค้นหาข้อบกพร่องการใช้งานหลังช่วงใช้ฟรี (Use After Free) และบัฟเฟอร์ล้นฮีป (Heap Buffer Overflow) คุณสามารถเปิดใช้ฟีเจอร์นี้ทั่วโลกหรือสําหรับกระบวนการย่อยที่เฉพาะเจาะจงของแอป ดูข้อมูลเพิ่มเติมได้ที่คู่มือ GWP-Asan

Neural Networks API 1.3

Android 11 ขยายการให้บริการและปรับปรุง Neural Networks (NN) API (NNAPI)

การดำเนินการใหม่

NNAPI 1.3 เปิดตัวประเภทออปเรอเรนต์ใหม่ TENSOR_QUANT8_ASYMM_SIGNED เพื่อรองรับรูปแบบการแปลงค่าใหม่ของ TensorFlow Lite

นอกจากนี้ NNAPI 1.3 ยังเปิดตัวการดำเนินการใหม่ต่อไปนี้

  • QUANTIZED_LSTM
  • IF
  • WHILE
  • ELU
  • HARD_SWISH
  • FILL
  • RANK

การควบคุม ML ใหม่

NNAPI 1.3 เปิดตัวการควบคุมใหม่เพื่อช่วยให้แมชชีนเลิร์นนิงทํางานได้อย่างราบรื่น ดังนี้

NDK Thermal API

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

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

ข้อความและอินพุต

การเปลี่ยน IME ที่ดีขึ้น

Android 11 เปิดตัว API ใหม่เพื่อปรับปรุงการเปลี่ยนผ่านสำหรับเครื่องมือแก้ไขวิธีการป้อนข้อมูล (IME) เช่น แป้นพิมพ์บนหน้าจอ API เหล่านี้ช่วยให้คุณปรับเนื้อหาของแอปให้สอดคล้องกับลักษณะที่ปรากฏและหายไปของ IME รวมถึงองค์ประกอบอื่นๆ เช่น แถบสถานะและแถบนําทางได้ง่ายขึ้น

หากต้องการแสดง IME ขณะที่ EditText ใดก็ตามมีโฟกัส ให้เรียกใช้ view.getInsetsController().show(Type.ime()) (คุณสามารถเรียกใช้เมธอดนี้ในมุมมองใดก็ได้ในลําดับชั้นเดียวกับ EditText ที่โฟกัสอยู่ โดยไม่จำเป็นต้องเรียกใช้กับ EditText โดยเฉพาะ) หากต้องการซ่อน IME ให้กด view.getInsetsController().hide(Type.ime()) คุณสามารถตรวจสอบว่าขณะนี้ IME แสดงอยู่หรือไม่โดยเรียกใช้ view.getRootWindowInsets().isVisible(Type.ime())

หากต้องการซิงค์มุมมองของแอปกับการแสดงและซ่อนตัวของ IME ให้ตั้งค่า Listener ในมุมมองโดยระบุ WindowInsetsAnimation.Callback ให้กับ View.setWindowInsetsAnimationCallback() (คุณสามารถตั้งค่าตัวรับฟังนี้ในมุมมองใดก็ได้ ไม่จำเป็นต้องเป็น EditText) IME จะเรียกใช้เมธอด onPrepare() ของตัวรับฟัง จากนั้นจะเรียกใช้ onStart() ในช่วงเริ่มต้นของการเปลี่ยน จากนั้นจะเรียกใช้ onProgress() ในแต่ละขั้นตอนของการเปลี่ยน เมื่อการเปลี่ยนเสร็จแล้ว IME จะเรียกใช้ onEnd() คุณสามารถดูความคืบหน้าของการเปลี่ยนได้ทุกเมื่อโดยเรียกใช้ WindowInsetsAnimation.getFraction()

ดูตัวอย่างวิธีใช้ API เหล่านี้ได้ที่ตัวอย่างโค้ด WindowInsetsAnimation ใหม่

การควบคุมภาพเคลื่อนไหวของ IME

นอกจากนี้ คุณยังควบคุมภาพเคลื่อนไหวของ IME หรือภาพเคลื่อนไหวของแถบระบบอื่นๆ เช่น แถบนําทางได้ด้วย โดยก่อนอื่นให้เรียกใช้ setOnApplyWindowInsetsListener() เพื่อตั้งค่า Listener ใหม่สําหรับการเปลี่ยนแปลงส่วนแทรกของหน้าต่าง

Kotlin

rootView.setOnApplyWindowInsetsListener { rootView, windowInsets ->
    val barsIme = windowInsets.getInsets(Type.systemBars() or Type.ime())
    rootView.setPadding(barsIme.left, barsIme.top, barsIme.right, 
                          barsIme.bottom)

      // We return the new WindowInsets.CONSUMED to stop the insets being
      // dispatched any further into the view hierarchy. This replaces the
      // deprecated WindowInsets.consumeSystemWindowInsets() and related
      // functions.
    WindowInsets.CONSUMED
}

Java

mRoot.setOnApplyWindowInsetsListener(new View.OnApplyWindowInsetsListener() {
   @Override
   public WindowInsets onApplyWindowInsets(View v, WindowInsets insets) {

       Insets barsIME = insets.getInsets(Type.systemBars() | Type.ime());
       mRootView.setPadding(barsIme.left, barsIme.top, barsIme.right,
                             barsIme.bottom);

      // We return the new WindowInsets.CONSUMED to stop the insets being
      // dispatched any further into the view hierarchy. This replaces the
      // deprecated WindowInsets.consumeSystemWindowInsets() and related
      // functions.
       return WindowInsets.CONSUMED;
   }
});

หากต้องการย้าย IME หรือแถบระบบอื่นๆ ให้เรียกใช้เมธอด controlWindowInsetsAnimation() ของเครื่องมือควบคุม ดังนี้

Kotlin

view.windowInsetsController.controlWindowInsetsAnimation(
       Type.ime(),
       1000,
       LinearInterpolator(),
       cancellationSignal,
       object : WindowInsetsAnimationControlListener() {
           fun onReady(controller: WindowInsetsAnimationController,
                         types: Int) {
               // update IME inset
             controller.setInsetsAndAlpha(Insets.of(0, 0, 0, inset),
                           1f /* alpha */, 0.1 /* fraction progress */)
           }
       }
);

Java

mRoot.getWindowInsetsController().controlWindowInsetsAnimation(
       Type.ime(), 1000, new LinearInterpolator(), cancellationSignal,
       new WindowInsetsAnimationControlListener() {
           @Override
           public void onReady(
                   @NonNull WindowInsetsAnimationController controller,
                   int types
                   ) {
                   // update IME inset
                   controller.setInsetsAndAlpha(Insets.of(0, 0, 0, inset),
                           1f /* alpha */, 0.1 /* fraction progress */);
           }

           @Override
           public void onCancelled() {}
       });

การอัปเดตไลบรารี ICU

Android 11 จะอัปเดตแพ็กเกจ android.icu ให้ใช้ ICU library เวอร์ชัน 66 เทียบกับเวอร์ชัน 63 ใน Android 10 ไลบรารีเวอร์ชันใหม่มีข้อมูลภาษา CLDR ที่อัปเดตแล้ว รวมถึงการปรับปรุงการรองรับการทำให้เนื้อหาเป็นสากลใน Android อีกหลายรายการ

การเปลี่ยนแปลงที่สําคัญในไลบรารีเวอร์ชันใหม่มีดังนี้

  • ตอนนี้ API การจัดรูปแบบหลายรายการรองรับประเภทออบเจ็กต์ผลลัพธ์ใหม่ซึ่งขยายจาก FormattedValue แล้ว
  • LocaleMatcher API ได้รับการปรับปรุงด้วยคลาสบิลเดอร์ การสนับสนุนประเภท java.util.Locale และคลาสผลลัพธ์ที่มีข้อมูลเพิ่มเติมเกี่ยวกับการจับคู่
  • ขณะนี้ระบบรองรับ Unicode 13 แล้ว

สื่อ

การจัดสรรบัฟเฟอร์ MediaCodec

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

ชั้นเรียนใหม่
วิธีใหม่

นอกจากนี้ ลักษณะการทํางานของ 2 วิธีใน MediaCodec.Callback() ยังมีการเปลี่ยนแปลงด้วย ดังนี้

onInputBufferAvailable()
หากกําหนดค่าให้ใช้ Block
API แอปควรใช้ MediaCodec.getQueueRequest กับดัชนีแทนการเรียก MediaCodec.getInputBuffer() และ MediaCodec.queueInputBuffer() กับดัชนี โดยแนบ LinearBlock/HardwareBuffer เข้ากับช่อง
onOutputBufferAvailable()
แอปอาจใช้ MediaCodec.getOutputFrame() กับดัชนีเพื่อรับออบเจ็กต์ OutputFrame ที่มีข้อมูลเพิ่มเติมและบัฟเฟอร์ LinearBlock/HardwareBuffer แทนการเรียกใช้ MediaCodec.getOutputBuffer() กับดัชนี

การถอดรหัสที่มีเวลาในการตอบสนองต่ำใน MediaCodec

Android 11 ปรับปรุง MediaCodec เพื่อรองรับการถอดรหัสที่มีเวลาในการตอบสนองต่ำสำหรับเกมและแอปอื่นๆ แบบเรียลไทม์ คุณสามารถตรวจสอบว่าตัวแปลงรหัสรองรับการถอดรหัสที่มีเวลาในการตอบสนองต่ำหรือไม่โดยส่ง FEATURE_LowLatency ไปยัง MediaCodecInfo.CodecCapabilities.isFeatureSupported()

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

ฟังก์ชัน AAudio ใหม่ AAudioStream_release()

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

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

MediaParser API

MediaParser เป็น API ระดับล่างแบบใหม่สำหรับการดึงข้อมูลสื่อ ซึ่งมีความยืดหยุ่นมากกว่า MediaExtractor และมีการควบคุมฟังก์ชันการดึงข้อมูลสื่อเพิ่มเติม

การบันทึกเสียงจากอุปกรณ์ USB

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

แอปควรขอสิทธิ์ RECORD_AUDIO เพื่อหลีกเลี่ยงลักษณะการทำงานนี้

การเข้าถึงไมโครโฟนพร้อมกัน

Android 11 เพิ่มเมธอดใหม่ลงใน AudioRecord, MediaRecorder และ AAudioStream API วิธีการเหล่านี้จะเปิดและปิดใช้ความสามารถในการบันทึกพร้อมกันไม่ว่าจะเลือก Use Case ใดก็ตาม โปรดดูการแชร์อินพุตเสียง

ตัวสลับเอาต์พุต

Android 11 ใช้ลักษณะการทำงานแบบใหม่สำหรับแอปที่ใช้ Cast และ MediaRouter API

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

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

การปรับปรุง Wi-Fi Passpoint

ดูข้อมูลเกี่ยวกับความสามารถของ Passpoint ที่เพิ่มเข้ามาใน Android 11 ได้ที่ Passpoint

ขยายการให้บริการ Wi-Fi Suggestion API

Android 11 ขยายความสามารถของ Wi-Fi Suggestion API เพื่อเพิ่มความสามารถในการจัดการเครือข่ายของแอป ซึ่งรวมถึงความสามารถต่อไปนี้

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

การอัปเดต CallScreeningService

ตั้งแต่ Android 11 เป็นต้นไป CallScreeningService จะขอข้อมูลเกี่ยวกับสถานะการยืนยัน STIR/SHAKEN (verstat) สำหรับสายเรียกเข้าได้ ข้อมูลนี้จะแสดงเป็นส่วนหนึ่งของรายละเอียดการโทรสําหรับสายเรียกเข้า

หาก CallScreeningService มีสิทธิ์ READ_CONTACTS แอปจะได้รับการแจ้งเตือนเมื่อมีสายเรียกเข้าหรือโทรออกไปยังหมายเลขในรายชื่อติดต่อของผู้ใช้

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

การอัปเดต Open Mobile API

ดูข้อมูลเกี่ยวกับการรองรับ OMAPI ใน Android 11 ขึ้นไปได้ที่การรองรับโปรแกรมอ่าน Open Mobile API

VPN ที่มีประสิทธิภาพ

แอปที่กำหนดเป้าหมายเป็น API ระดับ 30 ขึ้นไปหรือที่ทำงานในอุปกรณ์ที่เปิดตัวใน API ระดับ 29 ขึ้นไปสามารถใช้ IKEv2/IPsec กับ VPN ได้ทั้ง VPN ที่ผู้ใช้กำหนดค่าและ VPN ที่อิงตามแอป

VPN จะทำงานบนระบบปฏิบัติการโดยตรง ซึ่งทำให้โค้ดที่จำเป็นต่อการสร้างการเชื่อมต่อ IKEv2/IPsec VPN ในแอปมีความซับซ้อนน้อยลง

การควบคุมการเข้าถึงเครือข่ายต่อกระบวนการ

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

อนุญาตให้มีการกำหนดค่า Passpoint ที่ติดตั้งไว้หลายรายการที่มี FQDN เดียวกัน

ตั้งแต่ Android 11 เป็นต้นไป คุณสามารถใช้ PasspointConfiguration.getUniqueId() เพื่อรับตัวระบุที่ไม่ซ้ำกันสำหรับออบเจ็กต์ PasspointConfiguration ซึ่งจะช่วยให้ผู้ใช้แอปติดตั้งโปรไฟล์หลายรายการที่มีชื่อโดเมนที่สมบูรณ์ในตัวเอง (FQDN) เดียวกันได้

ฟังก์ชันการทำงานนี้มีประโยชน์เมื่อผู้ให้บริการติดตั้งใช้งานรหัสประเทศของอุปกรณ์เคลื่อนที่ (MCC) และรหัสเครือข่ายของอุปกรณ์เคลื่อนที่ (MNC) มากกว่า 1 ชุดในเครือข่าย แต่มี FQDN เพียงรายการเดียว ใน Android 11 ขึ้นไป คุณสามารถติดตั้งโปรไฟล์ได้มากกว่า 1 รายการที่มี FQDN เดียวกันซึ่งจะจับคู่กับเครือข่ายเป็นผู้ให้บริการ Home เมื่อผู้ใช้ติดตั้ง SIM ที่มี MCC หรือ MNC

การรองรับเสาอากาศ GNSS

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

ดูข้อมูลเพิ่มเติมในคู่มือข้อมูลการปรับเทียบเสาอากาศ

กราฟิก

โปรแกรมถอดรหัสรูปภาพ NDK

API ImageDecoder ของ NDK มี API มาตรฐานสําหรับแอป C/C++ ของ Android เพื่อถอดรหัสรูปภาพโดยตรง นักพัฒนาแอปไม่จําเป็นต้องใช้ API ของเฟรมเวิร์ก (ผ่าน JNI) หรือรวมไลบรารีการถอดรหัสรูปภาพของบุคคลที่สามอีกต่อไป ดูข้อมูลเพิ่มเติมได้ที่คู่มือนักพัฒนาซอฟต์แวร์โปรแกรมถอดรหัสรูปภาพ

Frame rate API

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

การขอและตรวจสอบการสนับสนุนเวลาในการตอบสนองต่ำ

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

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

หากต้องการเปิดหรือปิดการประมวลผลขั้นสุดท้ายแบบน้อยที่สุด ให้เรียกใช้ Window.setPreferMinimalPostProcessing() หรือตั้งค่าแอตทริบิวต์ preferMinimalPostProcessing ของหน้าต่างเป็น true จอแสดงผลบางรุ่นไม่รองรับการประมวลผลภาพหลังการประมวลผลขั้นต่ำ หากต้องการดูว่าจอแสดงผลหนึ่งๆ รองรับหรือไม่ ให้เรียกใช้เมธอดใหม่ Display.isMinimalPostProcessingSupported()

การแทรกเลเยอร์การแก้ไขข้อบกพร่องกราฟิกประสิทธิภาพสูง

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

<application ... >
    <meta-data android:name="com.android.graphics.injectLayers.enable"
                  android:value="true" />
</application>

รูปภาพและกล้อง

ปิดเสียงและการสั่นของการแจ้งเตือนระหว่างการจับภาพ

ตั้งแต่ Android 11 เป็นต้นไป เมื่อใช้กล้องอยู่ แอปจะปิดเสียงได้เฉพาะการสั่น ปิดทั้งเสียงและการสั่น หรือปิดทั้งเสียงและการสั่นไม่ได้เลยโดยใช้ setCameraAudioRestriction()

การรองรับกล้องที่ขยายการให้บริการในโปรแกรมจำลอง Android

ดูข้อมูลเกี่ยวกับการรองรับกล้องที่เพิ่มขึ้นในโปรแกรมจำลองตั้งแต่ Android 11 ได้ที่การรองรับกล้อง

รองรับการใช้งานกล้องมากกว่า 1 ตัวพร้อมกัน

Android 11 เพิ่ม API เพื่อสอบถามการรองรับการใช้กล้องมากกว่า 1 ตัวพร้อมกัน ซึ่งรวมถึงทั้งกล้องหน้าและกล้องหลัง

หากต้องการตรวจสอบการรองรับในอุปกรณ์ที่แอปทำงานอยู่ ให้ใช้วิธีการต่อไปนี้

  • getConcurrentCameraIds() แสดงผล Set ชุดค่าผสมของรหัสกล้องที่สตรีมพร้อมกันได้ โดยมีชุดค่าผสมสตรีมที่รับประกันเมื่อกำหนดค่าโดยกระบวนการแอปพลิเคชันเดียวกัน
  • isConcurrentSessionConfigurationSupported() สอบถามว่าอุปกรณ์กล้องรองรับการกำหนดค่าเซสชันที่เกี่ยวข้องพร้อมกันได้หรือไม่

รองรับรูปภาพ HEIF ที่มีหลายเฟรมได้ดียิ่งขึ้น

ตั้งแต่ Android 11 เป็นต้นไป หากคุณเรียกใช้ ImageDecoder.decodeDrawable() และส่งรูปภาพ HEIF ที่มีลำดับเฟรม (เช่น ภาพเคลื่อนไหวหรือภาพต่อเนื่อง) วิธีการจะแสดงผล AnimatedImageDrawable ที่มีลำดับรูปภาพทั้งหมด ใน Android เวอร์ชันเก่า วิธีการนี้จะแสดงผล BitmapDrawable เพียงเฟรมเดียว

หากกราฟิก HEIF มีเฟรมหลายเฟรมที่ไม่ได้อยู่ในลําดับ คุณจะเรียกข้อมูลเฟรมแต่ละเฟรมได้โดยเรียกใช้ MediaMetadataRetriever.getImageAtIndex()

การช่วยเหลือพิเศษ

ข้อมูลอัปเดตสำหรับนักพัฒนาบริการการช่วยเหลือพิเศษ

หากสร้างบริการการช่วยเหลือพิเศษที่กำหนดเอง คุณจะใช้ฟีเจอร์ต่อไปนี้ใน Android 11 ได้

  • ตอนนี้คำอธิบายบริการการช่วยเหลือพิเศษที่แสดงต่อผู้ใช้อนุญาตให้ใช้ HTML และรูปภาพได้นอกเหนือจากข้อความธรรมดา ความยืดหยุ่นนี้ช่วยให้อธิบายแก่ผู้ใช้ปลายทางได้ง่ายขึ้นว่าบริการของคุณทํางานอย่างไรและช่วยแก้ปัญหาได้อย่างไร
  • หากต้องการใช้คำอธิบายสถานะขององค์ประกอบ UI ที่สื่อความหมายมากกว่า contentDescription ให้เรียกใช้เมธอด getStateDescription()
  • หากต้องการให้ระบบละเว้นเหตุการณ์การสัมผัสจากเครื่องมือสำรวจการสัมผัส ให้เรียกใช้ setTouchExplorationPassthroughRegion() ในทำนองเดียวกัน หากต้องการให้ระบบข้ามการตรวจจับท่าทางสัมผัส ให้เรียกใช้ setGestureDetectionPassthroughRegion()
  • คุณสามารถขอการดำเนินการ IME เช่น "enter" และ "next" รวมถึงภาพหน้าจอของหน้าต่างที่ไม่ได้เปิดใช้ Flag FLAG_SECURE

ฟีเจอร์เพิ่มเติม

เหตุผลที่ออกจากกระบวนการของแอป

Android 11 เปิดตัววิธี ActivityManager.getHistoricalProcessExitReasons() ซึ่งจะรายงานสาเหตุของการสิ้นสุดกระบวนการล่าสุด แอปสามารถใช้วิธีนี้เพื่อรวบรวมข้อมูลการวินิจฉัยข้อขัดข้อง เช่น ทราบว่าการสิ้นสุดกระบวนการเกิดจาก ANR, ปัญหาหน่วยความจำ หรือสาเหตุอื่นๆ หรือไม่ นอกจากนี้ คุณยังใช้เมธอด setProcessStateSummary() ใหม่เพื่อจัดเก็บข้อมูลสถานะที่กําหนดเองสําหรับการวิเคราะห์ในภายหลังได้ด้วย

เมธอด getHistoricalProcessExitReasons() จะแสดงผลอินสแตนซ์ของคลาส ApplicationExitInfo ซึ่งมีข้อมูลเกี่ยวกับการหยุดทำงานของกระบวนการแอป การเรียกใช้ getReason() ในอินสแตนซ์ของคลาสนี้จะช่วยให้คุณระบุสาเหตุที่กระบวนการของแอปถูกหยุด ตัวอย่างเช่น ค่าที่ส่งคืนเป็น REASON_CRASH บ่งชี้ว่ามีข้อยกเว้นที่ไม่ได้รับการจัดการเกิดขึ้นในแอป หากแอปต้องการตรวจสอบความเฉพาะเจาะจงของเหตุการณ์ "ออก" แอปจะเก็บรักษาตัวระบุเฉพาะแอป เช่น ค่าแฮชที่อิงตามการประทับเวลาจากเมธอด getTimestamp() ได้

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

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

ตัวโหลดทรัพยากร

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

ออบเจ็กต์ ResourcesLoader คือคอนเทนเนอร์ที่จัดหาออบเจ็กต์ ResourcesProvider ให้กับอินสแตนซ์ Resources ของแอป ออบเจ็กต์ ResourcesProvider ก็มีวิธีการโหลดข้อมูลทรัพยากรจาก APK และตารางทรัพยากร

Use Case หลักอย่างหนึ่งของ API นี้คือการโหลดชิ้นงานที่กำหนดเอง คุณสามารถใช้ loadFromDirectory() เพื่อสร้าง ResourcesProvider ที่เปลี่ยนเส้นทางการแก้ไขทรัพยากรและชิ้นงานตามไฟล์ ซึ่งจะทำให้ระบบค้นหาไดเรกทอรีที่เฉพาะเจาะจงแทน APK ของแอปพลิเคชัน คุณสามารถเข้าถึงชิ้นงานเหล่านี้ผ่านเมธอดตระกูล open() จากคลาส AssetManager API ได้ เช่นเดียวกับชิ้นงานที่รวมอยู่ใน APK

APK Signature Scheme v4

Android 11 รองรับ APK Signature Scheme v4 รูปแบบนี้จะสร้างลายเซ็นประเภทใหม่ในไฟล์แยกต่างหาก (apk-name.apk.idsig) แต่โดยรวมแล้วจะคล้ายกับ v2 และ v3 โดยจะไม่มีการเปลี่ยนแปลง APK รูปแบบนี้รองรับการติดตั้ง APK แบบเพิ่มทีละรายการของ ADB ซึ่งจะเพิ่มความเร็วในการติดตั้ง APK

ตัวกรอง Intent แบบไดนามิก

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

Android 11 เปิดตัวกลุ่ม MIME ซึ่งเป็นองค์ประกอบใหม่ของไฟล์ Manifest ที่ช่วยให้แอปประกาศชุดประเภท MIME แบบไดนามิกในตัวกรอง Intent และแก้ไขแบบเป็นโปรแกรมขณะรันไทม์ได้ หากต้องการใช้กลุ่ม MIME ให้ใส่องค์ประกอบข้อมูลในไฟล์ Manifest ของแอปโดยใช้แอตทริบิวต์ android:mimeGroup ใหม่ ดังนี้

<intent-filter>
  <action android:name="android.intent.action.SEND"/>
  <category android:name="android.intent.category.DEFAULT"/>
  <data android:mimeGroup="myMimeGroup"/>
</intent-filter>

ค่าของแอตทริบิวต์ android:mimeGroup คือรหัสสตริงที่กำหนดเองซึ่งระบุกลุ่ม MIME ขณะรันไทม์ คุณสามารถเข้าถึงและอัปเดตเนื้อหาของกลุ่ม MIME ได้โดยส่งรหัสของกลุ่มไปยังเมธอดใหม่ต่อไปนี้ในคลาส PackageManager API

เมื่อคุณเพิ่มประเภท MIME ลงในกลุ่ม MIME โดยใช้โปรแกรม ประเภท MIME ดังกล่าวจะทํางานเหมือนกับประเภท MIME แบบคงที่ที่ประกาศอย่างชัดแจ้งในไฟล์ Manifest

การปรับปรุงการป้อนข้อความอัตโนมัติ

Android 11 มีการปรับปรุงบริการป้อนข้อความอัตโนมัติ

ตัวระบุคำแนะนำใน AssistStructure.ViewNode

บริการป้อนข้อความอัตโนมัติมักมีประโยชน์ในการคํานวณแฮชลายเซ็นสําหรับข้อมูลพร็อพเพอร์ตี้โดยอิงตามพร็อพเพอร์ตี้ของข้อมูลพร็อพเพอร์ตี้นั้น คำแนะนำในการแสดงผลเป็นพร็อพเพอร์ตี้ที่ควรรวมไว้เมื่อคำนวณแฮชลายเซ็น แต่สตริงคำแนะนำอาจเปลี่ยนแปลงตามภาษาของโทรศัพท์ ในการแก้ปัญหานี้ Android 11 ได้ขยายAssistStructure.ViewNodeด้วยเมธอด getHintIdEntry() ใหม่ ซึ่งจะแสดงตัวระบุทรัพยากรสำหรับข้อความบอกใบ้ของมุมมอง วิธีนี้ให้ค่าที่ไม่ขึ้นอยู่กับภาษาซึ่งคุณใช้คํานวณแฮชลายเซ็นได้

ชุดข้อมูลแสดงเหตุการณ์

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

การผสานรวม IME

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

การแชร์ข้อมูลกับบริการบันทึกเนื้อหา

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

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