ฟีเจอร์และ API ของ Android 9

Android 9 (API ระดับ 28) เปิดตัวฟีเจอร์และความสามารถใหม่ๆ ที่ยอดเยี่ยมสำหรับ ผู้ใช้และนักพัฒนาแอป เอกสารนี้จะเน้นสิ่งที่ใหม่สำหรับนักพัฒนาแอป

ดูข้อมูลเกี่ยวกับ API ใหม่ได้ในรายงานความแตกต่างของ API หรือไปที่ข้อมูลอ้างอิง API ของ Android นอกจากนี้ อย่าลืมดูการเปลี่ยนแปลงลักษณะการทำงานใน Android 9 เพื่อดูข้อมูล เกี่ยวกับส่วนต่างๆ ที่การเปลี่ยนแปลงแพลตฟอร์มอาจส่งผลต่อแอปของคุณ

การกำหนดตำแหน่งในอาคารด้วย Wi-Fi RTT

API RTT ใหม่รองรับการกำหนดตำแหน่งในอาคารในแอป

Android 9 เพิ่มการรองรับแพลตฟอร์มสำหรับโปรโตคอล Wi-Fi IEEE 802.11-2016 หรือที่เรียกว่า Wi-Fi Round-Trip-Time (RTT) เพื่อให้คุณใช้ประโยชน์ จากการกำหนดตำแหน่งในอาคารในแอปได้

ในอุปกรณ์ที่ใช้ Android 9 ที่รองรับฮาร์ดแวร์ แอปจะใช้ RTT API เพื่อวัด ระยะทางไปยังจุดเข้าถึง (AP) Wi-Fi ที่รองรับ RTT ซึ่งอยู่ใกล้เคียงได้ อุปกรณ์ต้องเปิดใช้บริการตำแหน่งและเปิดการสแกน Wi-Fi (ในส่วนการตั้งค่า > ตำแหน่ง) และแอปของคุณต้องมีสิทธิ์ ACCESS_FINE_LOCATION อุปกรณ์ไม่จำเป็นต้องเชื่อมต่อกับจุดเข้าใช้งานเพื่อใช้ RTT เพื่อรักษาความเป็นส่วนตัว มีเพียงโทรศัพท์เท่านั้นที่สามารถกำหนดระยะห่างจาก จุดเข้าถึงได้ ส่วนจุดเข้าถึงจะไม่มีข้อมูลนี้

หากอุปกรณ์วัดระยะทางไปยังจุดเข้าถึง 3 จุดขึ้นไป คุณจะใช้อัลกอริทึม การหาตำแหน่งจากจุดหลายจุดเพื่อประมาณตำแหน่งอุปกรณ์ที่เหมาะสมที่สุดกับการวัดเหล่านั้นได้ โดยปกติแล้ว ผลลัพธ์จะมีความแม่นยำภายใน 1-2 เมตร

ความแม่นยำนี้ช่วยให้คุณสร้างประสบการณ์ใหม่ๆ ได้ เช่น การนำทางในอาคาร และบริการที่อิงตามตำแหน่งแบบละเอียด เช่น การควบคุมด้วยเสียงที่แยกความแตกต่างได้ (เช่น "เปิดไฟดวงนี้") และข้อมูลตามตำแหน่ง (เช่น "ผลิตภัณฑ์นี้มีข้อเสนอพิเศษไหม")

ดูการใช้งาน WiFi RTT API ในแอปเดโม Android WifiRttScan

ดูข้อมูลเพิ่มเติมได้ที่ ตำแหน่งของ Wi-Fi: การวัดระยะด้วย RTT

รองรับหน้าจอรอยบาก

หน้าจอตัวเลือกสำหรับนักพัฒนาแอปที่แสดงขนาดรอยบากต่างๆ

การทดสอบรอยบากบนจอแสดงผลโดยใช้โปรแกรมจำลอง

Android 9 รองรับหน้าจอแบบไร้ขอบรุ่นล่าสุด ที่มีรอยบากสำหรับกล้องและลำโพง คลาส DisplayCutout ช่วยให้คุณทราบตำแหน่งและรูปร่างของพื้นที่ที่ใช้งานไม่ได้ซึ่งไม่ควรแสดงเนื้อหา หากต้องการพิจารณาว่ามีพื้นที่คัตเอาต์เหล่านี้หรือไม่และอยู่ที่ใด ให้ใช้วิธีgetDisplayCutout()

แอตทริบิวต์เลย์เอาต์หน้าต่างใหม่ layoutInDisplayCutoutMode ช่วยให้แอปจัดวางเนื้อหาโดยรอบรอยบากของอุปกรณ์ได้ คุณตั้งค่าแอตทริบิวต์นี้เป็นค่าใดค่าหนึ่งต่อไปนี้ได้

