Android 11 มาพร้อมฟีเจอร์และ API ใหม่ๆ ที่ยอดเยี่ยมสำหรับนักพัฒนาแอป ส่วนด้านล่างจะช่วยให้คุณเรียนรู้เกี่ยวกับฟีเจอร์สำหรับแอปและเริ่มต้นใช้งาน API ที่เกี่ยวข้อง
ดูรายการ API ใหม่ รายการที่แก้ไข และรายการที่นำออกโดยละเอียดได้ที่รายงานความแตกต่างของ API ดูรายละเอียดเกี่ยวกับ API ใหม่ได้ที่เอกสารอ้างอิง Android API ซึ่งจะไฮไลต์ API ใหม่เพื่อให้เห็นได้ชัดเจน นอกจากนี้ หากต้องการดูข้อมูลเกี่ยวกับส่วนที่การเปลี่ยนแปลงแพลตฟอร์มอาจส่งผลต่อแอปของคุณ โปรดดูการเปลี่ยนแปลงลักษณะการทำงานของ Android 11 สำหรับแอปที่กำหนดเป้าหมายเป็น Android R และสำหรับแอปทั้งหมด รวมถึงการเปลี่ยนแปลงด้านความเป็นส่วนตัว
ประสบการณ์ใหม่ๆ
การควบคุมอุปกรณ์
Android 11 มี API ControlsProviderService ใหม่ที่คุณใช้เพื่อแสดงการควบคุมสำหรับอุปกรณ์ภายนอกที่เชื่อมต่อได้ การควบคุมเหล่านี้จะปรากฏในส่วนระบบควบคุมอุปกรณ์ในเมนูเปิด/ปิดของ Android ดูข้อมูลเพิ่มเติมได้ที่ควบคุมอุปกรณ์ภายนอก
การควบคุมสื่อ
Android 11 อัปเดตวิธีแสดงตัวควบคุมสื่อ ตัวควบคุมสื่อจะปรากฏขึ้นใกล้กับการตั้งค่าด่วน เซสชันจากหลายแอปจะจัดเรียงอยู่ในภาพสไลด์ที่ปัดได้ ซึ่งรวมถึงสตรีมที่เล่นในโทรศัพท์ สตรีมระยะไกล เช่น สตรีมที่ตรวจพบในอุปกรณ์ภายนอกหรือเซสชันการแคสต์ และเซสชันก่อนหน้าที่เล่นต่อได้ตามลำดับที่เล่นครั้งล่าสุด
ผู้ใช้สามารถรีสตาร์ทเซสชันก่อนหน้าจากภาพสไลด์ได้โดยไม่ต้องเริ่มแอป เมื่อการเล่นเริ่มขึ้น ผู้ใช้จะโต้ตอบกับตัวควบคุมสื่อตามปกติ
ดูข้อมูลเพิ่มเติมได้ที่ตัวควบคุมสื่อ
หน้าจอ
รองรับจอแสดงผลแบบ Waterfall ได้ดียิ่งขึ้น
Android 11 มี API หลายรายการเพื่อรองรับจอแสดงผลแบบ Waterfall ซึ่งเป็นจอแสดงผลที่โค้งไปตามขอบของอุปกรณ์ จอแสดงผลเหล่านี้จะถือว่าเป็นตัวแปรของจอแสดงผลที่มีหน้าจอรอยบาก เมธอด DisplayCutout.getSafeInset…() ที่มีอยู่จะแสดงผลส่วนแทรกที่ปลอดภัยเพื่อหลีกเลี่ยงพื้นที่ Waterfall และส่วนที่ถูกตัดออก
หากต้องการแสดงผลเนื้อหาแอปในพื้นที่ Waterfall ให้ทำดังนี้
โทรหา
DisplayCutout.getWaterfallInsets()เพื่อดูขนาดที่แน่นอนของส่วนที่เว้าเข้าไปสำหรับน้ำตกตั้งค่าแอตทริบิวต์เลย์เอาต์หน้าต่าง
layoutInDisplayCutoutModeเป็นLAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYSเพื่ออนุญาตให้หน้าต่างขยายไปยังบริเวณรอยบากและบริเวณ Waterfall ที่ขอบทั้งหมดของหน้าจอ คุณต้องตรวจสอบว่าไม่มีเนื้อหาสำคัญอยู่ในพื้นที่ส่วนที่ถูกตัดออกหรือพื้นที่แบบ Waterfall
เซ็นเซอร์มุมบานพับและอุปกรณ์แบบพับได้
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 Biometric ด้วย
ประเภทการตรวจสอบสิทธิ์
Android 11 เปิดตัวอินเทอร์เฟซ BiometricManager.Authenticators ซึ่งคุณสามารถใช้เพื่อประกาศประเภทการตรวจสอบสิทธิ์ที่แอปรองรับ
ระบุประเภทการตรวจสอบสิทธิ์ที่ใช้
หลังจากผู้ใช้ตรวจสอบสิทธิ์แล้ว คุณสามารถตรวจสอบได้ว่าผู้ใช้ตรวจสอบสิทธิ์โดยใช้ข้อมูลเข้าสู่ระบบของอุปกรณ์หรือข้อมูลเข้าสู่ระบบด้วยข้อมูลไบโอเมตริกโดยเรียกใช้ getAuthenticationType()
การรองรับเพิ่มเติมสำหรับคีย์ที่ต้องมีการตรวจสอบสิทธิ์ต่อการใช้งาน
Android 11 รองรับการตรวจสอบสิทธิ์โดยใช้คีย์การตรวจสอบสิทธิ์ต่อการใช้งานมากขึ้น
วิธีการที่เลิกใช้งานแล้ว
Android 11 เลิกใช้งานเมธอดต่อไปนี้
- วิธี
setDeviceCredentialAllowed() - วิธี
setUserAuthenticationValidityDurationSeconds() - เวอร์ชันที่โอเวอร์โหลดของ
canAuthenticate()ซึ่งไม่รับอาร์กิวเมนต์
การแชร์ชุดข้อมูลขนาดใหญ่อย่างปลอดภัย
ในบางสถานการณ์ เช่น สถานการณ์ที่เกี่ยวข้องกับแมชชีนเลิร์นนิงหรือการเล่นสื่อ แอปของคุณอาจต้องการใช้ชุดข้อมูลขนาดใหญ่ชุดเดียวกับแอปอื่น ใน Android เวอร์ชันก่อนหน้า แอปของคุณและแอปอื่นจะต้องดาวน์โหลดสำเนาชุดข้อมูลเดียวกันแยกกัน
Android 11 ช่วยให้แคชชุดข้อมูลขนาดใหญ่เหล่านี้ในอุปกรณ์ได้โดยใช้ออบเจ็กต์ BLOB ของข้อมูลที่แชร์ เพื่อช่วยลดความซ้ำซ้อนของข้อมูลทั้งในเครือข่ายและในดิสก์ ดูข้อมูลเพิ่มเติมเกี่ยวกับการแชร์ชุดข้อมูลได้ที่คู่มือเชิงลึกเกี่ยวกับการแชร์ชุดข้อมูลขนาดใหญ่
ทำการเข้ารหัสตามไฟล์หลังจากรีสตาร์ท OTA โดยไม่มีข้อมูลเข้าสู่ระบบของผู้ใช้
หลังจากอุปกรณ์อัปเดต OTA และรีสตาร์ทเสร็จแล้ว คีย์ Credential Encrypted (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 API (NNAPI)
การดำเนินการใหม่
NNAPI 1.3 เปิดตัวประเภทตัวถูกดำเนินการใหม่ TENSOR_QUANT8_ASYMM_SIGNED เพื่อรองรับรูปแบบการทำ Quantization ใหม่ของ TensorFlow Lite
นอกจากนี้ NNAPI 1.3 ยังมีการดำเนินการใหม่ต่อไปนี้ด้วย
QUANTIZED_LSTMIFWHILEELUHARD_SWISHFILLRANK
การควบคุม ML ใหม่
NNAPI 1.3 เปิดตัวการควบคุมใหม่เพื่อช่วยให้แมชชีนเลิร์นนิงทำงานได้อย่างราบรื่น ดังนี้
QoS API: Quality of Service 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 โดยคุณสามารถใช้เพื่อรับการแจ้งเตือนการเปลี่ยนแปลงสถานะความร้อนหรือเพื่อสำรวจสถานะปัจจุบันโดยตรง
ข้อความและอินพุต
การเปลี่ยน 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()
(คุณสามารถตั้งค่า Listener นี้ในมุมมองใดก็ได้ ไม่จำเป็นต้องเป็น EditText)
IME จะเรียกใช้เมธอด onPrepare() ของ Listener จากนั้นจะเรียกใช้ 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 ให้ใช้เวอร์ชัน 66 ของไลบรารี ICU เมื่อเทียบกับเวอร์ชัน 63 ใน Android 10 ไลบรารีเวอร์ชันใหม่นี้มีข้อมูลภาษา CLDR ที่อัปเดตแล้วและการปรับปรุงหลายอย่างเพื่อรองรับการปรับให้เป็นสากลใน Android
การเปลี่ยนแปลงที่สำคัญในไลบรารีเวอร์ชันใหม่มีดังนี้
- ตอนนี้ API การจัดรูปแบบหลายรายการรองรับออบเจ็กต์ประเภทใหม่ที่แสดงผลซึ่งขยาย
FormattedValue - API
LocaleMatcherได้รับการปรับปรุงด้วยคลาส Builder, การรองรับประเภทjava.util.Localeและคลาสผลลัพธ์ที่มีข้อมูลเพิ่มเติมเกี่ยวกับการจับคู่ - ตอนนี้รองรับ Unicode 13 แล้ว
สื่อ
กำลังจัดสรรบัฟเฟอร์ MediaCodec
Android 11 มี API MediaCodec ใหม่ที่ช่วยให้แอปควบคุมได้มากขึ้นเมื่อจัดสรรบัฟเฟอร์อินพุตและเอาต์พุต ซึ่งจะช่วยให้แอปจัดการหน่วยความจำได้อย่างมีประสิทธิภาพมากขึ้น
ชั้นเรียนใหม่:
วิธีการใหม่ๆ
MediaCodec.getQueueRequest()MediaCodec.getOutputFrame()MediaCodec.LinearBlock.isCodecCopyFreeCompatible()
นอกจากนี้ ลักษณะการทำงานของ 2 เมธอดใน MediaCodec.Callback() มีการเปลี่ยนแปลงดังนี้
onInputBufferAvailable()- แทนที่จะเรียกใช้
MediaCodec.getInputBuffer()และMediaCodec.queueInputBuffer()ด้วยดัชนี หากกำหนดค่าให้ใช้ Block Model API แอปควรใช้MediaCodec.getQueueRequestกับดัชนี โดยแนบ LinearBlock/HardwareBuffer กับช่อง onOutputBufferAvailable()- แทนที่จะเรียกใช้
MediaCodec.getOutputBuffer()ด้วยดัชนี แอปอาจใช้MediaCodec.getOutputFrame()ด้วยดัชนีเพื่อรับออบเจ็กต์OutputFrameที่มีข้อมูลเพิ่มเติมและบัฟเฟอร์ 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 เพิ่มเมธอดใหม่ลงใน API ของ AudioRecord, MediaRecorder และ AAudioStream เมธอดเหล่านี้จะเปิดและปิดใช้ความสามารถในการจับภาพพร้อมกัน ไม่ว่ากรณีการใช้งานที่เลือกจะเป็นอย่างไร ดูการแชร์อินพุตเสียง
ตัวสลับเอาต์พุต
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 ขึ้นไป คุณสามารถติดตั้งโปรไฟล์ที่มี FQDN เดียวกันได้มากกว่า 1 โปรไฟล์ ซึ่งจะตรงกับเครือข่ายในฐานะผู้ให้บริการหลักเมื่อผู้ใช้ติดตั้งซิมที่มี MCC หรือ MNC
การรองรับเสาอากาศ GNSS
Android 11 เปิดตัวคลาส GnssAntennaInfo ซึ่งช่วยให้แอปใช้ประโยชน์จากการระบุตำแหน่งที่แม่นยำระดับเซนติเมตรที่ระบบดาวเทียมนำทางทั่วโลก (GNSS) มีให้ได้มากขึ้น
ดูข้อมูลเพิ่มเติมได้ในคู่มือเกี่ยวกับข้อมูลการปรับเทียบเสาอากาศ
กราฟิก
โปรแกรมถอดรหัสรูปภาพ NDK
NDK ImageDecoder API มี API มาตรฐานสำหรับแอป Android C/C++ เพื่อถอดรหัสรูปภาพโดยตรง นักพัฒนาแอปไม่จำเป็นต้องใช้ 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_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 และตารางทรัพยากร
กรณีการใช้งานหลักอย่างหนึ่งสำหรับ 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 ในไฟล์ Manifest ของแอปจึงจะรับ Intent ได้ ใน 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 ดังกล่าวจะทำงานเหมือนกับประเภท MIME แบบคงที่ซึ่งประกาศไว้อย่างชัดเจนในไฟล์ Manifest
การปรับปรุงการป้อนข้อความอัตโนมัติ
Android 11 มีการปรับปรุงบริการป้อนข้อความอัตโนมัติ
ตัวระบุคำแนะนำใน AssistStructure.ViewNode
บริการป้อนข้อความอัตโนมัติมักจะมีประโยชน์ในการคำนวณแฮชลายเซ็นสำหรับมุมมองโดยอิงตามพร็อพเพอร์ตี้ของมุมมอง คำแนะนำมุมมองเป็นพร็อพเพอร์ตี้ที่ดีเป็นพิเศษในการรวมเมื่อคำนวณแฮชลายเซ็น แต่สตริงคำแนะนำอาจเปลี่ยนแปลงตามภาษาของโทรศัพท์ เพื่อแก้ปัญหานี้ Android 11 จึงขยาย
AssistStructure.ViewNode
ด้วยเมธอด
getHintIdEntry()
ใหม่ ซึ่งจะแสดงผลตัวระบุทรัพยากรสำหรับข้อความคำแนะนำของมุมมอง วิธีนี้จะให้ค่าที่ไม่ขึ้นอยู่กับภาษาซึ่งคุณสามารถใช้เพื่อคำนวณแฮชลายเซ็นได้
เหตุการณ์ที่แสดงชุดข้อมูล
Android 11 มีวิธีระบุกรณีที่บริการป้อนข้อความอัตโนมัตินำเสนอชุดข้อมูลแต่ผู้ใช้ไม่ได้เลือกชุดข้อมูลใดเลย เพื่อช่วยให้บริการป้อนข้อความอัตโนมัติปรับปรุงคำแนะนำได้ ใน Android 11
FillEventHistory
จะรายงานประเภทเหตุการณ์
TYPE_DATASETS_SHOWN
ใหม่ FillEventHistory จะบันทึกเหตุการณ์ประเภทนี้เมื่อใดก็ตามที่บริการป้อนข้อความอัตโนมัตินำเสนอชุดข้อมูลอย่างน้อย 1 ชุดแก่ผู้ใช้ บริการป้อนข้อความอัตโนมัติสามารถใช้เหตุการณ์เหล่านี้ร่วมกับเหตุการณ์ TYPE_DATASET_SELECTED ที่มีอยู่เพื่อระบุว่าผู้ใช้เลือกตัวเลือกการป้อนข้อความอัตโนมัติที่ระบุหรือไม่
การผสานรวม IME
ตอนนี้แป้นพิมพ์และ IME อื่นๆ สามารถแสดงคำแนะนำการป้อนข้อความอัตโนมัติในบรรทัด ในแถบคำแนะนำหรืออินเทอร์เฟซที่คล้ายกัน แทนที่จะแสดงในเมนูแบบเลื่อนลง เพื่อปกป้องข้อมูลที่ละเอียดอ่อน เช่น รหัสผ่านและหมายเลขบัตรเครดิต ระบบจะแสดงคำแนะนำแก่ผู้ใช้ แต่ IME จะไม่ทราบจนกว่าผู้ใช้จะเลือกคำแนะนำ ดูข้อมูลเกี่ยวกับวิธีที่ IME และเครื่องมือจัดการรหัสผ่านสามารถรองรับฟีเจอร์นี้ได้ที่หัวข้อการผสานรวมการป้อนข้อความอัตโนมัติกับแป้นพิมพ์
การแชร์ข้อมูลกับบริการจับภาพเนื้อหา
ตั้งแต่ Android 11 เป็นต้นไป แอปของคุณจะแชร์ข้อมูลกับบริการจับภาพเนื้อหาของอุปกรณ์ได้ ความสามารถนี้ช่วยให้อุปกรณ์สามารถแสดงข้อมูลอัจฉริยะตามบริบทได้ง่ายขึ้น เช่น การแสดงชื่อเพลงที่กำลังเล่นอยู่ในสภาพแวดล้อมของผู้ใช้
หากต้องการให้ข้อมูลจากแอปพร้อมใช้งานสำหรับบริการจับภาพเนื้อหา ให้เรียกใช้เมธอด shareData() ในอินสแตนซ์ของ ContentCaptureManager หากระบบยอมรับคำขอแชร์ข้อมูล แอปของคุณจะได้รับตัวบอกไฟล์แบบเขียนอย่างเดียวเพื่อแชร์กับบริการจับภาพเนื้อหา