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 ดังนี้
- เราไม่แนะนำให้ใช้ตัวสร้าง
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 อนุญาตให้แคชชุดข้อมูลขนาดใหญ่เหล่านี้ไว้ในอุปกรณ์โดยใช้ 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 เปิดตัวการควบคุมใหม่เพื่อช่วยให้แมชชีนเลิร์นนิงทํางานได้อย่างราบรื่น ดังนี้
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 library เวอร์ชัน 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 API แอปควรใช้
onOutputBufferAvailable()
- แอปอาจใช้
MediaCodec.getOutputFrame()
กับดัชนีเพื่อรับออบเจ็กต์OutputFrame
ที่มีข้อมูลเพิ่มเติมและบัฟเฟอร์ LinearBlock/HardwareBuffer แทนการเรียกใช้MediaCodec.getOutputBuffer()
กับดัชนี
MediaCodec.getQueueRequest
กับดัชนีแทนการเรียก MediaCodec.getInputBuffer()
และ MediaCodec.queueInputBuffer()
กับดัชนี โดยแนบ LinearBlock/HardwareBuffer เข้ากับช่อง
การถอดรหัสที่มีเวลาในการตอบสนองต่ำใน 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
นอกจากการเข้าถึงตัวเลือกการแคสต์จากภายในแอปแล้ว ตัวเลือกการเปลี่ยนยังปรากฏในโปรแกรมเล่นสื่อของระบบด้วย ซึ่งจะช่วยให้ผู้ใช้ได้รับประสบการณ์การใช้งานที่ราบรื่นเมื่อเปลี่ยนอุปกรณ์ไปมาขณะเปลี่ยนบริบทการรับชมและฟัง เช่น ดูวิดีโอในห้องครัวกับบนโทรศัพท์ หรือฟังเสียงในบ้านหรือรถยนต์ ดูตัวสลับเอาต์พุต
การเชื่อมต่อ
การปรับปรุง 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
หากระบบยอมรับคำขอแชร์ข้อมูล แอปของคุณจะได้รับตัวระบุไฟล์แบบเขียนอย่างเดียวเพื่อแชร์กับบริการจับภาพเนื้อหา