คุณจำลองรอยบากบนหน้าจอในอุปกรณ์หรือโปรแกรมจำลองที่ใช้ Android 9 ได้โดยทำดังนี้

  1. เปิดใช้ตัวเลือกสำหรับนักพัฒนาแอป
  2. ในหน้าจอตัวเลือกสำหรับนักพัฒนาซอฟต์แวร์ ให้เลื่อนลงไปที่ส่วนการวาด แล้วเลือกจำลองจอแสดงผลที่มีรอยบาก
  3. เลือกขนาดของภาพที่ตัดออก

การแจ้งเตือน

Android 9 มีการปรับปรุงการแจ้งเตือนหลายอย่าง ซึ่งทั้งหมดนี้พร้อมให้บริการแก่นักพัฒนาแอปที่กำหนดเป้าหมายเป็น API ระดับ 28 ขึ้นไป

การแจ้งเตือนการรับส่งข้อความ

MessagingStyle ที่มีรูปภาพแนบ

การแจ้งเตือนการรับส่งข้อความ

MessagingStyle พร้อมการตอบกลับและการสนทนา

ดูโค้ดตัวอย่างที่ใช้การแจ้งเตือน รวมถึงฟีเจอร์ของ Android 9 ได้ที่ ตัวอย่าง ผู้ใช้

ประสบการณ์การรับส่งข้อความที่ดียิ่งขึ้น

เริ่มตั้งแต่ Android 7.0 (API ระดับ 24) เป็นต้นไป คุณจะเพิ่มการทำงานเพื่อตอบกลับข้อความหรือป้อนข้อความอื่นๆ จากการแจ้งเตือนโดยตรงได้อีกด้วย Android 9 ได้ปรับปรุงฟีเจอร์นี้ด้วยการปรับปรุงต่อไปนี้

  • การรองรับผู้เข้าร่วมการสนทนาที่ง่ายขึ้น: ใช้คลาส Person เพื่อระบุผู้ที่เกี่ยวข้องในการสนทนา รวมถึงอวาตาร์และ URI ของผู้เข้าร่วม API อื่นๆ อีกมากมาย เช่น addMessage() ตอนนี้ใช้คลาส Person แทน CharSequence คลาส Person ยังรองรับรูปแบบการออกแบบ Builder ด้วย

  • รองรับรูปภาพ: ตอนนี้ 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() เพื่อระบุการสนทนาเป็นการสนทนากลุ่มหรือไม่ใช่การสนทนากลุ่มได้

  • ตั้งค่าการดำเนินการเชิงความหมายสำหรับ Intent: เมธอด setSemanticAction() ช่วยให้คุณกำหนดความหมายเชิงความหมายให้กับการดำเนินการได้ เช่น "ทำเครื่องหมายว่าอ่านแล้ว" "ลบ" "ตอบกลับ" และอื่นๆ

  • การตอบกลับอัจฉริยะ: Android 9 รองรับคำตอบที่แนะนำแบบเดียวกันกับที่มีในแอปส่งข้อความ ใช้ RemoteInput.setChoices() เพื่อระบุอาร์เรย์ของการตอบกลับมาตรฐานให้แก่ผู้ใช้

การตั้งค่าช่อง การออกอากาศ และโหมดห้ามรบกวน

Android 8.0 ได้เปิดตัวช่องทางการแจ้งเตือน ซึ่งช่วยให้คุณสร้างช่องที่ผู้ใช้ปรับแต่งได้สำหรับการแจ้งเตือนแต่ละประเภทที่ต้องการแสดง Android 9 ทำให้การตั้งค่าแชแนลการแจ้งเตือนง่ายขึ้นด้วยการเปลี่ยนแปลงต่อไปนี้

  • การบล็อก Channel Group: ตอนนี้ผู้ใช้สามารถบล็อกกลุ่มช่องทั้งหมด ในการตั้งค่าการแจ้งเตือนของแอปได้แล้ว คุณสามารถใช้เมธอด isBlocked() เพื่อระบุเมื่อมีการบล็อกกลุ่ม และด้วยเหตุนี้ ระบบจะไม่ส่ง การแจ้งเตือนสำหรับช่องในกลุ่มนั้น

    นอกจากนี้ แอปยังสามารถค้นหาการตั้งค่ากลุ่มแชแนลปัจจุบันได้โดยใช้เมธอด getNotificationChannelGroup() ใหม่

  • ประเภท Intent การออกอากาศใหม่: ตอนนี้ระบบ Android จะส่ง Intent การออกอากาศ เมื่อมีการเปลี่ยนแปลงสถานะการบล็อกของแชแนลการแจ้งเตือนและกลุ่มแชแนล แอปที่เป็นเจ้าของช่องหรือกลุ่มที่ถูกบล็อกสามารถรอรับ Intent เหล่านี้และ ตอบสนองตามนั้นได้ ดูข้อมูลเพิ่มเติมเกี่ยวกับการดำเนินการตามความตั้งใจและส่วนเสริมเหล่านี้ได้ในรายการค่าคงที่ที่อัปเดตแล้วในเอกสารอ้างอิงของ NotificationManager ดูข้อมูลเกี่ยวกับการตอบสนองต่อ Intent การออกอากาศได้ที่ การออกอากาศ

  • 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 ยังให้คุณเรียกสตรีมกล้องแบบตรรกะหรือแบบรวม ซึ่งจะสลับระหว่างกล้อง 2 ตัวขึ้นไปโดยอัตโนมัติได้ด้วย

