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 หลายรายการที่รองรับจอแสดงผลแบบน้ำตก
ซึ่งเป็นจอแสดงผลที่
โค้งรอบขอบของอุปกรณ์ โดยเราจะถือว่าจอแสดงผลเหล่านี้เป็นรูปแบบหนึ่งของ
จอแสดงผลที่มีรอยบาก ตอนนี้เมธอด
DisplayCutout
.getSafeInset…()
ที่มีอยู่จะแสดงผลระยะขอบที่ปลอดภัยเพื่อหลีกเลี่ยงพื้นที่น้ำตกและรอยบาก
หากต้องการแสดงเนื้อหาแอปในพื้นที่วอเตอร์ฟอลล์ ให้ทำดังนี้
โทร
DisplayCutout.getWaterfallInsets()
เพื่อขอขนาดที่แน่นอนของภาพน้ำตกตั้งค่าแอตทริบิวต์เลย์เอาต์หน้าต่าง
layoutInDisplayCutoutMode
เป็นLAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS
เพื่ออนุญาตให้หน้าต่างขยายไปยังบริเวณรอยบากและบริเวณน้ำตกที่ขอบทั้งหมด ของหน้าจอ คุณต้องตรวจสอบว่าไม่มีเนื้อหาสำคัญอยู่ในบริเวณที่ถูกตัดออก หรือบริเวณน้ำตก
เซ็นเซอร์มุมบานพับและอุปกรณ์พับได้
Android 11 ช่วยให้แอปที่ทำงานบน
อุปกรณ์ที่มีการกำหนดค่าหน้าจอแบบบานพับสามารถ
กำหนดมุมของบานพับได้โดยการจัดหาเซ็นเซอร์ใหม่
พร้อม TYPE_HINGE_ANGLE
และSensorEvent
ใหม่ที่สามารถตรวจสอบ
มุมบานพับและให้การวัดเป็นองศาระหว่างชิ้นส่วนสำคัญ 2 ส่วนของอุปกรณ์ คุณสามารถใช้การวัดผลดิบเหล่านี้เพื่อสร้าง
ภาพเคลื่อนไหวแบบละเอียดเมื่อผู้ใช้จัดการอุปกรณ์
การสนทนา
การปรับปรุงการสนทนา
Android 11 ได้ปรับปรุงวิธีจัดการการสนทนาหลายอย่าง การสนทนาเป็นการสื่อสารแบบเรียลไทม์และแบบสองทาง ระหว่างบุคคลตั้งแต่ 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 อนุญาตให้แคชชุดข้อมูลขนาดใหญ่เหล่านี้ในอุปกรณ์โดยใช้บล็อกข้อมูลที่แชร์เพื่อช่วยลดความซ้ำซ้อนของข้อมูลทั้งในเครือข่ายและในดิสก์ ดูข้อมูลเพิ่มเติมเกี่ยวกับการแชร์ชุดข้อมูลได้ที่คำแนะนำเชิงลึกเกี่ยวกับการแชร์ชุดข้อมูลขนาดใหญ่
ทำการเข้ารหัสตามไฟล์หลังจากรีสตาร์ท 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 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: Quality of Service API ใหม่รองรับ การจัดลําดับความสําคัญและกําหนดเวลาของงานใน NNAPI ด้วยฟังก์ชันใหม่ต่อไปนี้
อินพุต/เอาต์พุตโดเมนหน่วยความจำ: NNAPI 1.3 รองรับโดเมนหน่วยความจำ เป็นอินพุตและเอาต์พุตในการดำเนินการ ซึ่งจะนำสำเนาข้อมูลเดียวกันที่ไม่จำเป็นออกในคอมโพเนนต์ต่างๆ ของระบบ เพื่อปรับปรุงประสิทธิภาพรันไทม์ของเครือข่ายประสาทของ Android ฟีเจอร์นี้จะเพิ่มชุด API ใหม่ของ NDK สำหรับใช้กับออบเจ็กต์
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 รองรับ การคำนวณแบบอะซิงโครนัสที่มีการอ้างอิง ซึ่งช่วยลดค่าใช้จ่ายได้อย่างมากเมื่อ เรียกใช้โมเดลขนาดเล็กที่เชื่อมโยงกัน ฟีเจอร์นี้จะเพิ่มฟังก์ชันใหม่ต่อไปนี้
โฟลว์การควบคุม: 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
แล้ว - เราได้ปรับปรุง
LocaleMatcher
API ด้วยคลาสเครื่องมือสร้าง การรองรับประเภทjava.util.Locale
และคลาสผลลัพธ์ ที่มีข้อมูลเพิ่มเติมเกี่ยวกับการจับคู่ - ตอนนี้ระบบรองรับ Unicode 13 แล้ว
สื่อ
การจัดสรรบัฟเฟอร์ MediaCodec
Android 11 มี MediaCodec
API ใหม่ที่ช่วยให้
แอปควบคุมได้มากขึ้นเมื่อจัดสรรบัฟเฟอร์อินพุตและเอาต์พุต ซึ่งจะช่วยให้แอปจัดการหน่วยความจำได้อย่างมีประสิทธิภาพมากขึ้น
ชั้นเรียนใหม่
วิธีการใหม่
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 มีลักษณะการทำงานใหม่สำหรับแอปที่ใช้ API cast และ mediarouter
นอกเหนือจากการเข้าถึงตัวเลือกการแคสต์จากภายในแอปแล้ว ตัวเลือกการสลับ จะปรากฏในเครื่องเล่นสื่อของระบบด้วย ซึ่งจะช่วยให้ผู้ใช้ได้รับ เส้นทางที่ราบรื่นเมื่อเปลี่ยนอุปกรณ์ขณะเปลี่ยนบริบทการดูและ การฟัง เช่น การดูวิดีโอในครัวเทียบกับการดูบนโทรศัพท์ หรือการฟังเสียงในบ้านหรือรถยนต์ ดูตัวสลับเอาต์พุต
การเชื่อมต่อ
การปรับปรุง Wi-Fi Passpoint
ดูข้อมูลเกี่ยวกับความสามารถของ Passpoint ที่เพิ่มเข้ามาใน Android 11 ได้ที่ Passpoint
ขยายการใช้งาน Wi-Fi Suggestion API
Android 11 ขยาย Wi-Fi Suggestion API เพื่อเพิ่มความสามารถในการจัดการเครือข่ายของแอป ซึ่งรวมถึงสิ่งต่อไปนี้
- แอปการจัดการการเชื่อมต่อสามารถจัดการเครือข่ายของตนเองได้โดยอนุญาตคำขอการยกเลิกการเชื่อมต่อ
- ระบบได้ผสานรวมเครือข่าย Passpoint เข้ากับ Suggestion API และสามารถ แนะนำให้ผู้ใช้ได้
- API ของ Analytics ช่วยให้คุณได้รับข้อมูลเกี่ยวกับคุณภาพของเครือข่าย
การอัปเดต 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 ทำงานในระบบปฏิบัติการโดยตรง ซึ่งช่วยลดความซับซ้อนของโค้ดที่จำเป็นต่อการสร้างการเชื่อมต่อ VPN แบบ IKEv2/IPsec ในแอป
การควบคุมการเข้าถึงเครือข่ายต่อกระบวนการ
ดูข้อมูลเกี่ยวกับการเปิดใช้การเข้าถึงเครือข่ายแบบต่อกระบวนการได้ที่จัดการ การใช้เครือข่าย
อนุญาตการกำหนดค่า Passpoint ที่ติดตั้งหลายรายการซึ่งมี FQDN เดียวกัน
ตั้งแต่ Android 11 เป็นต้นไป คุณสามารถใช้
PasspointConfiguration.getUniqueId()
เพื่อรับตัวระบุที่ไม่ซ้ำกันสำหรับออบเจ็กต์ PasspointConfiguration
ซึ่งช่วยให้
ผู้ใช้แอปของคุณติดตั้งหลายโปรไฟล์ที่มีชื่อโดเมนที่สมบูรณ์ในตัวเอง (FQDN) เดียวกันได้
ฟังก์ชันนี้มีประโยชน์เมื่อผู้ให้บริการใช้ชุดค่าผสมของรหัสประเทศของอุปกรณ์เคลื่อนที่ (MCC) และรหัสเครือข่ายของอุปกรณ์เคลื่อนที่ (MNC) มากกว่า 1 ชุดในเครือข่ายของตน แต่มี FQDN เพียงรายการเดียว ใน Android 11 ขึ้นไป คุณสามารถ ติดตั้งโปรไฟล์มากกว่า 1 รายการที่มี FQDN เดียวกันซึ่งจะตรงกับเครือข่าย ในฐานะผู้ให้บริการโฮมเมื่อผู้ใช้ติดตั้งซิมที่มี MCC หรือ MNC
รองรับเสาอากาศ GNSS
Android 11 เปิดตัวคลาส
GnssAntennaInfo
ซึ่งช่วยให้แอปของคุณใช้ประโยชน์จากการระบุตำแหน่งที่มีความแม่นยำระดับเซนติเมตรที่ระบบดาวเทียมนำทางทั่วโลก (GNSS) มอบให้ได้มากขึ้น
ดูข้อมูลเพิ่มเติมได้ในคำแนะนำเกี่ยวกับข้อมูลการปรับเทียบเสาอากาศ
กราฟิก
ตัวถอดรหัสรูปภาพ NDK
API ของ NDK ImageDecoder
มี API มาตรฐานสำหรับแอป C/C++ ของ Android เพื่อถอดรหัสรูปภาพโดยตรง นักพัฒนาแอปไม่จำเป็นต้องใช้ Framework 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 เช่น "ป้อน" และ "ถัดไป" รวมถึง
ภาพหน้าจอของหน้าต่างที่ไม่ได้เปิดใช้ 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 และตารางทรัพยากร
กรณีการใช้งานหลักอย่างหนึ่งของ 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
FillEventHistory
จะรายงานเหตุการณ์ประเภท
TYPE_DATASETS_SHOWN
ใหม่ FillEventHistory
จะบันทึกเหตุการณ์ประเภทนี้ทุกครั้งที่บริการป้อนข้อความอัตโนมัติ
แสดงชุดข้อมูลอย่างน้อย 1 ชุดต่อผู้ใช้ บริการป้อนข้อความอัตโนมัติสามารถใช้
เหตุการณ์เหล่านี้ร่วมกับ
TYPE_DATASET_SELECTED
เหตุการณ์ที่มีอยู่เพื่อพิจารณาว่าผู้ใช้เลือกตัวเลือกการป้อนข้อความอัตโนมัติที่ระบุไว้หรือไม่
การผสานรวม IME
ตอนนี้แป้นพิมพ์และ IME อื่นๆ สามารถแสดงคำแนะนำในการป้อนข้อความอัตโนมัติแบบอินไลน์ในแถบคำแนะนำหรืออินเทอร์เฟซที่คล้ายกันแทนที่จะเป็นเมนูแบบเลื่อนลง เพื่อปกป้องข้อมูลที่ละเอียดอ่อน เช่น รหัสผ่านและหมายเลขบัตรเครดิต ระบบจะแสดงคำแนะนำต่อผู้ใช้ แต่ IME จะไม่ทราบจนกว่า ผู้ใช้จะเลือกคำแนะนำ ดูข้อมูลเกี่ยวกับวิธีที่ IME และเครื่องมือจัดการรหัสผ่านรองรับฟีเจอร์นี้ได้ที่การผสานรวมการป้อนข้อความอัตโนมัติกับคีย์บอร์ด
การแชร์ข้อมูลกับบริการบันทึกเนื้อหา
ตั้งแต่ Android 11 เป็นต้นไป แอปของคุณจะแชร์ข้อมูลกับบริการจับภาพเนื้อหาของอุปกรณ์ได้ ความสามารถนี้ช่วยให้อุปกรณ์แสดงข้อมูลอัจฉริยะตามบริบทได้ง่ายขึ้น เช่น แสดงชื่อเพลงที่กำลังเล่นอยู่ในสภาพแวดล้อมของผู้ใช้
หากต้องการทำให้ข้อมูลจากแอปพร้อมใช้งานในบริการจับภาพเนื้อหา ให้เรียกใช้เมธอด
shareData()
ในอินสแตนซ์ของ ContentCaptureManager
หากระบบยอมรับคำขอแชร์ข้อมูล แอปของคุณจะได้รับตัวอธิบายไฟล์แบบเขียนอย่างเดียวเพื่อแชร์
กับบริการจับภาพเนื้อหา