Android 9 (API ระดับ 28) เปิดตัวฟีเจอร์และความสามารถใหม่ๆ ที่ยอดเยี่ยมสำหรับ ผู้ใช้และนักพัฒนาซอฟต์แวร์ เอกสารนี้ไฮไลต์สิ่งใหม่ๆ สำหรับนักพัฒนาซอฟต์แวร์
หากต้องการเรียนรู้เกี่ยวกับ API ใหม่ โปรดอ่าน รายงานความแตกต่างของ API หรือไปที่ เอกสารอ้างอิง Android API และอย่าลืมชำระเงิน การเปลี่ยนแปลงลักษณะการทำงานของ Android 9 เพื่อเรียนรู้ เกี่ยวกับส่วนที่การเปลี่ยนแปลงของแพลตฟอร์มอาจส่งผลกระทบต่อแอปของคุณ
จุดยืนภายในอาคารด้วย RTT ของ Wi-Fi
![RTT API ใหม่รองรับการจัดตำแหน่งภายในอาคารในแอป](https://developer.android.google.cn/static/images/about/versions/pie/rtt-nav.png?authuser=7&hl=th)
Android 9 เพิ่มการรองรับแพลตฟอร์มสำหรับ IEEE 802.11-2016 Wi-Fi หรือที่เรียกอีกอย่างว่าระยะเวลาเดินทางของ Wi-Fi (RTT) เพื่อให้คุณใช้ประโยชน์ได้ ของตำแหน่งในอาคารในแอปของคุณ
ในอุปกรณ์ที่ใช้ Android 9 ที่รองรับฮาร์ดแวร์ แอปสามารถใช้
RTT API เพื่อวัด
ระยะทางไปยังจุดเข้าใช้งาน Wi-Fi (AP) ที่ใช้ RTT ใกล้เคียง อุปกรณ์จะต้องมี
บริการตำแหน่งเปิดอยู่และเปิดการสแกนหา Wi-Fi (ภายใต้
การตั้งค่า > ตำแหน่ง) และแอปของคุณต้องมี
ACCESS_FINE_LOCATION
สิทธิ์ อุปกรณ์ไม่จำเป็นต้องเชื่อมต่อกับจุดเข้าใช้งานเพื่อใช้ RTT
เพื่อรักษาความเป็นส่วนตัว จะมีเพียงโทรศัพท์เท่านั้นที่สามารถกำหนดระยะห่างไปยัง
จุดเข้าใช้งาน; จุดเข้าใช้งานไม่มีข้อมูลนี้
หากอุปกรณ์วัดระยะทางถึงจุดเข้าใช้งาน 3 จุดขึ้นไป คุณสามารถใช้ แบบหลายมุมมอง เพื่อคาดคะเนตำแหน่งของอุปกรณ์ที่เหมาะกับความต้องการนั้นมากที่สุด การวัดค่าต่างๆ โดยปกติแล้วผลลัพธ์จะมีความแม่นยำภายในระยะ 1-2 เมตร
ด้วยความแม่นยำนี้ คุณจะสร้างประสบการณ์ใหม่ๆ ได้ เช่น ระบบนำทางในอาคาร และบริการตามตำแหน่งแบบละเอียด เช่น การควบคุมด้วยเสียงที่มีความชัดเจน (เช่น "เปิดไฟนี้") และข้อมูลที่อิงตามตำแหน่ง (เช่น "ผลิตภัณฑ์นี้มีข้อเสนอพิเศษไหม")
ดู Wi-Fi RTT API ที่ใช้งานอยู่ใน แอปเดโม Android WifiRttScan
สำหรับข้อมูลเพิ่มเติม โปรดดู ตำแหน่งของ Wi-Fi: ครอบคลุม RTT
รองรับหน้าจอรอยบาก
![หน้าจอตัวเลือกสำหรับนักพัฒนาซอฟต์แวร์แสดงคัตเอาต์ขนาดต่างๆ](https://developer.android.google.cn/static/images/about/versions/pie/emulator-devoptions-cutout_2x.png?authuser=7&hl=th)
ทดสอบหน้าจอรอยบากโดยใช้โปรแกรมจำลอง
Android 9 รองรับหน้าจอแบบใหม่ล่าสุด
ที่มีหน้าจอรอยบากสำหรับกล้องและลำโพง
DisplayCutout
จะช่วยให้คุณสามารถหาตำแหน่งและรูปร่างของพื้นที่ไม่ทำงาน
เนื้อหานั้นไม่ควรจะแสดง เพื่อหาการมีอยู่และตำแหน่งของ
บริเวณรอยบากเหล่านี้ ให้ใช้
getDisplayCutout()
แอตทริบิวต์เลย์เอาต์หน้าต่างใหม่
layoutInDisplayCutoutMode
ทำให้แอปวางเค้าโครงเนื้อหารอบๆ รอยบากของอุปกรณ์ได้ คุณสามารถกำหนด
แอตทริบิวต์นี้ให้กับค่าใดค่าหนึ่งต่อไปนี้
LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULT
LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES
LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER
คุณสามารถจำลองหน้าจอรอยบากในอุปกรณ์หรือโปรแกรมจำลองที่ใช้ Android 9 ดังนี้
- เปิดใช้ตัวเลือกสำหรับนักพัฒนาแอป
- ในหน้าจอตัวเลือกสำหรับนักพัฒนาซอฟต์แวร์ ให้เลื่อนลงไปที่ส่วนภาพวาด และเลือกจำลองหน้าจอด้วยคัตเอาต์
- เลือกขนาดของส่วนที่ถูกตัดออก
การแจ้งเตือน
Android 9 มีการเพิ่มประสิทธิภาพการแจ้งเตือนหลายอย่าง ซึ่งทั้งหมดที่กล่าวมา พร้อมใช้งานสำหรับนักพัฒนาซอฟต์แวร์ที่กำหนดเป้าหมายเป็น API ระดับ 28 ขึ้นไป
![การแจ้งเตือนการรับส่งข้อความ](https://developer.android.google.cn/static/images/about/versions/pie/p-messaging.jpg?authuser=7&hl=th)
MessagingStyle พร้อมรูปภาพแนบอยู่
![การแจ้งเตือนการรับส่งข้อความ](https://developer.android.google.cn/static/images/about/versions/pie/p-replies.jpg?authuser=7&hl=th)
MessagingStyle ที่มีการตอบกลับและการสนทนา
สำหรับโค้ดตัวอย่างที่ใช้การแจ้งเตือน รวมถึงฟีเจอร์ของ Android 9 โปรดดู บุคคล ตัวอย่าง
ประสบการณ์การรับส่งข้อความที่ดียิ่งขึ้น
เริ่มตั้งแต่ Android 7.0 (API ระดับ 24) เป็นต้นไป คุณสามารถเพิ่มการดำเนินการเพื่อตอบกลับได้ หรือป้อนข้อความอื่นๆ จากการแจ้งเตือนโดยตรง เพิ่มประสิทธิภาพ Android 9 ฟีเจอร์นี้พร้อมการปรับปรุงดังต่อไปนี้
การรองรับผู้เข้าร่วมการสนทนาที่ง่ายขึ้น:
Person
จะใช้เพื่อระบุบุคคลที่มีส่วนเกี่ยวข้องในการสนทนา ซึ่งรวมถึง อวาตาร์และ URI API อื่นๆ อีกมากมาย เช่นaddMessage()
ก็ใช้คลาสPerson
แทนCharSequence
ได้แล้ว ชั้นเรียนPerson
ยังรองรับรูปแบบการออกแบบของเครื่องมือสร้างอีกด้วยรองรับรูปภาพ: Android 9 แสดงรูปภาพในการแจ้งเตือนการรับส่งข้อความแล้ว ในโทรศัพท์ คุณสามารถใช้
setData()
บนข้อความเพื่อแสดงรูปภาพ ข้อมูลโค้ดต่อไปนี้จะแสดงวิธีที่ เพื่อสร้างPerson
และข้อความที่มีรูปภาพ
Kotlin
// Create new Person. val sender = Person() .setName(name) .setUri(uri) .setIcon(null) .build() // Create image message. val message = Message("Picture", time, sender) .setData("image/", imageUri) val style = Notification.MessagingStyle(getUser()) .addMessage("Check this out!", 0, sender) .addMessage(message)
Java
// Create new Person. Person sender = new Person() .setName(name) .setUri(uri) .setIcon(null) .build(); // Create image message. Message message = new Message("Picture", time, sender) .setData("image/", imageUri); Notification.MessagingStyle style = new Notification.MessagingStyle(getUser()) .addMessage("Check this out!", 0, sender) .addMessage(message);
บันทึกคำตอบเป็นฉบับร่าง: แอปของคุณสามารถเรียกดู
EXTRA_REMOTE_INPUT_DRAFT
ที่ระบบส่งเมื่อผู้ใช้ปิดการแจ้งเตือนการรับส่งข้อความโดยไม่ตั้งใจ คุณสามารถใช้ส่วนเสริมนี้เพื่อเติมช่องข้อความล่วงหน้าในแอปเพื่อให้ผู้ใช้ เสร็จสิ้นการตอบกลับระบุว่าการสนทนาเป็นการสนทนากลุ่มหรือไม่: คุณสามารถใช้
setGroupConversation()
เพื่อจงใจระบุการสนทนาว่าเป็นกลุ่มหรือไม่ใช่กลุ่มตั้งค่าการทำงานเชิงความหมายสำหรับความตั้งใจ ดังนี้
setSemanticAction()
ช่วยให้คุณให้ความหมายแก่การกระทำ เช่น "ทำเครื่องหมายว่าอ่านแล้ว" "ลบ" "ตอบกลับ" เป็นต้นสมาร์ทรีพลาย: Android 9 รองรับการตอบกลับที่แนะนำแบบเดียวกับการตอบกลับที่แนะนำใน สำหรับแอปรับส่งข้อความ ใช้
RemoteInput.setChoices()
เพื่อแสดงคำตอบมาตรฐานแบบอาร์เรย์ให้แก่ผู้ใช้
การตั้งค่าช่อง การออกอากาศ และโหมดห้ามรบกวน
Android 8.0 เปิดตัวช่องทางการแจ้งเตือน ซึ่งช่วยให้คุณสามารถสร้าง ช่องทางที่ผู้ใช้กำหนดเองได้สำหรับการแจ้งเตือนแต่ละประเภทที่คุณต้องการแสดง Android 9 ลดความซับซ้อนในการตั้งค่าช่องทางการแจ้งเตือนด้วยการเปลี่ยนแปลงต่อไปนี้
การบล็อก Channel Group: ผู้ใช้สามารถบล็อกกลุ่มช่องทั้งกลุ่มได้แล้ว ในการตั้งค่าการแจ้งเตือนของแอป คุณสามารถใช้
isBlocked()
ในการระบุเมื่อกลุ่มถูกบล็อก จึงไม่มีการส่ง การแจ้งเตือนสำหรับช่องในกลุ่มนั้นนอกจากนี้ แอปยังค้นหาการตั้งค่า Channel Group ปัจจุบันได้โดยใช้ ใหม่
getNotificationChannelGroup()
ประเภทจุดประสงค์ในการออกอากาศใหม่: ตอนนี้ระบบ Android ส่ง Intent สำหรับการออกอากาศแล้ว เมื่อสถานะการบล็อกของช่องทางการแจ้งเตือนและ Channel Group เปลี่ยนแปลง แอปที่เป็นเจ้าของช่องหรือกลุ่มที่ถูกบล็อกจะฟังความตั้งใจเหล่านี้ได้ และ ตอบสนองตามนั้น หากต้องการข้อมูลเพิ่มเติมเกี่ยวกับการดำเนินการผ่าน Intent เหล่านี้ และส่วนเสริมเพิ่มเติม โปรดดูรายการค่าคงที่ที่อัปเดตแล้วใน
NotificationManager
ข้อมูลอ้างอิง ดูข้อมูลเกี่ยวกับการรีแอ็กต่อความตั้งใจในการออกอากาศได้ที่ ประกาศNotificationManager.Policy
มีหมวดหมู่ลำดับความสำคัญ "ห้ามรบกวน" ใหม่ 3 หมวดหมู่ ดังนี้PRIORITY_CATEGORY_ALARMS
จัดลำดับความสำคัญของการปลุกPRIORITY_CATEGORY_MEDIA
จัดลำดับความสำคัญของเสียงจากแหล่งที่มาของสื่อ เช่น สื่อและการนำทางด้วยเสียงPRIORITY_CATEGORY_SYSTEM
ให้ความสำคัญกับเสียงของระบบ
NotificationManager.Policy
ยังมีค่าคงที่โหมดห้ามรบกวนใหม่ 7 รายการจากคุณด้วย สามารถใช้ระงับภาพรบกวนได้ ดังนี้SUPPRESSED_EFFECT_FULL_SCREEN_INTENT
จะทำให้การแจ้งเตือนไม่เปิดกิจกรรมแบบเต็มหน้าจอSUPPRESSED_EFFECT_LIGHTS
บล็อกไฟแจ้งเตือนSUPPRESSED_EFFECT_PEEK
ป้องกันไม่ให้เลื่อนการแจ้งเตือนมาแสดงเป็นเวลาสั้นๆ ("การแสดงชั่วครู่")SUPPRESSED_EFFECT_STATUS_BAR
ป้องกันไม่ให้การแจ้งเตือนปรากฏในแถบสถานะบนอุปกรณ์ที่รองรับแถบสถานะSUPPRESSED_EFFECT_BADGE
บล็อกป้ายในอุปกรณ์ที่รองรับการติดป้าย ดูข้อมูลเพิ่มเติมได้ที่ แก้ไขป้ายการแจ้งเตือนSUPPRESSED_EFFECT_AMBIENT
บล็อกการแจ้งเตือนในอุปกรณ์ที่รองรับหน้าจอแอมเบียนท์SUPPRESSED_EFFECT_NOTIFICATION_LIST
ป้องกันไม่ให้การแจ้งเตือนปรากฏในมุมมองรายการบนอุปกรณ์ที่รองรับมุมมองรายการ เช่น หน้าต่างแจ้งเตือนหรือหน้าจอล็อก
การรองรับกล้องหลายตัวและการอัปเดตกล้อง
คุณเข้าถึงสตรีมได้ในอุปกรณ์ที่ใช้ Android 9 พร้อมกันตั้งแต่ อุปกรณ์จริงอย่างน้อย 2 ชิ้น กล้อง บนอุปกรณ์ที่มีกล้องหน้าคู่หรือกล้องหลังคู่ คุณสามารถสร้าง คุณลักษณะที่เป็นนวัตกรรมซึ่งใช้ไม่ได้กับกล้องเพียงตัวเดียว เช่น กล้องไร้รอยต่อ การซูม โบเก้ และมุมมองสเตอริโอ API ยังช่วยให้คุณเรียกใช้เชิงตรรกะหรือ Fused สตรีมจากกล้องที่สลับระหว่างกล้อง 2 ตัวขึ้นไปโดยอัตโนมัติ
การปรับปรุงอื่นๆ เกี่ยวกับกล้องรวมถึงเซสชัน พารามิเตอร์ ซึ่งช่วยลดความล่าช้าในระหว่าง การจับภาพครั้งแรก และการแชร์แพลตฟอร์มที่ช่วยให้ ไคลเอ็นต์กล้องจัดการกรณีการใช้งานต่างๆ ได้โดยไม่ต้องหยุดและเริ่มต้น สตรีมมิงจากกล้อง นอกจากนี้ เรายังได้เพิ่ม API สำหรับ Flash ที่แสดงผลด้วย การสนับสนุน และเข้าถึง OIS การประทับเวลา สำหรับระบบกันภาพสั่นและเอฟเฟกต์พิเศษระดับแอป
ใน Android 9 กล้องหลายตัว
API
รองรับกล้องโมโนโครมสำหรับอุปกรณ์ที่มี
FULL
หรือ
ความสามารถ LIMITED
เอาต์พุตแบบโมโนโครมจะทำผ่าน
YUV_420_888
ที่มี Y เป็นโทนสีเทา U (Cb) เป็น 128 และ V (Cr) เป็น 128
Android 9 ยังรองรับ USB/UVC ภายนอกด้วย กล้องเปิดอยู่ อุปกรณ์ที่รองรับ
ImageDecoder สำหรับโฆษณาที่ถอนออกได้และบิตแมป
Android 9 เปิดตัว
ImageDecoder
ซึ่งมีวิธีการถอดรหัสรูปภาพที่ทันสมัย ใช้ชั้นเรียนนี้
แทน BitmapFactory
และ BitmapFactory.Options
API
ImageDecoder
ให้คุณสร้าง
Drawable
หรือ
Bitmap
จากไบต์บัฟเฟอร์ ไฟล์
หรือ URI หากต้องการถอดรหัสรูปภาพ ให้เรียกใช้ก่อน
createSource()
พร้อมแหล่งที่มาของรูปภาพที่เข้ารหัส จากนั้นโทร
decodeDrawable()
หรือ decodeBitmap()
โดยส่ง ImageDecoder.Source
เพื่อสร้าง Drawable
หรือ Bitmap
หากต้องการเปลี่ยน
การตั้งค่าเริ่มต้น ส่ง OnHeaderDecodedListener
ไปที่
decodeDrawable()
หรือ decodeBitmap()
โทร ImageDecoder
ครั้ง
onHeaderDecoded()
ด้วยความกว้างและความสูงเริ่มต้นของภาพ เมื่อทราบค่าแล้ว
หากรูปภาพที่เข้ารหัสเป็น GIF แบบเคลื่อนไหวหรือ WebP แล้ว decodeDrawable()
จะแสดงผล
Drawable
ที่เป็นอินสแตนซ์ของ
AnimatedImageDrawable
คุณใช้วิธีต่างๆ ในการตั้งค่าคุณสมบัติของรูปภาพได้ ดังนี้
- หากต้องการปรับขนาดรูปภาพที่ถอดรหัสให้มีขนาดที่แน่นอน ให้ส่งขนาดเป้าหมายไปยัง
setTargetSize()
นอกจากนี้ คุณยังปรับขนาดรูปภาพโดยใช้ขนาดตัวอย่างได้อีกด้วย ส่งขนาดตัวอย่างไปยังsetTargetSampleSize()
- หากต้องการครอบตัดรูปภาพภายในช่วงของรูปภาพที่ปรับขนาดแล้ว ให้เรียกใช้
setCrop()
- หากต้องการสร้างบิตแมปที่เปลี่ยนแปลงได้ ให้ส่ง
true
ไปยังsetMutableRequired()
ImageDecoder
ยังให้คุณเพิ่มเอฟเฟกต์ที่กำหนดเองและซับซ้อนให้กับรูปภาพได้ด้วย
เช่น มุมโค้งมน หรือ
และมาสก์วงกลม ใช้
setPostProcessor()
ที่มีอินสแตนซ์
PostProcessor
เพื่อเรียกใช้คำสั่งการวาดที่คุณต้องการ
แอนิเมชัน
Android 9 เปิดตัว
AnimatedImageDrawable
สำหรับการวาดภาพและแสดงภาพเคลื่อนไหว GIF และ WebP
AnimatedImageDrawable
ทำงานคล้ายกับ
AnimatedVectorDrawable
ว่าชุดข้อความแสดงผลขับเคลื่อนภาพเคลื่อนไหวของ AnimatedImageDrawable
นอกจากนี้ เทรดการแสดงผลยังใช้เทรดผู้ปฏิบัติงานในการถอดรหัสเพื่อไม่ให้การถอดรหัส
รบกวนการดำเนินการอื่นๆ ในเธรดการแสดงผล การติดตั้งใช้งานนี้
แอปของคุณให้แสดงภาพเคลื่อนไหวโดยไม่ต้องจัดการการอัปเดต หรือ
การรบกวนเหตุการณ์อื่นๆ ในชุดข้อความ UI ของแอป
AnimatedImageDrawable
สามารถถอดรหัสได้โดยใช้อินสแตนซ์ของ
ImageDecoder
ดังต่อไปนี้
ข้อมูลโค้ดจะแสดงวิธีใช้ ImageDecoder
เพื่อถอดรหัส
AnimatedImageDrawable
:
Kotlin
@Throws(IOException::class) private fun decodeImage() { val decodedAnimation = ImageDecoder.decodeDrawable( ImageDecoder.createSource(resources, R.drawable.my_drawable)) // Prior to start(), the first frame is displayed. (decodedAnimation as? AnimatedImageDrawable)?.start() }
Java
private void decodeImage() throws IOException { Drawable decodedAnimation = ImageDecoder.decodeDrawable( ImageDecoder.createSource(getResources(), R.drawable.my_drawable)); if (decodedAnimation instanceof AnimatedImageDrawable) { // Prior to start(), the first frame is displayed. ((AnimatedImageDrawable) decodedAnimation).start(); } }
ImageDecoder
มีหลายวิธีที่จะช่วยให้คุณแก้ไขรูปภาพเพิ่มเติมได้
ตัวอย่างเช่น คุณสามารถใช้
setPostProcessor()
เพื่อแก้ไขรูปลักษณ์ของรูปภาพ เช่น การใช้มาสก์วงกลม หรือ
มุมโค้งมน
วิดีโอ HDR VP9, การบีบอัดรูปภาพ HEIF และ API ของสื่อ
Android 9 มีการรองรับในตัวสำหรับ High Dynamic Range (HDR) VP9 โปรไฟล์ 2 เพื่อให้คุณส่งภาพยนตร์ที่เปิดใช้ HDR ไปยังผู้ใช้ของคุณจาก YouTube, Play Movies ได้ และแหล่งที่มาอื่นๆ บนอุปกรณ์ที่รองรับ HDR
Android 9 ยังเพิ่มการรองรับการเข้ารหัสรูปภาพโดยใช้รูปภาพที่มีประสิทธิภาพสูง
รูปแบบไฟล์ (HEIF
หรือ HEIC) ซึ่งปรับปรุงการบีบอัดและลดพื้นที่เก็บข้อมูลและข้อมูลเครือข่าย
ระบบรองรับตัวอย่างภาพนิ่ง HEIF ใน
MediaMuxer
และ MediaExtractor
ใหม่ ด้วยการสนับสนุนแพลตฟอร์มบนอุปกรณ์ Android 9 จึงสามารถส่งและ
ใช้อิมเมจ HEIF จากเซิร์ฟเวอร์แบ็กเอนด์ของคุณ หลังจากตรวจสอบแล้วว่า
แอปเข้ากันได้กับรูปแบบข้อมูลนี้สำหรับการแชร์และแสดงผล ลองใช้ HEIF
เป็นรูปแบบพื้นที่เก็บข้อมูลรูปภาพในแอปของคุณ คุณสามารถแปลง jpeg เป็น heic
โดยใช้ ImageDecoder
หรือ
BitmapFactory
(ซึ่งได้รับ
บิตแมปจากไฟล์ JPEG) จากนั้นคุณสามารถใช้
HeifWriter
เพื่อเขียน HEIF
ภาพนิ่งจากบัฟเฟอร์ไบต์ YUV หรืออินสแตนซ์ของ
Surface
หรือ
Bitmap
คุณสามารถดูเมตริกสื่อได้จาก
AudioTrack
AudioRecord
และ MediaDrm
ชั้นเรียน
Android 9 แนะนำเมธอดสำหรับ
MediaDRM
คลาสสำหรับรับเมตริก, HDCP
ระดับ การรักษาความปลอดภัย และจำนวนเซสชัน และเพื่อเพิ่มการควบคุม
และการรักษาความปลอดภัย ดูความแตกต่างของ API
เพื่อดูรายละเอียด
ใน Android 9 AAudio API จะเพิ่ม
รองรับแอตทริบิวต์ AAudioStream เพิ่มเติมหลายอย่าง รวมถึงการใช้งานและเนื้อหา
ประเภท และอินพุตที่กำหนดล่วงหน้า เมื่อใช้แอตทริบิวต์เหล่านี้ คุณจะสร้างสตรีมที่
สำหรับแอปพลิเคชัน VoIP หรือกล้องวิดีโอ นอกจากนี้คุณยังตั้งรหัสเซสชันเป็น
เชื่อมโยงสตรีม AAudio กับรีมิกซ์ที่ใช้เอฟเฟกต์ได้ ใช้เมนู
AudioEffect
API ในการควบคุม
เอฟเฟกต์
Android 9 เปิดตัว
AudioEffect
API สำหรับ
การประมวลผลแบบไดนามิก
ในชั้นเรียนนี้ คุณจะสามารถสร้างเอฟเฟกต์เสียงตามช่อง เช่น
การปรับความถี่เสียงให้เหมาะสม การบีบอัดหลายย่านความถี่ และตัวจำกัดในหลายระดับ
สามารถกำหนดค่าย่านความถี่และระยะแอ็กทีฟได้ และพารามิเตอร์ส่วนใหญ่สามารถ
ควบคุมแบบเรียลไทม์
ความละเอียดอ่อนของต้นทุนข้อมูลใน JobScheduler
เริ่มตั้งแต่ Android 9 JobScheduler
สามารถใช้สัญญาณสถานะเครือข่ายที่ได้รับจากผู้ให้บริการ เพื่อปรับปรุงการจัดการ
ของงานที่เกี่ยวข้องกับเครือข่าย
งานสามารถประกาศขนาดข้อมูลโดยประมาณ ดึงข้อมูลสัญญาณล่วงหน้า และระบุ
ข้อกำหนดเครือข่ายอย่างละเอียด JobScheduler
จะจัดการงานตาม
สถานะเครือข่าย เช่น เมื่อเครือข่ายส่งสัญญาณว่ามีคนหนาแน่น
JobScheduler
อาจเลื่อนคำขอเครือข่ายขนาดใหญ่ เมื่ออยู่ใน
เครือข่ายที่ไม่มีการตรวจวัด JobScheduler
สามารถเรียกใช้การดึงข้อมูลล่วงหน้าเพื่อ
ปรับปรุงประสบการณ์ของผู้ใช้ เช่น การดึงข้อมูลบรรทัดแรกล่วงหน้า
เมื่อเพิ่มงาน ให้ใช้ setEstimatedNetworkBytes()
setPrefetch()
และ setRequiredNetwork()
ตามความเหมาะสมเพื่อช่วย
JobScheduler
จะจัดการงานได้อย่างถูกต้อง เมื่องานของคุณเสร็จสิ้น
ให้ใช้ออบเจ็กต์ Network
ส่งคืนโดย
JobParameters.getNetwork()
มิฉะนั้นคุณจะใช้เครือข่ายเริ่มต้นของอุปกรณ์โดยปริยาย
อาจไม่เป็นไปตามข้อกำหนดของคุณ ซึ่งทำให้เกิดการใช้ข้อมูลโดยไม่ได้ตั้งใจ
API เครือข่ายระบบประสาท 1.1
เปิดตัว Neural Networks API ใน Android 8.1 (API ระดับ 27) เพื่อเร่งการทำงานแมชชีนเลิร์นนิงในอุปกรณ์ Android Android 9 ขยายและปรับปรุง API โดยการเพิ่ม สนับสนุนการดำเนินการใหม่ 9 รายการ ได้แก่
- การดำเนินการทางคณิตศาสตร์ที่ฉลาดตามองค์ประกอบ:
- การดำเนินการอาร์เรย์:
ปัญหาที่ทราบแล้ว: เมื่อผ่าน
ANEURALNETWORKS_TENSOR_QUANT8_ASYMM
Tensor ไปยัง
ANEURALNETWORKS_PAD
ซึ่งพร้อมใช้งานใน Android 9 ขึ้นไป
เอาต์พุตจาก NNAPI อาจไม่ตรงกับผลลัพธ์จากเครื่องในระดับที่สูงกว่า
กรอบการเรียนรู้ เช่น
TensorFlow Lite คุณ
ควรที่จะผ่านเท่านั้น
ANEURALNETWORKS_TENSOR_FLOAT32
จนกว่าปัญหาจะได้รับการแก้ไข
นอกจากนี้ API ยังมีฟังก์ชันใหม่
ANeuralNetworksModel_relaxComputationFloat32toFloat16()
ซึ่งให้คุณระบุได้ว่าจะคำนวณ
ANEURALNETWORKS_TENSOR_FLOAT32
มีช่วงและความแม่นยำต่ำเท่ากับจุดลอยตัว 16 บิต IEEE 754
เฟรมเวิร์กการป้อนข้อความอัตโนมัติ
Android 9 เปิดตัวการปรับปรุงหลายอย่างที่ช่วยป้อนข้อความอัตโนมัติ สามารถนำไปใช้เพื่อปรับปรุงประสบการณ์ของผู้ใช้ให้ดียิ่งขึ้นเมื่อกรอกข้อมูล ดูข้อมูลเพิ่มเติมเกี่ยวกับวิธีใช้ฟีเจอร์ป้อนข้อความอัตโนมัติในแอปได้ที่ คู่มือเฟรมเวิร์กการป้อนข้อความอัตโนมัติ
การเพิ่มประสิทธิภาพด้านการรักษาความปลอดภัย
Android 9 นำเสนอคุณลักษณะด้านความปลอดภัยมากมาย ส่วนต่อไปนี้จะสรุป
Android Protected Confirmation
อุปกรณ์ที่รองรับซึ่งใช้ Android 9 ขึ้นไปจะให้ประโยชน์ ความสามารถในการใช้ Android Protected Verify เมื่อใช้เวิร์กโฟลว์นี้ แสดงข้อความแจ้งแก่ผู้ใช้ เพื่อขอให้ผู้ใช้อนุมัติข้อความสั้นๆ คำชี้แจงนี้จะช่วยให้แอปยืนยันอีกครั้งว่าผู้ใช้ต้องการดำเนินการตาม ธุรกรรมที่มีความละเอียดอ่อน เช่น การชำระเงิน
หากผู้ใช้ยอมรับข้อความดังกล่าว Android Keystore จะได้รับและจัดเก็บ
ลายเซ็นการเข้ารหัสที่มีการป้องกันด้วยการตรวจสอบสิทธิ์ข้อความแฮชแบบคีย์
(HMAC) หลังจากคีย์สโตร์ Android ยืนยันความถูกต้องของข้อความแล้ว แอปของคุณ
สามารถใช้คีย์ที่สร้างจาก trustedConfirmationRequired
ในบัญชี
สภาพแวดล้อมการดำเนินการ (TEE) เพื่อลงชื่อในข้อความที่ผู้ใช้ยอมรับ
ลายเซ็นนั้นแสดงถึงความมั่นใจสูงว่าผู้ใช้ได้เห็น
และได้ยอมรับข้อกำหนดนั้น
ข้อควรระวัง: การยืนยันการป้องกันของ Android จะไม่มี ที่ปลอดภัยสำหรับผู้ใช้ แอปของคุณไม่สามารถคาดเดาได้ การรับประกันการรักษาข้อมูลที่เป็นความลับนอกเหนือจากที่แพลตฟอร์ม Android มีให้ ใน อย่าใช้เวิร์กโฟลว์นี้ เพื่อแสดงข้อมูลที่ละเอียดอ่อนที่คุณ จะไม่แสดงในอุปกรณ์ของผู้ใช้ตามปกติ
ดูคำแนะนำในการเพิ่มการรองรับการยืนยันที่มีการป้องกันของ Android ได้ที่ ป้องกัน Android การยืนยัน
กล่องโต้ตอบการตรวจสอบสิทธิ์ด้วยข้อมูลไบโอเมตริกแบบรวม
ใน Android 9 ระบบจะให้กล่องโต้ตอบการตรวจสอบสิทธิ์ด้วยข้อมูลไบโอเมตริกแทน ของแอปของคุณ ฟังก์ชันการทำงานนี้จะสร้างรูปลักษณ์และตำแหน่งโฆษณาที่เป็นมาตรฐาน สำหรับกล่องโต้ตอบ ทำให้ผู้ใช้มั่นใจมากขึ้นว่ากำลังตรวจสอบสิทธิ์กับ เครื่องมือตรวจสอบเอกสารรับรองไบโอเมตริกที่เชื่อถือได้
หากแอปของคุณใช้
FingerprintManager
เพื่อแสดงกล่องโต้ตอบการตรวจสอบสิทธิ์ด้วยลายนิ้วมือให้ผู้ใช้เห็น ให้เปลี่ยนไปใช้
BiometricPrompt
แทน BiometricPrompt
อาศัยระบบเพื่อแสดงการตรวจสอบสิทธิ์
กล่องโต้ตอบ และยังเปลี่ยนลักษณะการทำงานเพื่อปรับให้เข้ากับประเภทข้อมูลไบโอเมตริก
ที่ผู้ใช้ได้เลือกไว้
โมดูลความปลอดภัยฮาร์ดแวร์
อุปกรณ์ที่รองรับซึ่งใช้ Android 9 ขึ้นไปติดตั้งอยู่สามารถ มี StrongBox Keymaster ซึ่งเป็นการใช้งาน Keymaster HAL ที่ จะอยู่ในโมดูลความปลอดภัยฮาร์ดแวร์ โมดูลประกอบด้วยสิ่งต่อไปนี้
- CPU ของตัวเอง
- พื้นที่เก็บข้อมูลที่ปลอดภัย
- ตัวสร้างหมายเลขสุ่มตัวจริง
- กลไกเพิ่มเติมในการป้องกันการงัดแงะแพ็กเกจและไซด์โหลดโดยไม่ได้รับอนุญาต ของแอป
เมื่อตรวจสอบคีย์ที่จัดเก็บไว้ใน StrongBox Keymaster ระบบจะยืนยัน ความสมบูรณ์ของคีย์กับสภาพแวดล้อมการดำเนินการที่เชื่อถือได้ (TEE)
ดูข้อมูลเพิ่มเติมเกี่ยวกับการใช้ Strongbox Keymaster ได้ที่หัวข้อความปลอดภัยของฮาร์ดแวร์ โมดูล
การนำเข้าคีย์ที่ปลอดภัยไปยังคีย์สโตร์
Android 9 มีการรักษาความปลอดภัยการถอดรหัสคีย์เพิ่มเติมโดยการเพิ่ม ความสามารถในการนำเข้าคีย์ที่เข้ารหัสอย่างปลอดภัยไปยัง Keystore โดยใช้ รูปแบบคีย์ที่เข้ารหัส ASN.1 จากนั้น Keymaster จะถอดรหัสคีย์ใน คีย์สโตร์ ดังนั้นเนื้อหาของคีย์จะไม่ปรากฏเป็นข้อความธรรมดาในหน่วยความจำของโฮสต์ของอุปกรณ์
ดูข้อมูลเพิ่มเติมเกี่ยวกับวิธีนําเข้าคีย์ที่เข้ารหัสเพิ่มเติม ได้อย่างปลอดภัย
รูปแบบลายเซ็น APK ที่มีการหมุนเวียนคีย์
Android 9 เพิ่มการรองรับ APK Signature Scheme v3 รูปแบบนี้มีตัวเลือก ใส่บันทึกหลักฐานแสดงการหมุนเวียนคีย์ในช่องลงชื่อสำหรับการลงชื่อแต่ละครั้ง ใบรับรอง ความสามารถนี้ช่วยให้แอปลงนามด้วยการลงนามใหม่ โดยลิงก์ใบรับรองที่มีการรับรองในอดีตของไฟล์ APK กับใบรับรองที่มี ซึ่งตอนนี้ได้เซ็นกำกับแล้ว
ดูข้อมูลเพิ่มเติมเกี่ยวกับวิธีหมุนเวียนคีย์โดยใช้
apksigner
ตัวเลือกในการอนุญาตการถอดรหัสคีย์เฉพาะในอุปกรณ์ที่ปลดล็อกแล้ว
Android 9 เริ่มใช้ Flag unlockedDeviceRequired
ตัวเลือกนี้จะกำหนด
คีย์สโตร์กำหนดให้ต้องปลดล็อกหน้าจอก่อนอนุญาตหรือไม่
การถอดรหัสข้อมูลที่อยู่ระหว่างดำเนินการหรือที่จัดเก็บไว้ด้วยคีย์ที่ระบุ ประเภทเหล่านี้
เหมาะสำหรับการเข้ารหัสข้อมูลที่ละเอียดอ่อนเพื่อจัดเก็บไว้ในดิสก์ เช่น
ข้อมูลด้านสุขภาพหรือขององค์กร ธงทำให้ผู้ใช้มั่นใจมากขึ้นว่า
ไม่สามารถถอดรหัสข้อมูลในขณะที่อุปกรณ์ล็อกอยู่ได้ในกรณีที่โทรศัพท์สูญหาย
หรือถูกขโมย
หากต้องการรักษาคีย์ให้ปลอดภัยจากการถอดรหัสในขณะที่อุปกรณ์ล็อกอยู่ ให้เปิดใช้ Flag
โดยส่ง true
ไปที่ setUnlockedDeviceRequired()
หลังจากทำขั้นตอนนี้เสร็จแล้ว เมื่อหน้าจอของผู้ใช้ล็อกอยู่
พยายามถอดรหัสหรือลงนามข้อมูลโดยใช้คีย์นี้ไม่สำเร็จ อุปกรณ์ที่ล็อกอยู่ต้องมี
PIN, รหัสผ่าน, ลายนิ้วมือ หรือปัจจัยอื่นที่เชื่อถือได้ก่อน
เข้าถึงแล้ว
การรองรับการเข้ารหัสแบบเดิม
อุปกรณ์ Android 9 ที่จัดส่งมาพร้อมกับ Keymaster 4 รองรับ Triple Data อัลกอริทึมการเข้ารหัส หรือ Triple DES หากแอปทำงานร่วมกับรุ่นเดิม ระบบที่ต้องใช้ Triple DES ให้ใช้การเข้ารหัสประเภทนี้เมื่อเข้ารหัส ข้อมูลเข้าสู่ระบบที่ละเอียดอ่อน
หากต้องการดูข้อมูลเพิ่มเติมเกี่ยวกับวิธีทำให้แอปปลอดภัยยิ่งขึ้น โปรดดูที่ความปลอดภัยสำหรับ Android นักพัฒนาซอฟต์แวร์
การเลิกใช้งาน WPS
เราเลิกใช้งานการตั้งค่าการป้องกัน Wi-Fi (WPS) เนื่องด้วยเหตุผลด้านความปลอดภัย
การสำรองข้อมูล Android
Android 9 เพิ่มฟังก์ชันใหม่และตัวเลือกสำหรับนักพัฒนาซอฟต์แวร์ที่เกี่ยวข้องกับ เพื่อสำรองและคืนค่าข้อมูล รายละเอียดเกี่ยวกับการเปลี่ยนแปลงเหล่านี้จะปรากฏใน
ข้อมูลสำรองการเข้ารหัสฝั่งไคลเอ็นต์
Android 9 เพิ่มการสนับสนุนสำหรับการเข้ารหัสข้อมูลสำรองของ Android ด้วย รหัสลับฝั่งไคลเอ็นต์ ระบบจะเปิดใช้การสนับสนุนนี้โดยอัตโนมัติในกรณีต่อไปนี้ ตรงตามเงื่อนไข:
- ผู้ใช้ได้ เปิดใช้ สำรองข้อมูลโดยใช้ Android 9 หรือสูงกว่า
- ผู้ใช้ ตั้งค่าหน้าจอ การล็อกอุปกรณ์ของตนเอง ที่ต้องใช้ PIN, รูปแบบ หรือรหัสผ่านเพื่อปลดล็อก
เมื่อเปิดใช้มาตรการความเป็นส่วนตัวนี้ PIN, รูปแบบ หรือรหัสผ่านของอุปกรณ์ ที่จำเป็นต่อการกู้คืนข้อมูลจากข้อมูลสำรองที่อุปกรณ์ของผู้ใช้สร้างขึ้น เพื่อเรียนรู้ ข้อมูลเพิ่มเติมเกี่ยวกับเทคโนโลยีที่อยู่เบื้องหลังฟีเจอร์นี้ โปรดดูห้องนิรภัยคีย์ Google Cloud ข้อมูลอย่างเป็นทางการ
กำหนดเงื่อนไขของอุปกรณ์ที่จำเป็นสำหรับการสำรองข้อมูล
หากแอปมีข้อมูลที่ละเอียดอ่อนหรือค่ากำหนด Android 9 ทำให้คุณสามารถกำหนดอุปกรณ์ ที่อยู่ภายใต้ ข้อมูลของแอปจะรวมอยู่ในข้อมูลสำรองของผู้ใช้ เช่น เมื่อฝั่งไคลเอ็นต์ เปิดใช้การเข้ารหัสหรือมีการโอนข้อมูลระหว่างอุปกรณ์ไปยังอุปกรณ์
ดูข้อมูลเพิ่มเติมเกี่ยวกับการสำรองข้อมูลในอุปกรณ์ Android ได้ที่ข้อมูล ภาพรวมการสำรองข้อมูล
การช่วยเหลือพิเศษ
Android 9 เพิ่มการปรับปรุงการช่วยเหลือพิเศษ ที่ทำให้คุณสามารถนำเสนอประสบการณ์ที่ดียิ่งขึ้นแก่ผู้ใช้ของ แอปของคุณ
อรรถศาสตร์การนำทาง
แอตทริบิวต์ที่เพิ่มใน Android 9 ทำให้คุณระบุวิธี บริการการช่วยเหลือพิเศษ โดยเฉพาะโปรแกรมอ่านหน้าจอ จะไปยังส่วนต่างๆ ของ ไปยังอีกหน้าจอหนึ่ง แอตทริบิวต์เหล่านี้สามารถช่วยผู้ใช้ที่มีความบกพร่องทางสายตาได้ ย้ายตำแหน่งข้อความใน UI ของแอปอย่างรวดเร็ว และให้ผู้ใช้ทำการเลือก
เช่น โปรแกรมอ่านหน้าจอในแอปช็อปปิ้งจะช่วยนำทางผู้ใช้ จากดีลหมวดหมู่หนึ่งไปยังดีลถัดไปได้โดยตรง โดยไม่ต้องใช้โปรแกรมอ่านหน้าจอ ต้องอ่านรายการทั้งหมดในหมวดหมู่ ก่อนที่จะไปยังรายการถัดไป
ชื่อแผงการช่วยเหลือพิเศษ
ใน Android 8.1 (API ระดับ 27) และต่ำกว่า บริการการช่วยเหลือพิเศษอาจทำไม่ได้เสมอไป ระบุเมื่อมีการอัปเดตบานหน้าต่างที่เจาะจงของหน้าจอ เช่น เมื่อกิจกรรมแทนที่ Fragment หนึ่งด้วยอีก Fragment อื่น บานหน้าต่างประกอบด้วย องค์ประกอบ UI ที่มีลักษณะเกี่ยวข้องและมีการจัดกลุ่มอย่างสมเหตุสมผล ซึ่งโดยปกติแล้วจะประกอบด้วย ส่วนย่อย
ใน Android 9 คุณจะระบุชื่อแผงการช่วยเหลือพิเศษหรือแยกทีละรายการก็ได้ ชื่อที่ระบุได้สำหรับแผงเหล่านี้ หากแผงมีชื่อแผงการช่วยเหลือพิเศษ บริการการช่วยเหลือพิเศษจะได้รับข้อมูลโดยละเอียดเพิ่มเติมเมื่อแผงมีการเปลี่ยนแปลง ความสามารถนี้ช่วยให้บริการต่างๆ ให้ข้อมูลที่ละเอียดมากขึ้นแก่ผู้ใช้ได้ เกี่ยวกับสิ่งที่เปลี่ยนแปลงไปใน UI
หากต้องการระบุชื่อของแผง ให้ใช้เมธอด
android:accessibilityPaneTitle
คุณสามารถอัปเดตชื่อของแผง UI ที่จะแทนที่
รันไทม์โดยใช้ setAccessibilityPaneTitle()
เช่น คุณอาจตั้งชื่อพื้นที่เนื้อหาของ
Fragment
การนำทางตามส่วนหัว
หากแอปของคุณแสดงเนื้อหาแบบข้อความที่มีส่วนหัวเชิงตรรกะ ให้ตั้งค่า
android:accessibilityHeading
แอตทริบิวต์เป็น true
สำหรับอินสแตนซ์ของ
View
ที่แสดงถึงส่วนหัวเหล่านั้น โดย
การเพิ่มส่วนหัวเหล่านี้แสดงว่าคุณอนุญาตให้บริการการช่วยเหลือพิเศษช่วยผู้ใช้ไปยังส่วนต่างๆ
จากหัวข้อหนึ่งไปยังหัวข้อถัดไปโดยตรง บริการช่วยเหลือพิเศษต่างๆ สามารถใช้ข้อมูลนี้
ความสามารถของผู้ใช้ ประสบการณ์การนำทางใน UI
การนำทางและเอาต์พุตของกลุ่ม
โปรแกรมอ่านหน้าจอมักใช้
android:focusable
ระบุแหล่งที่มาให้กับ
กำหนดเวลาที่ควรอ่าน
ViewGroup
หรือคอลเล็กชันของ
View
ออบเจ็กต์ เป็นหน่วยเดียว ด้วยวิธีนี้
ผู้ใช้จะได้เข้าใจว่าจำนวนการดูมีความสัมพันธ์กันอย่างสมเหตุสมผล
ใน Android 8.1 และต่ำกว่า คุณต้องทำเครื่องหมายออบเจ็กต์ View
แต่ละรายการภายใน
ViewGroup
เป็นไม่สามารถโฟกัสได้ และ ViewGroup
เองก็เป็นภาพที่โฟกัสได้ ช่วงเวลานี้
การจัดเรียงทำให้ View
บางรายการมีการทำเครื่องหมายเป็นโฟกัสได้ในลักษณะที่
ทำให้การไปยังส่วนต่างๆ ด้วยแป้นพิมพ์ยุ่งยากมากขึ้น
ใน Android 9 เป็นต้นไป คุณสามารถใช้
android:screenReaderFocusable
แทนแอตทริบิวต์ android:focusable
ในกรณีที่
การทำให้ออบเจ็กต์ View
โฟกัสได้จะมีผลที่ไม่พึงประสงค์ โปรแกรมอ่านหน้าจอ
โฟกัสที่องค์ประกอบทั้งหมดที่ตั้งค่า android:screenReaderFocusable
หรือ android:focusable
ไปยัง true
การดำเนินการตามสะดวก
Android 9 เพิ่มการรองรับการดำเนินการที่สะดวกสบายในนามของผู้ใช้ ดังนี้
- การโต้ตอบกับเคล็ดลับเครื่องมือ
- ฟีเจอร์ที่เพิ่มเข้ามาในเฟรมเวิร์กการช่วยเหลือพิเศษช่วยให้คุณเข้าถึง
เคล็ดลับเครื่องมือใน UI ของแอป ใช้
getTooltipText()
เพื่ออ่านข้อความของเคล็ดลับเครื่องมือ และใช้ACTION_SHOW_TOOLTIP
และACTION_HIDE_TOOLTIP
เพื่อสั่งให้View
แสดงหรือ ซ่อนเคล็ดลับเครื่องมือ - การดำเนินการส่วนกลางที่เพิ่มแล้ว
- Android 9 เพิ่มการรองรับการดำเนินการเพิ่มเติม 2 อย่างของอุปกรณ์ใน
AccessibilityService
บริการของคุณช่วยให้ผู้ใช้ล็อกอุปกรณ์และถ่ายภาพหน้าจอได้ โดยใช้GLOBAL_ACTION_LOCK_SCREEN
และGLOBAL_ACTION_TAKE_SCREENSHOT
การดำเนินการตามลำดับ
รายละเอียดการเปลี่ยนแปลงหน้าต่าง
Android 9 ช่วยให้ติดตามการอัปเดตหน้าต่างของแอปได้ง่ายขึ้นเมื่อแอป
วาดหลายหน้าต่างพร้อมกัน เมื่อ
TYPE_WINDOWS_CHANGED
เกิดเหตุการณ์ ให้ใช้
getWindowChanges()
API เพื่อพิจารณาว่าหน้าต่างเปลี่ยนแปลงไปอย่างไร ในระหว่างการอัปเดตหลายหน้าต่าง
จะสร้างชุดเหตุการณ์ของตัวเอง
getSource()
จะแสดงมุมมองรูทของหน้าต่างที่เชื่อมโยงกับแต่ละเหตุการณ์
หากแอปกำหนดชื่อแผงการช่วยเหลือพิเศษไว้
ออบเจ็กต์ View
บริการของคุณจดจำได้
เมื่อ UI ของแอปได้รับการอัปเดต เมื่อ
TYPE_WINDOW_STATE_CHANGED
เกิดเหตุการณ์ ให้ใช้ประเภทที่แสดงผลโดย
getContentChangeTypes()
เพื่อดูว่าหน้าต่างเปลี่ยนแปลงไปอย่างไร ตัวอย่างเช่น เฟรมเวิร์กนี้สามารถ
ตรวจจับเมื่อแผงมีชื่อใหม่หรือเมื่อแผงหายไป
การหมุน
เราได้เพิ่มโหมดที่ตรึง การวางแนวแม้ว่าตำแหน่งของอุปกรณ์จะเปลี่ยนไปก็ตาม ผู้ใช้สามารถเรียกใช้การหมุน ด้วยตนเองเมื่อจำเป็น โดยกดปุ่มในแถบระบบ
ในกรณีส่วนใหญ่ ผลกระทบต่อความเข้ากันได้ของแอปจะน้อยมาก อย่างไรก็ตาม หาก แอปมีลักษณะการทำงานในการหมุนที่กำหนดเองหรือใช้การวางแนวหน้าจอที่ผิดปกติ คุณอาจพบปัญหาที่อาจไม่เคยสังเกตมาก่อนได้ มีการตั้งค่ากำหนดการหมุนเวียนผู้ใช้เป็นแนวตั้งเสมอ เราขอแนะนำให้คุณศึกษา ให้ดูลักษณะการหมุนเวียนในกิจกรรมหลักทั้งหมดของแอปและ ตรวจดูว่าการตั้งค่าการวางแนวหน้าจอทั้งหมดของคุณยังคง ประสบการณ์ที่ดีที่สุด
โปรดดูรายละเอียดเพิ่มเติมที่หัวข้อลักษณะการทำงานที่เกี่ยวข้อง การเปลี่ยนแปลง
![การหมุนอุปกรณ์เคลื่อนที่แสดงให้เห็นโหมดการหมุนใหม่ ซึ่งให้ผู้ใช้เรียกใช้การหมุนด้วยตนเอง](https://developer.android.google.cn/static/images/about/versions/pie/rotate-changes.gif?authuser=7&hl=th)
โหมดการหมุนใหม่ช่วยให้ผู้ใช้เรียกใช้การหมุนด้วยตนเองเมื่อจำเป็นโดยใช้ปุ่มในแถบระบบ
ข้อความ
Android 9 มีฟีเจอร์ที่เกี่ยวข้องกับข้อความดังต่อไปนี้ แพลตฟอร์ม:
ข้อความที่คำนวณไว้ล่วงหน้า: ชั้นเรียน
PrecomputedText
ปรับปรุง ประสิทธิภาพการแสดงผลข้อความโดยทำให้คุณสามารถคำนวณและแคช ข้อมูลล่วงหน้า และยังช่วยให้แอปปิดเลย์เอาต์ข้อความได้ด้วย เทรดหลักแว่นขยาย: คลาส
Magnifier
คือ วิดเจ็ตแพลตฟอร์มที่ให้ API แว่นขยาย ช่วยให้มีความสอดคล้องกัน ฟีเจอร์แว่นขยายในทุกแอปSmart Linkify: Android 9 ช่วยปรับปรุง
TextClassifier
ชั้นเรียน ซึ่งใช้ประโยชน์จากแมชชีนเลิร์นนิงในการระบุเอนทิตีบางส่วนในข้อความที่เลือกและ แนะนำการดำเนินการ ตัวอย่างเช่นTextClassifier
สามารถเปิดให้แอปของคุณตรวจหา ที่ผู้ใช้ได้เลือกหมายเลขโทรศัพท์ จากนั้น แอปของคุณสามารถแนะนำว่า ผู้ใช้โทรออกโดยใช้หมายเลขนั้น ฟีเจอร์ในTextClassifier
แทนที่ฟังก์ชันการทำงานของคลาสLinkify
เลย์เอาต์ข้อความ: มีวิธีการและแอตทริบิวต์ต่างๆ มากมายที่ช่วยให้ ออกแบบ UI ของคุณ โปรดดูรายละเอียดใน เอกสารอ้างอิง สำหรับ
TextView
การแปลงไฟล์ DEX ก่อนเวลา ART
รันไทม์ของ Android ในอุปกรณ์ที่ใช้ Android 9 ขึ้นไป (ART) คอมไพเลอร์ล่วงหน้าช่วยเพิ่มประสิทธิภาพให้ Dalvik Executable ที่บีบอัด (DEX) ได้โดยแปลงไฟล์ DEX ในแพ็กเกจแอปให้เป็น ที่กระชับได้ใจความ การเปลี่ยนแปลงนี้จะช่วยให้แอปเริ่มทำงานเร็วขึ้นและใช้งานได้เร็วยิ่งขึ้น และ RAM ก็น้อยลงด้วย
การปรับปรุงนี้จะเป็นประโยชน์อย่างยิ่งสำหรับอุปกรณ์ระดับโลว์เอนด์ที่มี I/O ดิสก์ที่ช้า เร็ว
การติดตามระบบในอุปกรณ์
Android 9 ให้คุณบันทึกการติดตามของระบบจากอุปกรณ์ของคุณ จากนั้นแชร์รายงานเกี่ยวกับไฟล์บันทึกเหล่านี้กับทีมพัฒนาของคุณ รายงานนี้ รองรับหลายรูปแบบ รวมทั้ง HTML ด้วย
การรวบรวมการติดตามเหล่านี้ช่วยให้คุณบันทึกข้อมูลเวลาที่เกี่ยวข้องกับแอปของคุณ กระบวนการและชุดข้อความ ตลอดจนดูอุปกรณ์ประเภทอื่นๆ ที่มีความสำคัญทั่วโลก รัฐ
ดูข้อมูลเพิ่มเติมเกี่ยวกับเครื่องมือนี้ได้ที่ใช้งานระบบในอุปกรณ์ การติดตาม