การปรับปรุงอื่นๆ ในกล้อง ได้แก่ พารามิเตอร์ เซสชัน เพิ่มเติมที่จะช่วยลดความล่าช้าระหว่างการจับภาพครั้งแรก และการแชร์พื้นผิวที่ช่วยให้ ไคลเอ็นต์กล้องจัดการ Use Case ต่างๆ ได้โดยไม่ต้องหยุดและเริ่ม การสตรีมกล้อง นอกจากนี้ เรายังเพิ่ม API สำหรับการรองรับ แฟลชที่อิงตามจอแสดงผล และสิทธิ์เข้าถึงการประทับเวลา OIS สำหรับการป้องกันภาพสั่นและเอฟเฟกต์พิเศษระดับแอป

ใน Android 9 API ของกล้องหลายตัว รองรับกล้องขาวดำสำหรับอุปกรณ์ที่มี FULL หรือ LIMITED เอาต์พุตขาวดำทำได้ผ่านรูปแบบ YUV_420_888 โดยมี Y เป็นระดับสีเทา, U (Cb) เป็น 128 และ V (Cr) เป็น 128

Android 9 ยังรองรับกล้อง USB/UVC ภายนอกในอุปกรณ์ที่รองรับด้วย

ImageDecoder สำหรับ Drawable และบิตแมป

Android 9 เปิดตัวคลาส ImageDecoder ซึ่งเป็นแนวทางที่ทันสมัยในการถอดรหัสรูปภาพ ใช้คลาสนี้ แทน API BitmapFactory และ BitmapFactory.Options

ImageDecoder ช่วยให้คุณสร้าง Drawable หรือ Bitmap จากบัฟเฟอร์ไบต์ ไฟล์ หรือ URI ได้ หากต้องการถอดรหัสรูปภาพ ให้เรียกใช้ createSource() ก่อนโดยใช้แหล่งที่มาของรูปภาพที่เข้ารหัส จากนั้นเรียกใช้ decodeDrawable() หรือ decodeBitmap() โดยส่งออบเจ็กต์ ImageDecoder.Source เพื่อสร้าง Drawable หรือ Bitmap หากต้องการเปลี่ยน การตั้งค่าเริ่มต้น ให้ส่ง OnHeaderDecodedListener ไปยัง decodeDrawable() หรือ decodeBitmap() ImageDecoder calls onHeaderDecoded() โดยใช้ความกว้างและความสูงเริ่มต้นของรูปภาพเมื่อทราบแล้ว หากรูปภาพที่เข้ารหัสเป็น GIF หรือ WebP แบบเคลื่อนไหว decodeDrawable() จะแสดงผล Drawable ซึ่งเป็นอินสแตนซ์ของคลาส AnimatedImageDrawable

คุณใช้วิธีต่างๆ เพื่อตั้งค่าพร็อพเพอร์ตี้รูปภาพได้ดังนี้

  • หากต้องการปรับขนาดรูปภาพที่ถอดรหัสแล้วให้มีขนาดที่แน่นอน ให้ส่งมิติข้อมูลเป้าหมายไปยัง setTargetSize() นอกจากนี้ คุณยังปรับขนาดรูปภาพได้โดยใช้ขนาดตัวอย่าง ส่งขนาดตัวอย่างไปยัง setTargetSampleSize() โดยตรง
  • หากต้องการครอบตัดรูปภาพภายในช่วงของรูปภาพที่ปรับขนาดแล้ว ให้เรียกใช้ setCrop()
  • หากต้องการสร้างบิตแมปที่เปลี่ยนแปลงได้ ให้ส่ง true ไปยัง setMutableRequired()

ImageDecoder ยังช่วยให้คุณเพิ่มเอฟเฟกต์ที่ซับซ้อนและกำหนดเองลงในรูปภาพได้ด้วย เช่น มุมโค้งหรือ มาสก์วงกลม ใช้ setPostProcessor() กับอินสแตนซ์ของคลาส PostProcessor เพื่อเรียกใช้คำสั่งวาดภาพที่คุณต้องการ

แอนิเมชัน

