Android 11 เปิดตัวฟีเจอร์และ API ใหม่ๆ ที่ยอดเยี่ยมสำหรับนักพัฒนาซอฟต์แวร์ ส่วนต่างๆ ด้านล่างจะช่วยให้คุณทราบข้อมูลเกี่ยวกับฟีเจอร์สําหรับแอปและเริ่มต้นใช้งาน API ที่เกี่ยวข้อง
หากต้องการดูรายการ API ใหม่ ที่มีการแก้ไข และที่นำออกโดยละเอียด โปรดอ่านรายงานความแตกต่างของ API ดูรายละเอียดเกี่ยวกับ API ใหม่ได้ที่เอกสารอ้างอิง Android API ซึ่งจะไฮไลต์ API ใหม่เพื่อให้มองเห็นได้ นอกจากนี้ หากต้องการเรียนรู้เกี่ยวกับส่วนที่การเปลี่ยนแปลงของแพลตฟอร์มอาจส่งผลกระทบต่อแอปของคุณ อย่าลืมดูการเปลี่ยนแปลงลักษณะการทำงานของ Android 11 สำหรับแอปที่กำหนดเป้าหมายเป็น Android R สำหรับแอปทั้งหมด รวมถึง การเปลี่ยนแปลงด้านความเป็นส่วนตัว
ประสบการณ์การใช้งานแบบใหม่
การควบคุมอุปกรณ์
Android 11 มี ControlsProviderService
API ใหม่ที่คุณสามารถใช้เพื่อแสดงการควบคุมสำหรับอุปกรณ์ภายนอกที่เชื่อมต่อ การควบคุมเหล่านี้จะปรากฏในส่วนการควบคุมอุปกรณ์ในเมนูพลังงานของ Android ดูข้อมูลเพิ่มเติมได้ที่ควบคุมอุปกรณ์ภายนอก
การควบคุมสื่อ
Android 11 อัปเดตวิธีแสดงตัวควบคุมสื่อ ตัวควบคุมสื่อจะปรากฏขึ้นใกล้กับการตั้งค่าด่วน เซสชันจากหลายแอปจะจัดเรียงเป็นภาพสไลด์ที่ปัดได้ ซึ่งรวมถึงสตรีมที่เล่นในเครื่องบนโทรศัพท์ สตรีมระยะไกล เช่น สตรีมที่ตรวจพบในอุปกรณ์ภายนอกหรือเซสชันแคสต์ และเซสชันก่อนหน้าที่เล่นต่อได้ตามลำดับที่เล่นล่าสุด
ผู้ใช้สามารถเริ่มเซสชันก่อนหน้าอีกครั้งจากภาพสไลด์ได้โดยไม่ต้องเริ่มแอป เมื่อเริ่มเล่น ผู้ใช้จะโต้ตอบกับตัวควบคุมสื่อได้ตามปกติ
โปรดดูข้อมูลเพิ่มเติมที่หัวข้อการควบคุมสื่อ
หน้าจอ
การรองรับการแสดง Waterfall ที่ดียิ่งขึ้น
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 คนขึ้นไป การสนทนาเหล่านี้จะได้รับการเน้นเป็นพิเศษ และผู้ใช้จะมีตัวเลือกใหม่ๆ หลายวิธีในการโต้ตอบกับเนื้อหา
ดูข้อมูลเพิ่มเติมเกี่ยวกับการสนทนาและวิธีที่แอปจะให้การสนับสนุนการสนทนาดังกล่าวได้ที่หัวข้อผู้คนและการสนทนา
แชทบับเบิล
บับเบิลพร้อมให้นักพัฒนาแอปใช้งานแล้วเพื่อช่วยแสดงการสนทนาในระบบ Bubbles เป็นฟีเจอร์ทดลองใน Android 10 ที่เปิดใช้ผ่านตัวเลือกสำหรับนักพัฒนาซอฟต์แวร์ และใน Android 11 จะไม่มีการดำเนินการดังกล่าวอีกต่อไป
หากแอปกำหนดเป้าหมายเป็น Android 11 (API ระดับ 30) ขึ้นไป การแจ้งเตือนของแอปจะไม่แสดงเป็นบับเบิล เว้นแต่แอปจะเป็นไปตามข้อกำหนดใหม่ของการสนทนา กล่าวโดยละเอียดคือ การแจ้งเตือนต้องเชื่อมโยงกับทางลัด
ก่อนที่จะมี Android 11 หากต้องการให้การแจ้งเตือนแสดงเป็นป๊อปอัป คุณจะต้องระบุอย่างชัดเจนว่ามีการตั้งค่าการแจ้งเตือนให้เปิดในโหมด UI เอกสารเสมอ ตั้งแต่ Android 11 เป็นต้นไป คุณไม่จำเป็นต้องตั้งค่าดังกล่าวอย่างชัดเจนอีกต่อไป หากการแจ้งเตือนเป็นแบบป๊อปอัป แพลตฟอร์มจะตั้งค่าการแจ้งเตือนให้เปิดในโหมด UI เอกสารโดยอัตโนมัติ
ประสิทธิภาพของลูกโป่งมีการปรับปรุงหลายประการ และผู้ใช้มีความยืดหยุ่นมากขึ้นในการเปิดหรือปิดใช้ลูกโป่งจากแต่ละแอป ส่วนนักพัฒนาแอปที่ใช้การสนับสนุนเวอร์ชันทดลองจะมีการเปลี่ยนแปลงบางอย่างกับ API ใน Android 11 ดังนี้
- เลิกใช้งานเครื่องมือสร้าง
BubbleMetadata.Builder()
ที่ไม่มีพารามิเตอร์แล้ว แต่ให้ใช้คอนสตรคเตอร์ใหม่ 2 รายการอย่างใดอย่างหนึ่งต่อไปนี้BubbleMetadata.Builder(PendingIntent, Icon)
หรือBubbleMetadata.Builder(String)
- สร้าง
BubbleMetadata
จากรหัสทางลัดโดยเรียกใช้BubbleMetadata.Builder(String)
สตริงที่ส่งควรตรงกับรหัสทางลัดที่ให้ไว้กับNotification.Builder
- สร้างไอคอนแบบฟองสบู่ด้วย
Icon.createWithContentUri()
หรือด้วยวิธีใหม่createWithAdaptiveBitmapContentUri()
ตัวบ่งชี้ภาพ 5G
ดูข้อมูลเกี่ยวกับการแสดงสัญญาณบอกสถานะ 5G ในอุปกรณ์ของผู้ใช้ได้ที่แจ้งให้ผู้ใช้ทราบเมื่อมีการใช้งาน 5G
ความเป็นส่วนตัว
Android 11 มีการเปลี่ยนแปลงและข้อจำกัดจำนวนมากเพื่อปรับปรุงความเป็นส่วนตัวของผู้ใช้ ดูข้อมูลเพิ่มเติมได้ที่หน้าความเป็นส่วนตัว
ความปลอดภัย
ข้อมูลอัปเดตเกี่ยวกับการตรวจสอบสิทธิ์ด้วยข้อมูลไบโอเมตริก
Android 11 มีการปรับปรุงการรับรองข้อมูลไบโอเมตริกหลายอย่างเพื่อช่วยให้คุณควบคุมระดับการรักษาความปลอดภัยให้กับข้อมูลของแอปได้ การเปลี่ยนแปลงเหล่านี้จะปรากฏในไลบรารีไบโอเมตริกของ Jetpack ด้วย
ประเภทการตรวจสอบสิทธิ์
Android 11 เปิดตัวอินเทอร์เฟซ BiometricManager.Authenticators
ซึ่งคุณใช้ประกาศประเภทการตรวจสอบสิทธิ์ที่แอปรองรับได้
ระบุว่าใช้การตรวจสอบสิทธิ์ประเภทใด
หลังจากผู้ใช้ตรวจสอบสิทธิ์แล้ว คุณสามารถตรวจสอบว่าผู้ใช้ตรวจสอบสิทธิ์โดยใช้ข้อมูลเข้าสู่ระบบของอุปกรณ์หรือข้อมูลเข้าสู่ระบบไบโอเมตริกโดยเรียกใช้ getAuthenticationType()
การรองรับเพิ่มเติมสำหรับคีย์การตรวจสอบสิทธิ์ต่อการใช้งาน
Android 11 รองรับการตรวจสอบสิทธิ์โดยใช้คีย์การตรวจสอบสิทธิ์ต่อการใช้งานมากขึ้น
วิธีการที่เลิกใช้งานแล้ว
Android 11 จะเลิกใช้งานวิธีการต่อไปนี้
- เมธอด
setDeviceCredentialAllowed()
- เมธอด
setUserAuthenticationValidityDurationSeconds()
canAuthenticate()
เวอร์ชันที่โอเวอร์โหลดซึ่งไม่ใช้อาร์กิวเมนต์
การแชร์ชุดข้อมูลขนาดใหญ่อย่างปลอดภัย
ในบางสถานการณ์ เช่น กรณีที่เกี่ยวข้องกับแมชชีนเลิร์นนิงหรือการเล่นสื่อ แอปของคุณอาจต้องการใช้ชุดข้อมูลขนาดใหญ่เดียวกันกับแอปอื่น ใน Android เวอร์ชันก่อนหน้า แอปของคุณและแอปอื่นจะต้องดาวน์โหลดสำเนาชุดข้อมูลเดียวกันแยกกัน
Android 11 อนุญาตให้แคชชุดข้อมูลขนาดใหญ่เหล่านี้ในอุปกรณ์โดยใช้ 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 เปิดตัวการควบคุมใหม่เพื่อช่วยให้แมชชีนเลิร์นนิงทํางานได้อย่างราบรื่น ดังนี้
QoS API: QoS API ใหม่รองรับการจัดลําดับความสําคัญและกำหนดเวลาของงานใน NNAPI ด้วยฟังก์ชันใหม่ต่อไปนี้
อินพุต/เอาต์พุตโดเมนหน่วยความจำ: NNAPI 1.3 รองรับโดเมนหน่วยความจำเป็นอินพุตและเอาต์พุตสําหรับการดําเนินการ ซึ่งจะนําสําเนาข้อมูลเดียวกันที่ไม่จําเป็นออกจากคอมโพเนนต์ระบบต่างๆ ซึ่งจะช่วยปรับปรุงประสิทธิภาพรันไทม์ของเครือข่ายประสาทเทียม Android ฟีเจอร์นี้จะเพิ่มชุด NDK API ใหม่สำหรับใช้กับออบเจ็กต์
ANeuralNetworksMemoryDesc
และANeuralNetworkMemory
รวมถึงฟังก์ชันต่อไปนี้ANeuralNetworksMemoryDesc_create()
ANeuralNetworksMemoryDesc_free()
ANeuralNetworksMemoryDesc_addInputRole()
ANeuralNetworksMemoryDesc_addOutputRole()
ANeuralNetworksMemoryDesc_setDimensions()
ANeuralNetworksMemoryDesc_finish()
ANeuralNetworksMemory_createFromDesc()
ANeuralNetworksMemory_copy()
ดูข้อมูลเพิ่มเติมได้ที่ตัวอย่างโดเมนหน่วยความจำของเครือข่ายประสาทเทียม
การรองรับ Dependency API และ Sync Fence: NNAPI 1.3 รองรับการประมวลผลแบบไม่พร้อมกันที่มี Dependency ซึ่งช่วยลดค่าใช้จ่ายเพิ่มเติมได้อย่างมากเมื่อเรียกใช้โมเดลแบบเชนขนาดเล็ก ฟีเจอร์นี้จะเพิ่มฟังก์ชันใหม่ต่อไปนี้
โฟลว์การควบคุม: NNAPI 1.3 มีการรองรับโฟลว์การควบคุมทั่วไปด้วยการทำงานของกราฟใหม่
ANEURALNETWORKS_IF
และANEURALNETWORKS_WHILE
ซึ่งยอมรับโมเดลอื่นๆ เป็นอาร์กิวเมนต์โดยใช้ตัวถูกดำเนินการประเภทANEURALNETWORKS_MODEL
ใหม่ นอกจากนี้ ฟีเจอร์นี้ยังมีฟังก์ชันใหม่ต่อไปนี้
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 เวอร์ชัน 66 เมื่อเทียบกับเวอร์ชัน 63 ใน Android 10 ไลบรารีเวอร์ชันใหม่มีข้อมูลภาษา CLDR ที่อัปเดตแล้ว รวมถึงการปรับปรุงการรองรับการทำให้เนื้อหาเป็นสากลใน Android อีกหลายรายการ
การเปลี่ยนแปลงที่สําคัญในไลบรารีเวอร์ชันใหม่มีดังนี้
- ตอนนี้ API การจัดรูปแบบจํานวนมากรองรับประเภทออบเจ็กต์ผลลัพธ์ใหม่ซึ่งขยายจาก
FormattedValue
แล้ว LocaleMatcher
API ได้รับการปรับปรุงด้วยคลาสบิลเดอร์ การรองรับประเภทjava.util.Locale
และคลาสผลลัพธ์ที่มีข้อมูลเพิ่มเติมเกี่ยวกับการจับคู่- ขณะนี้ระบบรองรับ Unicode 13 แล้ว
สื่อ
การจัดสรรบัฟเฟอร์ MediaCodec
Android 11 มี MediaCodec
API ใหม่ที่ช่วยให้แอปควบคุมการจัดสรรบัฟเฟอร์อินพุตและเอาต์พุตได้มากขึ้น ซึ่งจะช่วยให้แอปจัดการหน่วยความจำได้อย่างมีประสิทธิภาพมากขึ้น
ชั้นเรียนใหม่
วิธีใหม่
MediaCodec.getQueueRequest()
MediaCodec.getOutputFrame()
MediaCodec.LinearBlock.isCodecCopyFreeCompatible()
นอกจากนี้ ลักษณะการทำงานของ 2 เมธอดใน MediaCodec.Callback()
ก็มีการเปลี่ยนแปลงดังนี้
onInputBufferAvailable()
- หากกําหนดค่าให้ใช้ Block App ควรใช้
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()
หากต้องการเปิดหรือปิดการถอดรหัสที่มีเวลาในการตอบสนองต่ำ ให้ทำอย่างใดอย่างหนึ่งต่อไปนี้
- ตั้งค่าคีย์ใหม่
KEY_LOW_LATENCY
เป็น 0 หรือ 1 โดยใช้MediaCodec.configure()
- ตั้งค่าคีย์พารามิเตอร์ใหม่
PARAMETER_KEY_LOW_LATENCY
เป็น 0 หรือ 1 โดยใช้MediaCodec.setParameters()
ฟังก์ชัน 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 ใช้ลักษณะการทำงานแบบใหม่สำหรับแอปที่ใช้ API ของแคสต์และ MediaRouter
นอกจากการเข้าถึงตัวเลือกการแคสต์จากภายในแอปแล้ว ตัวเลือกการเปลี่ยนจะปรากฏในมีเดียเพลเยอร์ของระบบด้วย ซึ่งช่วยให้ผู้ใช้ได้รับประสบการณ์การใช้งานที่ราบรื่นเมื่อเปลี่ยนอุปกรณ์ไปมาขณะเปลี่ยนบริบทการดูและฟัง เช่น ดูวิดีโอในห้องครัวกับบนโทรศัพท์ หรือฟังเสียงในบ้านหรือรถยนต์ โปรดดูตัวสลับเอาต์พุต
การเชื่อมต่อ
การเพิ่มประสิทธิภาพ Passpoint ของ Wi-Fi
ดูข้อมูลเกี่ยวกับความสามารถของ Passpoint ที่เพิ่มเข้ามาใน Android 11 ได้ที่ Passpoint
ขยายคำแนะนำ Wi-Fi แล้ว
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 ขึ้นไป คุณอาจติดตั้งโปรไฟล์ที่มี FQDN มากกว่า 1 โปรไฟล์ซึ่งจะตรงกับเครือข่ายเป็นผู้ให้บริการหน้าแรกเมื่อผู้ใช้ติดตั้งซิมกับ MCC หรือ MNC
การรองรับเสาอากาศ GNSS
Android 11 เปิดตัวคลาส GnssAntennaInfo
ซึ่งช่วยให้แอปของคุณใช้ประโยชน์จากการระบุตำแหน่งที่มีความแม่นยำระดับเซนติเมตรได้มากขึ้น ซึ่งระบบดาวเทียมนำทางทั่วโลก (GNSS) มอบให้ได้
ดูข้อมูลเพิ่มเติมในคู่มือข้อมูลการปรับเทียบเสาอากาศ
กราฟิก
ตัวถอดรหัสรูปภาพ NDK
NDK ImageDecoder
API มี API มาตรฐานสำหรับแอป Android C/C++ เพื่อถอดรหัสรูปภาพโดยตรง นักพัฒนาแอปไม่จําเป็นต้องใช้ API ของเฟรมเวิร์ก (ผ่าน JNI) หรือรวมไลบรารีการถอดรหัสรูปภาพของบุคคลที่สามอีกต่อไป ดูข้อมูลเพิ่มเติมได้ที่คู่มือนักพัฒนาซอฟต์แวร์โปรแกรมถอดรหัสรูปภาพ
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()
จากคลาส API AssetManager
เช่นเดียวกับเนื้อหาที่รวมอยู่ใน 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 ได้โดยส่งรหัสของกลุ่มไปยังเมธอดใหม่ต่อไปนี้ในคลาส API ของ PackageManager
เมื่อเพิ่มประเภท 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
หากระบบยอมรับคำขอแชร์ข้อมูล แอปของคุณจะได้รับตัวระบุไฟล์แบบเขียนอย่างเดียวเพื่อแชร์กับบริการจับภาพเนื้อหา