Android 9 เปิดตัวคลาส AnimatedImageDrawable สำหรับการวาดและแสดงรูปภาพเคลื่อนไหว GIF และ WebP AnimatedImageDrawable ทำงานคล้ายกับ AnimatedVectorDrawable ตรงที่เธรดการแสดงผลจะขับเคลื่อนภาพเคลื่อนไหวของ AnimatedImageDrawable เธรดการแสดงผลยังใช้เธรด Worker เพื่อถอดรหัสด้วย เพื่อให้การถอดรหัสไม่ รบกวนการดำเนินการอื่นๆ ในเธรดการแสดงผล การติดตั้งใช้งานนี้ช่วยให้ แอปแสดงรูปภาพเคลื่อนไหวได้โดยไม่ต้องจัดการการอัปเดตหรือ รบกวนเหตุการณ์อื่นๆ ในเทรด 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 และ Media 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 กับมิกซ์ย่อยที่มีเอฟเฟกต์ได้ด้วย ใช้ API ของ AudioEffect เพื่อควบคุมเอฟเฟกต์

Android 9 เปิดตัว API AudioEffect สำหรับการประมวลผลไดนามิก คลาสนี้ช่วยให้คุณสร้างเอฟเฟกต์เสียงตามช่องได้ ซึ่งรวมถึง การปรับสมดุล การบีบอัดแบบหลายแถบ และลิมิตเตอร์ ในหลายๆ ขั้นตอน คุณกำหนดค่าจำนวนวงดนตรีและเวทีที่ใช้งานอยู่ได้ และควบคุมพารามิเตอร์ส่วนใหญ่ได้แบบเรียลไทม์

ความละเอียดอ่อนของค่าใช้จ่ายในการรับส่งข้อมูลใน JobScheduler

ตั้งแต่ Android 9 เป็นต้นไป JobScheduler สามารถใช้สัญญาณสถานะเครือข่ายที่ผู้ให้บริการระบุเพื่อปรับปรุงการจัดการ งานที่เกี่ยวข้องกับเครือข่าย

โดยงานจะประกาศขนาดข้อมูลโดยประมาณ ส่งสัญญาณการดึงข้อมูลล่วงหน้า และระบุ ข้อกำหนดของเครือข่ายโดยละเอียดได้ JobScheduler จากนั้นจะจัดการงานตาม สถานะเครือข่าย เช่น เมื่อเครือข่ายส่งสัญญาณว่ามีการรับส่งข้อมูลหนาแน่น JobScheduler อาจเลื่อนคำขอของเครือข่ายขนาดใหญ่ เมื่ออยู่ในเครือข่ายที่ไม่ได้จำกัดปริมาณการใช้งาน JobScheduler จะเรียกใช้การดึงข้อมูลล่วงหน้าเพื่อปรับปรุงประสบการณ์ของผู้ใช้ เช่น การดึงข้อมูลพาดหัวข่าวล่วงหน้า

เมื่อเพิ่มงาน โปรดใช้ setEstimatedNetworkBytes() setPrefetch() และ setRequiredNetwork() ตามความเหมาะสมเพื่อช่วยให้ JobScheduler จัดการงานได้อย่างถูกต้อง เมื่อเรียกใช้งานงาน โปรดใช้ออบเจ็กต์ Network ที่ส่งคืนโดย JobParameters.getNetwork() มิเช่นนั้น คุณจะใช้เครือข่ายเริ่มต้นของอุปกรณ์โดยปริยาย ซึ่งอาจไม่ตรงตามข้อกำหนดของคุณ ทำให้มีการใช้ข้อมูลโดยไม่ตั้งใจ

Neural Networks API 1.1

Neural Networks API เปิดตัวใน Android 8.1 (API ระดับ 27) เพื่อเร่งแมชชีนเลิร์นนิงในอุปกรณ์บน Android Android 9 ได้ขยายและปรับปรุง API โดยเพิ่ม การรองรับการดำเนินการใหม่ 9 รายการ ดังนี้

ปัญหาที่ทราบ: เมื่อส่งผ่าน ANEURALNETWORKS_TENSOR_QUANT8_ASYMM เทนเซอร์ไปยังการดำเนินการ 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 ได้ เมื่อใช้เวิร์กโฟลว์นี้ แอปจะแสดงข้อความแจ้งต่อผู้ใช้เพื่อขอให้ผู้ใช้รับรองข้อความสั้นๆ คำสั่งนี้ช่วยให้แอปยืนยันได้ว่าผู้ใช้ต้องการทำธุรกรรมที่มีความละเอียดอ่อน เช่น การชำระเงิน ให้เสร็จสมบูรณ์

หากผู้ใช้ยอมรับข้อความดังกล่าว Android Keystore จะรับและจัดเก็บ ลายเซ็นการเข้ารหัสที่ได้รับการปกป้องโดยรหัสการตรวจสอบสิทธิ์ข้อความแฮชที่มีคีย์ (HMAC) หลังจากที่ Android Keystore ยืนยันความถูกต้องของข้อความแล้ว แอปของคุณ จะใช้คีย์ที่สร้างจาก trustedConfirmationRequired ในสภาพแวดล้อมการดำเนินการที่เชื่อถือได้ (TEE) เพื่อลงนามในข้อความที่ผู้ใช้ยอมรับได้ ลายเซ็นระบุด้วยความมั่นใจสูงมากว่าผู้ใช้ได้เห็น ข้อความและยอมรับข้อความดังกล่าว

ข้อควรระวัง: การยืนยันที่ได้รับการปกป้องของ Android ไม่ได้ให้ ช่องทางข้อมูลที่ปลอดภัยสำหรับผู้ใช้ แอปของคุณไม่สามารถถือว่ามีการรับประกันความลับใดๆ นอกเหนือจากที่แพลตฟอร์ม Android มีให้ โดยเฉพาะอย่างยิ่ง อย่าใช้เวิร์กโฟลว์นี้เพื่อแสดงข้อมูลที่ละเอียดอ่อนซึ่งคุณ จะไม่แสดงในอุปกรณ์ของผู้ใช้ตามปกติ

ดูคำแนะนำเกี่ยวกับการเพิ่มการรองรับการยืนยันที่ได้รับการปกป้องของ Android ได้ที่คู่มือการยืนยันที่ได้รับการปกป้องของ Android

กล่องโต้ตอบการตรวจสอบสิทธิ์ด้วยข้อมูลไบโอเมตริกแบบรวม

ใน Android 9 ระบบจะแสดงกล่องโต้ตอบการตรวจสอบสิทธิ์ข้อมูลไบโอเมตริกในนามของแอป ฟังก์ชันนี้จะสร้างรูปลักษณ์ ความรู้สึก และตำแหน่งที่ได้มาตรฐานสำหรับกล่องโต้ตอบ ซึ่งจะช่วยให้ผู้ใช้มั่นใจมากขึ้นว่าตนกำลังตรวจสอบสิทธิ์กับเครื่องมือตรวจสอบข้อมูลเข้าสู่ระบบไบโอเมตริกที่เชื่อถือได้

หากแอปของคุณใช้ FingerprintManager เพื่อแสดงกล่องโต้ตอบการตรวจสอบสิทธิ์ด้วยลายนิ้วมือต่อผู้ใช้ ให้เปลี่ยนไปใช้ BiometricPrompt แทน BiometricPrompt อาศัยระบบในการแสดงกล่องโต้ตอบการตรวจสอบสิทธิ์ นอกจากนี้ยังเปลี่ยนลักษณะการทำงานเพื่อปรับให้เข้ากับประเภทการตรวจสอบสิทธิ์ด้วยไบโอเมตริก ที่ผู้ใช้เลือกด้วย

โมดูลความปลอดภัยของฮาร์ดแวร์

อุปกรณ์ที่รองรับซึ่งใช้ Android 9 ขึ้นไปที่ติดตั้งไว้จะมี KeyMint (เดิมคือ Keymaster) ของ StrongBox ซึ่งเป็นการติดตั้งใช้งาน KeyMint (เดิมคือ Keymaster) HAL ที่อยู่ในโมดูลความปลอดภัยของฮาร์ดแวร์ โมดูลมีองค์ประกอบดังนี้

  • CPU ของตัวเอง
  • พื้นที่เก็บข้อมูลที่ปลอดภัย
  • ตัวสร้างหมายเลขแบบสุ่มที่แท้จริง
  • กลไกเพิ่มเติมเพื่อป้องกันการดัดแปลงแพ็กเกจและการโหลดแอปจากแหล่งที่ไม่รู้จักโดยไม่ได้รับอนุญาต

เมื่อตรวจสอบคีย์ที่จัดเก็บไว้ใน KeyMint ของ StrongBox ระบบจะยืนยันความสมบูรณ์ของคีย์กับ Trusted Execution Environment (TEE)

ดูข้อมูลเพิ่มเติมเกี่ยวกับการใช้ StrongBox KeyMint ได้ที่โมดูลความปลอดภัยของฮาร์ดแวร์

นำเข้าคีย์ไปยังคีย์สโตร์อย่างปลอดภัย

Android 9 เพิ่มความปลอดภัยในการถอดรหัสคีย์โดยเพิ่มความสามารถในการนำเข้าคีย์ที่เข้ารหัสอย่างปลอดภัยไปยังที่เก็บคีย์โดยใช้รูปแบบคีย์ที่เข้ารหัส ASN.1 จากนั้น KeyMint จะถอดรหัสคีย์ใน ที่เก็บคีย์ เพื่อให้เนื้อหาของคีย์ไม่ปรากฏเป็นข้อความธรรมดาในหน่วยความจำโฮสต์ของอุปกรณ์

ดูข้อมูลเพิ่มเติมเกี่ยวกับวิธีนำเข้าคีย์ที่เข้ารหัสอย่างปลอดภัยยิ่งขึ้น

APK Signature Scheme ที่มีการหมุนเวียนคีย์

Android 9 เพิ่มการรองรับ APK Signature Scheme v3 โดยรูปแบบนี้มีตัวเลือก ในการรวมระเบียนการพิสูจน์การหมุนเวียนไว้ในบล็อกการลงนามสำหรับใบรับรองการลงนามแต่ละรายการ ความสามารถนี้ช่วยให้แอปของคุณได้รับการลงนามด้วยใบรับรองการลงนามใหม่โดยการลิงก์ใบรับรองการลงนามที่ผ่านมาของไฟล์ APK กับใบรับรองที่ใช้ลงนามในปัจจุบัน

ดูข้อมูลเพิ่มเติมเกี่ยวกับวิธีหมุนเวียนคีย์โดยใช้ apksigner

ตัวเลือกในการอนุญาตให้ถอดรหัสคีย์ในอุปกรณ์ที่ปลดล็อกแล้วเท่านั้น

Android 9 เปิดตัวunlockedDeviceRequiredแฟล็ก ตัวเลือกนี้จะกำหนดว่า Keystore ต้องปลดล็อกหน้าจอก่อนจึงจะอนุญาต ให้ถอดรหัสข้อมูลที่กำลังรับส่งหรือจัดเก็บโดยใช้คีย์ที่ระบุหรือไม่ คีย์ประเภทนี้เหมาะสำหรับการเข้ารหัสข้อมูลที่ละเอียดอ่อนเพื่อจัดเก็บไว้ในดิสก์ เช่น ข้อมูลด้านสุขภาพหรือข้อมูลขององค์กร โดยแฟล็กนี้จะช่วยให้ผู้ใช้มั่นใจได้มากขึ้นว่าระบบจะไม่สามารถถอดรหัสข้อมูลได้ในขณะที่อุปกรณ์ล็อกอยู่ ในกรณีที่โทรศัพท์สูญหายหรือถูกขโมย

หากต้องการเก็บคีย์ให้ปลอดภัยจากการถอดรหัสขณะที่อุปกรณ์ล็อกอยู่ ให้เปิดใช้ Flag โดยส่ง true ไปยังเมธอด setUnlockedDeviceRequired() หลังจากทำขั้นตอนนี้เสร็จแล้ว เมื่อหน้าจอของผู้ใช้ล็อกอยู่ ความพยายามใดๆ ในการถอดรหัสหรือลงนามในข้อมูลโดยใช้คีย์นี้จะล้มเหลว อุปกรณ์ที่ล็อกจะต้องใช้ PIN, รหัสผ่าน, ลายนิ้วมือ หรือปัจจัยที่เชื่อถือได้อื่นๆ ก่อนจึงจะ เข้าถึงได้

การรองรับการเข้ารหัสเวอร์ชันเดิม

อุปกรณ์ Android 9 ที่จัดส่งพร้อม Keymaster 4 รองรับอัลกอริทึมการเข้ารหัสข้อมูลแบบ 3 ชั้นหรือ Triple DES หากแอปทำงานร่วมกับระบบเดิมที่ต้องใช้ Triple DES ให้ใช้การเข้ารหัสประเภทนี้เมื่อเข้ารหัสข้อมูลเข้าสู่ระบบที่ละเอียดอ่อน

ดูข้อมูลเพิ่มเติมเกี่ยวกับวิธีทำให้แอปปลอดภัยยิ่งขึ้นได้ที่ความปลอดภัยสำหรับนักพัฒนาแอป Android

การเลิกใช้งาน WPS

เราเลิกใช้งานการตั้งค่าการป้องกัน Wi-Fi (WPS) แล้วด้วยเหตุผลด้านความปลอดภัย

การสำรองข้อมูล Android

Android 9 เพิ่มฟังก์ชันการทำงานใหม่และตัวเลือกสำหรับนักพัฒนาแอปที่เกี่ยวข้อง กับการสำรองและกู้คืน รายละเอียดเกี่ยวกับการเปลี่ยนแปลงเหล่านี้จะปรากฏในส่วนต่อไปนี้

ข้อมูลสำรองที่เข้ารหัสฝั่งไคลเอ็นต์

Android 9 เพิ่มการรองรับการเข้ารหัสข้อมูลสำรองใน Android ด้วย รหัสลับฝั่งไคลเอ็นต์ ระบบจะเปิดใช้การสนับสนุนนี้โดยอัตโนมัติเมื่อเป็นไปตามเงื่อนไขต่อไปนี้

เมื่อเปิดใช้มาตรการด้านความเป็นส่วนตัวนี้ ระบบจะ กำหนดให้ต้องใช้ PIN, รูปแบบ หรือรหัสผ่านของอุปกรณ์เพื่อกู้คืนข้อมูลจากการสำรองข้อมูลที่อุปกรณ์ของผู้ใช้สร้างขึ้น ดูข้อมูลเพิ่มเติมเกี่ยวกับเทคโนโลยีที่อยู่เบื้องหลังฟีเจอร์นี้ได้ในสมุดปกขาวของบริการ Google Cloud Key Vault

กำหนดเงื่อนไขของอุปกรณ์ที่จำเป็นสำหรับการสำรองข้อมูล

หากข้อมูลแอปมีข้อมูลหรือค่ากําหนดที่ละเอียดอ่อน Android 9 จะช่วยให้คุณกําหนดเงื่อนไขของอุปกรณ์ที่ข้อมูลของแอปจะรวมอยู่ในข้อมูลสำรองของผู้ใช้ได้ เช่น เมื่อเปิดใช้การเข้ารหัสฝั่งไคลเอ็นต์หรือเมื่อมีการโอนข้อมูลจากอุปกรณ์หนึ่งไปยังอีกอุปกรณ์หนึ่งในเครื่อง

ดูข้อมูลเพิ่มเติมเกี่ยวกับการสำรองข้อมูลในอุปกรณ์ Android ได้ที่ภาพรวมการสำรองข้อมูล

การช่วยเหลือพิเศษ

Android 9 ได้ปรับปรุงเฟรมเวิร์กการช่วยเหลือพิเศษ เพื่อให้คุณมอบประสบการณ์ที่ดียิ่งขึ้นแก่ผู้ใช้แอป ได้ง่ายขึ้น

ความหมายของการนำทาง

แอตทริบิวต์ที่เพิ่มใน Android 9 ช่วยให้คุณกำหนดวิธีที่บริการช่วยเหลือพิเศษ โดยเฉพาะโปรแกรมอ่านหน้าจอ จะไปยังส่วนต่างๆ ของหน้าจอได้ง่ายขึ้น แอตทริบิวต์เหล่านี้ช่วยให้ผู้ใช้ที่มีความบกพร่องทางสายตา เลื่อนดูข้อความใน UI ของแอปได้อย่างรวดเร็วและเลือกได้

เช่น ในแอปช็อปปิ้ง โปรแกรมอ่านหน้าจอจะช่วยให้ผู้ใช้ไปยังส่วนต่างๆ ได้ โดยตรงจากดีลหมวดหมู่หนึ่งไปยังหมวดหมู่ถัดไป โดยที่โปรแกรมอ่านหน้าจอ ไม่ต้องอ่านรายการทั้งหมดในหมวดหมู่ก่อนที่จะไปยังหมวดหมู่ถัดไป

ชื่อแผงการช่วยเหลือพิเศษ

ใน Android 8.1 (API ระดับ 27) และต่ำกว่า บริการการช่วยเหลือพิเศษไม่สามารถระบุได้เสมอไปว่าเมื่อใดที่แผงใดแผงหนึ่งของหน้าจอได้รับการอัปเดต เช่น เมื่อกิจกรรมแทนที่ Fragment หนึ่งด้วยอีก Fragment หนึ่ง บานหน้าต่างประกอบด้วยองค์ประกอบ UI ที่จัดกลุ่มอย่างเป็นตรรกะและมีความเกี่ยวข้องทางภาพ ซึ่งโดยปกติแล้วจะประกอบเป็น Fragment

ใน 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 ให้ใช้ API getWindowChanges() เพื่อพิจารณาว่าหน้าต่างมีการเปลี่ยนแปลงอย่างไร ในระหว่างการอัปเดตแบบหลายหน้าต่าง แต่ละหน้าต่างจะสร้างชุดเหตุการณ์ของตัวเอง getSource() เมธอดจะแสดงผลมุมมองรากของหน้าต่างที่เชื่อมโยงกับแต่ละเหตุการณ์

หากแอปกำหนดชื่อแผงการช่วยเหลือพิเศษสำหรับออบเจ็กต์ View บริการของคุณจะจดจำได้ เมื่อ UI ของแอปได้รับการอัปเดต เมื่อเกิดเหตุการณ์ TYPE_WINDOW_STATE_CHANGED ให้ใช้ประเภทที่ส่งคืนโดย getContentChangeTypes() เพื่อพิจารณาว่าหน้าต่างมีการเปลี่ยนแปลงอย่างไร เช่น เฟรมเวิร์กสามารถ ตรวจหาเมื่อแผงมีชื่อใหม่หรือเมื่อแผงหายไป

การหมุน

เราได้เพิ่มโหมดที่ตรึงการวางแนวปัจจุบันไว้แม้ว่าตำแหน่งของอุปกรณ์จะเปลี่ยนไปก็ตาม เพื่อป้องกันการหมุนโดยไม่ตั้งใจ ผู้ใช้สามารถทริกเกอร์การหมุน ด้วยตนเองได้เมื่อต้องการโดยกดปุ่มในแถบระบบ

ในกรณีส่วนใหญ่ ผลกระทบด้านความเข้ากันได้ของแอปจะน้อยที่สุด อย่างไรก็ตาม หากแอปของคุณมีการหมุนที่กำหนดเองหรือใช้การตั้งค่าการวางแนวหน้าจอที่ผิดปกติ คุณอาจพบปัญหาที่ก่อนหน้านี้ไม่เคยสังเกตเห็น เนื่องจากระบบจะตั้งค่าการหมุนของผู้ใช้เป็นแนวตั้งเสมอ เราขอแนะนำให้คุณพิจารณา ลักษณะการหมุนในกิจกรรมสำคัญทั้งหมดของแอป และตรวจสอบว่าการตั้งค่าการวางแนวหน้าจอทั้งหมดของคุณยังคงมอบประสบการณ์การใช้งานที่ดีที่สุด

ดูรายละเอียดเพิ่มเติมได้ที่การเปลี่ยนแปลง ลักษณะการทำงานที่เกี่ยวข้อง

การหมุนอุปกรณ์เคลื่อนที่แสดงโหมดการหมุนใหม่ที่ให้ผู้ใช้ทริกเกอร์การหมุนด้วยตนเอง

โหมดการหมุนใหม่ช่วยให้ผู้ใช้ทริกเกอร์การหมุนด้วยตนเองได้เมื่อต้องการโดยใช้ปุ่มในแถบระบบ

ข้อความ

Android 9 มีฟีเจอร์ที่เกี่ยวข้องกับข้อความต่อไปนี้ในแพลตฟอร์ม

  • ข้อความที่คำนวณล่วงหน้า: คลาส PrecomputedText ช่วยปรับปรุง ประสิทธิภาพการแสดงข้อความโดยให้คุณคำนวณและแคช ข้อมูลที่จำเป็นล่วงหน้า นอกจากนี้ยังช่วยให้แอปจัดวางข้อความนอกเทรดหลักได้ด้วย

  • Magnifier: คลาส Magnifier เป็นวิดเจ็ตแพลตฟอร์มที่ให้ API แว่นขยาย ซึ่งช่วยให้ได้รับประสบการณ์การใช้งานฟีเจอร์แว่นขยายที่สอดคล้องกันในทุกแอป

  • การลิงก์อัจฉริยะ: Android 9 ปรับปรุงคลาส TextClassifier ซึ่งใช้ประโยชน์จากแมชชีนเลิร์นนิงเพื่อระบุเอนทิตีบางอย่างในข้อความที่เลือกและ แนะนำการดำเนินการ เช่น TextClassifier จะช่วยให้แอปตรวจหาได้ ว่าผู้ใช้เลือกหมายเลขโทรศัพท์ จากนั้นแอปของคุณอาจแนะนำให้ผู้ใช้โทรออกโดยใช้หมายเลขดังกล่าว ฟีเจอร์ใน TextClassifier จะแทนที่ฟังก์ชันการทำงานของคลาส Linkify

  • เลย์เอาต์ข้อความ: วิธีและแอตทริบิวต์ที่สะดวกหลายอย่างช่วยให้ การออกแบบ UI ง่ายขึ้น ดูรายละเอียดได้ที่เอกสารอ้างอิงสำหรับ TextView

การแปลงไฟล์ DEX ของ ART ล่วงหน้า

ในอุปกรณ์ที่ใช้ Android 9 ขึ้นไป ตัวคอมไพเลอร์ล่วงหน้าของรันไทม์ Android (ART) จะเพิ่มประสิทธิภาพไฟล์ Dalvik Executable format (DEX) ที่บีบอัดโดยการแปลงไฟล์ DEX ในแพ็กเกจแอปให้เป็นรูปแบบที่ กะทัดรัดยิ่งขึ้น การเปลี่ยนแปลงนี้ช่วยให้แอปของคุณเริ่มทำงานได้เร็วขึ้นและใช้พื้นที่ดิสก์และ RAM น้อยลง

การปรับปรุงนี้เป็นประโยชน์อย่างยิ่งต่ออุปกรณ์ระดับล่างที่มีความเร็ว I/O ของดิสก์ช้ากว่า

การติดตามระบบในอุปกรณ์

Android 9 ช่วยให้คุณบันทึกการติดตามระบบจากอุปกรณ์ แล้วแชร์รายงานการบันทึกเหล่านี้กับทีมพัฒนาได้ รายงานนี้ รองรับหลายรูปแบบ รวมถึง HTML

การรวบรวมร่องรอยเหล่านี้จะช่วยให้คุณบันทึกข้อมูลเวลาที่เกี่ยวข้องกับ กระบวนการและเธรดของแอป รวมถึงดูสถานะอื่นๆ ของอุปกรณ์ที่มีความสำคัญในระดับโลกได้

ดูข้อมูลเพิ่มเติมเกี่ยวกับเครื่องมือนี้ได้ที่ทำการติดตามระบบในอุปกรณ์