Android 8.0 (API ระดับ 26) เปิดตัวฟีเจอร์ต่างๆ มากมาย ฟีเจอร์และความสามารถใหม่ๆ สำหรับผู้ใช้และนักพัฒนาซอฟต์แวร์ เอกสารนี้ไฮไลต์สิ่งใหม่ๆ สำหรับนักพัฒนาซอฟต์แวร์
และอย่าลืมชำระเงิน การเปลี่ยนแปลงลักษณะการทำงานของ Android 8.0 เพื่อดูข้อมูลเกี่ยวกับส่วนที่แพลตฟอร์มมีการเปลี่ยนแปลง อาจส่งผลกระทบต่อแอปของคุณ
ประสบการณ์ของผู้ใช้
โหมดการแสดงภาพซ้อนภาพ
การแสดงภาพซ้อนภาพใน Android 8.0
Android 8.0 (API ระดับ 26) อนุญาตให้เปิดกิจกรรมได้ใน โหมดการแสดงภาพซ้อนภาพ (PIP) PIP คือ โหมดหลายหน้าต่างประเภทพิเศษ ใช้สำหรับการเล่นวิดีโอเป็นส่วนใหญ่ เดิมโหมด PIP มีให้ใช้งานสำหรับ Android TV เท่านั้น Android 8.0 ทำให้ฟีเจอร์นี้พร้อมใช้งาน บนอุปกรณ์ Android อื่นๆ
เมื่อกิจกรรมอยู่ในโหมด PIP กิจกรรมนั้นจะอยู่ในสถานะหยุดชั่วคราว แต่
แสดงเนื้อหาต่อ ด้วยเหตุนี้ คุณจึงควรตรวจสอบว่าแอปของคุณ
ไม่หยุดการเล่นชั่วคราวใน onPause()
เครื่องจัดการ แต่ควรหยุดวิดีโอใน onStop()
ชั่วคราวแทน แล้วเล่นต่อใน onStart()
สำหรับข้อมูลเพิ่มเติม โปรดดู
หลายหน้าต่าง
วงจร
หากต้องการระบุว่ากิจกรรมของคุณสามารถใช้โหมด PIP ได้ ให้ตั้งค่า
android:supportsPictureInPicture
เป็นจริงในไฟล์ Manifest
(สำหรับ Android 8.0 เป็นต้นไป PIP ไม่ต้องใช้
แอตทริบิวต์ไฟล์ Manifest android:resizeableActivity
อย่างไรก็ตาม คุณต้องตั้งค่า
android:resizeableActivity
เป็น "จริง" หากกิจกรรมของคุณรองรับ
โหมดหลายหน้าต่าง)
Android 8.0 (API ระดับ 26) เปิดตัวออบเจ็กต์ใหม่ ซึ่งก็คือ PictureInPictureParams
ที่คุณส่งไปยังเมธอด PIP เพื่อระบุว่ากิจกรรมควรทำงานอย่างไร
เมื่ออยู่ในโหมด PIP ออบเจ็กต์นี้ระบุพร็อพเพอร์ตี้ เช่น
สัดส่วนภาพที่ต้องการของกิจกรรม
วิธีการ PIP ที่มีอยู่ตามที่อธิบายไว้ใน การเพิ่ม ตอนนี้คุณสามารถใช้การแสดงภาพซ้อนภาพได้แล้ว ใช้ในอุปกรณ์ Android ทุกเครื่อง ไม่ใช่แค่ Android TV นอกจากนี้ Android 8.0 มีวิธีการสนับสนุนดังต่อไปนี้ โหมด PIP:
Activity.enterPictureInPictureMode(PictureInPictureParams args)
: วางกิจกรรมในโหมดการแสดงภาพซ้อนภาพ สัดส่วนภาพของกิจกรรม และการตั้งค่าอื่นๆ ที่ระบุโดย args หากมีฟิลด์ ใน args ว่างเปล่า ระบบจะใช้ค่าที่ตั้งไว้ในครั้งถัดไปที่คุณ ที่ชื่อActivity.setPictureInPictureParams()
กิจกรรมที่ระบุจะวางไว้ที่มุมของหน้าจอ ส่วนที่เหลือของ หน้าจอมีกิจกรรมก่อนหน้าอยู่บนหน้าจอ กิจกรรมที่เข้าสู่โหมด PIP จะเข้าสู่สถานะหยุดชั่วคราว แต่ยังคงอยู่ เลย หากผู้ใช้แตะกิจกรรม PIP ระบบจะแสดงเมนูสำหรับ โต้ตอบกับผู้ใช้ กิจกรรมที่ไม่มีการแตะเข้าถึงกิจกรรมในขณะที่ ในสถานะ PIP
-
Activity.setPictureInPictureParams()
: อัปเดตการตั้งค่าการกำหนดค่า PIP ของกิจกรรม หากกิจกรรมคือ ขณะนี้อยู่ในโหมด PIP การตั้งค่าจะได้รับการอัปเดต วิธีนี้เป็นประโยชน์หาก สัดส่วนการแสดงผลของกิจกรรม หากกิจกรรมไม่ได้อยู่ในโหมด PIP ระบบจะใช้การตั้งค่าการกำหนดค่าเหล่านี้โดยไม่คำนึงถึงenterPictureInPictureMode()
เมธอดที่คุณเรียกใช้
การแจ้งเตือน
ใน Android 8.0 (API ระดับ 26) เราได้ออกแบบการแจ้งเตือนใหม่เพื่อ มอบวิธีการจัดการลักษณะการทำงานของการแจ้งเตือนที่ง่ายและสอดคล้องกันมากขึ้น และการตั้งค่า การเปลี่ยนแปลงเหล่านี้ประกอบด้วย
- ช่องทางการแจ้งเตือน: Android 8.0 เปิดตัว ช่องทางการแจ้งเตือนที่ให้คุณสร้างช่องทางที่ผู้ใช้กำหนดเองได้ สำหรับการแจ้งเตือนแต่ละประเภทที่ต้องการแสดง อินเทอร์เฟซผู้ใช้อ้างอิง ให้กับช่องทางการแจ้งเตือนเป็นหมวดหมู่การแจ้งเตือน เพื่อดูวิธี ในการใช้ช่องทางการแจ้งเตือน โปรดดู การจัดการ ช่องทางการแจ้งเตือน
- เครื่องหมายจุดแสดงการแจ้งเตือน: Android 8.0 มีการรองรับการแสดงผล จุด หรือป้ายต่างๆ บนไอคอนตัวเปิดแอป จุดแจ้งเตือนจะแสดง มีการแจ้งเตือนที่ผู้ใช้ยังไม่ได้ปิดหรือดำเนินการ หากต้องการดูวิธีใช้งานเครื่องหมายจุดแสดงการแจ้งเตือน โปรดดู การแจ้งเตือน ป้าย
- การปิดการแจ้งเตือนชั่วคราว: ผู้ใช้สามารถเลื่อนการแจ้งเตือนได้ ซึ่งทำให้การแจ้งเตือนหายไป ช่วงเวลาหนึ่งก่อนที่จะปรากฏขึ้นอีกครั้ง การแจ้งเตือนจะปรากฏขึ้นอีกครั้งพร้อม ความสำคัญในระดับเดียวกับที่โฆษณาปรากฏครั้งแรก แอปสามารถนำออกหรืออัปเดตได้ การแจ้งเตือนที่เลื่อน แต่การอัปเดตการแจ้งเตือนที่เลื่อนจะไม่ทำให้ ให้แสดงขึ้นอีกครั้ง
- ระยะหมดเวลาของการแจ้งเตือน: คุณสามารถตั้งระยะหมดเวลาได้เมื่อสร้าง
การแจ้งเตือนโดยใช้
setTimeoutAfter()
คุณสามารถใช้วิธีนี้เพื่อระบุระยะเวลาหลังจากที่การแจ้งเตือน ควรถูกยกเลิก หากจำเป็น คุณสามารถยกเลิกการแจ้งเตือนก่อน ผ่านระยะหมดเวลาที่ระบุไว้แล้ว - การตั้งค่าการแจ้งเตือน: คุณโทรหาได้
setSettingsText()
เพื่อตั้งค่าข้อความที่ปรากฏเมื่อคุณสร้างลิงก์ไปยัง จากการแจ้งเตือนโดยใช้Notification.INTENT_CATEGORY_NOTIFICATION_PREFERENCES
Intent ระบบอาจให้ส่วนเสริมต่อไปนี้โดยตั้งใจที่จะกรอง การตั้งค่าที่แอปของคุณต้องแสดงต่อผู้ใช้:EXTRA_CHANNEL_ID
NOTIFICATION_TAG
และNOTIFICATION_ID
- การปิดการแจ้งเตือน: ผู้ใช้จะปิดการแจ้งเตือนด้วยตนเองได้ และ
นำแอปออกแบบเป็นโปรแกรมได้ คุณกำหนดเวลาที่การแจ้งเตือนได้
ถูกปิด และเหตุใดจึงปิดโดยใช้
onNotificationRemoved()
จาก ชั้นเรียนNotificationListenerService
- สีพื้นหลัง: คุณสามารถตั้งค่าและเปิดใช้สีพื้นหลังสำหรับ
การแจ้งเตือน คุณควรใช้ฟีเจอร์นี้ในการแจ้งเตือนสำหรับ
งานที่ต้องทำต่อเนื่องซึ่งสำคัญมากต่อผู้ใช้ สำหรับ
เช่น คุณสามารถตั้งค่าสีพื้นหลังสำหรับการแจ้งเตือนที่เกี่ยวข้องกับ
เส้นทางการขับขี่ หรือการโทรที่ดำเนินการอยู่ คุณยังสามารถตั้งค่า
สีพื้นหลังที่ต้องการโดยใช้
setColor()
ดังนั้น อนุญาตให้คุณใช้setColorized()
เพื่อเปิดใช้การใช้สีพื้นหลังสำหรับการแจ้งเตือน - รูปแบบการรับส่งข้อความ: ใน Android 8.0 การแจ้งเตือนที่ใช้
การแสดงผลชั้นเรียนของ
MessagingStyle
เนื้อหาเพิ่มเติมในรูปแบบยุบได้ คุณควรใช้MessagingStyle
ชั้นเรียนสำหรับ การแจ้งเตือนที่เกี่ยวข้องกับการรับส่งข้อความ คุณยังสามารถใช้addHistoricMessage()
วิธีในการให้บริบทในการสนทนาด้วยการเพิ่ม ข้อความที่ผ่านมาไปจนถึงการแจ้งเตือนที่เกี่ยวข้องกับการรับส่งข้อความ
![เมนูการกดค้างสำหรับการแจ้งเตือนใน Android 8.0 (API ระดับ 26)](https://developer.android.google.cn/static/images/about/versions/oreo/notification-long-press.png?authuser=7&hl=th)
ผู้ใช้สามารถกดไอคอนตัวเปิดแอปค้างไว้เพื่อดู ใน Android 8.0
เฟรมเวิร์กการป้อนข้อความอัตโนมัติ
การสร้างบัญชี การเข้าสู่ระบบ และธุรกรรมผ่านบัตรเครดิตต้องใช้เวลาและมีแนวโน้มที่จะ ผู้ใช้อาจหงุดหงิดจากแอปที่ต้องใช้ประเภทเหล่านี้ได้ง่ายๆ งานซ้ำๆ ได้
Android 8.0 (API ระดับ 26) ทำการกรอกแบบฟอร์ม เช่น การเข้าสู่ระบบ และแบบฟอร์มบัตรเครดิต จะง่ายขึ้นด้วยการแนะนำกรอบการทำงานป้อนข้อความอัตโนมัติ แอปที่มีอยู่และแอปใหม่จะทํางานร่วมกับเฟรมเวิร์กการป้อนข้อความอัตโนมัติหลังจากที่ผู้ใช้เลือกใช้ ป้อนข้อความอัตโนมัติ
คุณอาจทำตามขั้นตอนบางอย่างเพื่อเพิ่มประสิทธิภาพการทำงานของแอปกับเฟรมเวิร์กนี้ สำหรับข้อมูลเพิ่มเติม โปรดดูภาพรวมเฟรมเวิร์กการป้อนข้อความอัตโนมัติ
แบบอักษรที่ดาวน์โหลดได้
Android 8.0 (API ระดับ 26) และ Android Support Library 26 ให้คุณขอแบบอักษรจาก แทนการรวมกลุ่มแบบอักษรลงใน APK หรือปล่อยให้ APK ดาวน์โหลดแบบอักษร ฟีเจอร์นี้ช่วยลดขนาด APK และเพิ่มแอป อัตราการติดตั้งสำเร็จ และอนุญาตให้แอปหลายแอปใช้แบบอักษรเดียวกันได้
หากต้องการข้อมูลเพิ่มเติมเกี่ยวกับการดาวน์โหลดแบบอักษร โปรดดู แบบอักษรที่ดาวน์โหลดได้
แบบอักษรใน XML
Android 8.0 (API ระดับ 26) แนะนำฟีเจอร์ใหม่คือ แบบอักษรใน XML ซึ่ง
ช่วยให้คุณใช้แบบอักษรเป็นแหล่งข้อมูลได้ ซึ่งหมายความว่าไม่จำเป็นต้องรวมกลุ่มแบบอักษร
เป็นเนื้อหา แบบอักษรได้รับการคอมไพล์ในไฟล์ R
และระบบจะ
อยู่ในระบบเป็นทรัพยากร จากนั้นคุณสามารถเข้าถึงแบบอักษรเหล่านี้ด้วย
ความช่วยเหลือสำหรับทรัพยากรประเภทใหม่ font
Support Library 26 รองรับฟีเจอร์นี้อย่างเต็มรูปแบบในอุปกรณ์ ที่ใช้ API เวอร์ชัน 14 ขึ้นไป
หากต้องการข้อมูลเพิ่มเติมเกี่ยวกับการใช้แบบอักษรเป็นทรัพยากรและการดึงข้อมูลแบบอักษรของระบบ ดูแบบอักษรใน XML
ปรับขนาด TextView อัตโนมัติ
Android 8.0 (API ระดับ 26) ช่วยให้คุณกำหนดขนาดของข้อความเพื่อขยายหรือ ย่อโดยอัตโนมัติตามขนาดของ TextView ซึ่งหมายความว่า ปรับขนาดข้อความบนหน้าจอต่างๆ หรือกับเนื้อหาแบบไดนามิกได้ง่ายขึ้น ดูข้อมูลเพิ่มเติมเกี่ยวกับการปรับขนาด TextView อัตโนมัติใน Android 8.0 ได้ ดูการปรับขนาด TextView อัตโนมัติ
ไอคอนแบบปรับอัตโนมัติ
Android 8.0 (API ระดับ 26) เปิดตัวไอคอน Launcher แบบปรับอัตโนมัติ ไอคอนแบบปรับอัตโนมัติรองรับภาพ และสามารถแสดงรูปร่างได้หลากหลายในอุปกรณ์รุ่นต่างๆ ดูวิธีการ สร้างไอคอนแบบปรับอัตโนมัติ โปรดดูไอคอนแบบปรับอัตโนมัติ
การจัดการสี
ตอนนี้นักพัฒนาซอฟต์แวร์ Android ของแอปสร้างภาพถ่ายสามารถใช้ประโยชน์จากอุปกรณ์ใหม่ได้แล้ว ที่สามารถแสดงผลสีได้กว้าง เพื่อแสดงขอบเขตแบบกว้าง รูปภาพ แอปจะต้องเปิดใช้ Flag ในไฟล์ Manifest (ตามกิจกรรม) และโหลดบิตแมปด้วยโปรไฟล์สีแบบกว้างแบบฝัง (AdobeRGB Pro Photo RGB, DCI-P3 ฯลฯ)
WebView API
Android 8.0 มี API มากมายที่จะช่วยคุณจัดการ
ออบเจ็กต์ WebView
ที่แสดงเนื้อหาเว็บในแอป
API เหล่านี้ซึ่งช่วยปรับปรุงความเสถียรและความปลอดภัยของแอป ได้แก่
ดังต่อไปนี้:
- API เวอร์ชัน
- API การเรียกดูที่ปลอดภัยของ Google
- API แฮนเดิลการสิ้นสุด
- API ความสำคัญของตัวแสดงผล
ดูข้อมูลเพิ่มเติมเกี่ยวกับวิธีใช้ API เหล่านี้ได้ที่ การจัดการ WebView
ตอนนี้คลาส WebView
มี Google Safe Browsing API เพื่อช่วยยกระดับความปลอดภัยแล้ว
ในการท่องเว็บ สำหรับข้อมูลเพิ่มเติม โปรดดู
Google Safe Browsing API
การปักหมุดทางลัดและวิดเจ็ต
Android 8.0 (API ระดับ 26) เปิดตัวการปักหมุดทางลัดในแอปและ วิดเจ็ต ในแอป คุณสามารถสร้างทางลัดและวิดเจ็ตที่ปักหมุดไว้สำหรับ Launcher ที่รองรับ ขึ้นอยู่กับการให้สิทธิ์จากผู้ใช้
สำหรับข้อมูลเพิ่มเติม โปรดดู การปักหมุดทางลัดและวิดเจ็ต แนะนำฟีเจอร์
สัดส่วนภาพสูงสุดของหน้าจอ
Android 8.0 (API ระดับ 26) มีการเปลี่ยนแปลงวิธีกําหนดค่าสัดส่วนภาพสูงสุดของแอป
อันดับแรก Android 8.0 ขอแนะนำ maxAspectRatio ซึ่งคุณ สามารถใช้ตั้งค่าสัดส่วนภาพสูงสุดของแอป นอกจากนี้ ใน Android 8.0 ขึ้นไป สัดส่วนภาพสูงสุดเริ่มต้น คือสัดส่วนภาพดั้งเดิมของอุปกรณ์ที่แอปทำงานอยู่
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการประกาศสัดส่วนภาพสูงสุด โปรดดู การรองรับหน้าจอหลายขนาด
การสนับสนุนหลายจอภาพ
แพลตฟอร์มนี้มีการปรับปรุงประสิทธิภาพเพิ่มขึ้นตั้งแต่ Android 8.0 (API ระดับ 26) รองรับการแสดงผลหลายจอ หากกิจกรรมรองรับโหมดหลายหน้าต่าง และ กำลังทำงานในอุปกรณ์ที่มีหลายจอแสดงผล ผู้ใช้สามารถย้ายกิจกรรมได้ จากจอแสดงผลหนึ่งไปยังอีกจอแสดงผลหนึ่ง เมื่อแอปเปิดกิจกรรม สามารถระบุว่าจะให้กิจกรรมใดทำงานบนจอแสดงผลใด
หมายเหตุ: หากกิจกรรมรองรับ โหมดหลายหน้าต่าง Android 8.0 จะเปิดใช้โดยอัตโนมัติ แบบหลายจอภาพสำหรับกิจกรรมดังกล่าว คุณควรทดสอบแอปเพื่อให้ ว่าใช้งานได้อย่างเพียงพอในสภาพแวดล้อมแบบหลายจอแสดงผล
กิจกรรมหนึ่งๆ จะอยู่ในสถานะกลับมาทำงานอีกครั้งได้เพียงครั้งละ 1 รายการเท่านั้น แม้ว่า แอปมีหลายหน้าจอ กิจกรรมที่มีโฟกัสอยู่ในสถานะกลับมาทำงานอีกครั้ง กิจกรรมอื่นๆ ทั้งหมดที่มองเห็นได้จะหยุดชั่วคราว แต่ไม่ได้หยุด หากต้องการดูข้อมูลเพิ่มเติม ในวงจรกิจกรรมเมื่อกิจกรรมหลายรายการแสดงขึ้น ดูโหมดหลายหน้าต่าง วงจร
เมื่อผู้ใช้ย้ายกิจกรรมจากจอแสดงผลหนึ่งไปยังอีกจอแสดงผลหนึ่ง ระบบจะ ปรับขนาดกิจกรรมและแสดงการเปลี่ยนแปลงรันไทม์ตามความจำเป็น กิจกรรมของคุณ สามารถจัดการการเปลี่ยนแปลงการกำหนดค่าด้วยตนเอง หรือช่วยให้ระบบ ทำลายกระบวนการที่มีกิจกรรมของคุณ และสร้างขึ้นใหม่โดยใช้ สำหรับข้อมูลเพิ่มเติม โปรดดู การจัดการการกำหนดค่า การเปลี่ยนแปลง
ActivityOptions
มีวิธีการสนับสนุนแบบใหม่ 2 วิธี
จอแสดงผลหลายจอ:
setLaunchDisplayId()
- ระบุว่ากิจกรรมใดควรแสดงเมื่อมีการเปิดตัว
getLaunchDisplayId()
- แสดงหน้าจอเปิดปัจจุบันของกิจกรรม
adb shell ขยายเพื่อรองรับการแสดงผลหลายหน้าจอ
ใช้คำสั่ง shell start
เพื่อเริ่มกิจกรรมได้แล้ว
และเพื่อระบุการแสดงผลเป้าหมายของกิจกรรม:
adb shell start <activity_name> --display <display_id>
ระยะขอบและระยะห่างจากขอบของเลย์เอาต์แบบรวม
Android 8.0 (API ระดับ 26) ทำให้คุณระบุสถานการณ์ที่ฝั่งตรงข้ามได้ง่ายขึ้น
ขององค์ประกอบ View
ใช้ระยะขอบหรือระยะห่างจากขอบเดียวกัน
กล่าวอย่างเจาะจงคือ ตอนนี้คุณสามารถใช้แอตทริบิวต์ต่อไปนี้ใน XML ของเลย์เอาต์ได้แล้ว
ไฟล์:
-
layout_marginVertical
ซึ่งกำหนดlayout_marginTop
และlayout_marginBottom
ในเวลาเดียวกัน -
layout_marginHorizontal
ซึ่งกำหนดlayout_marginLeft
และlayout_marginRight
ในเวลาเดียวกัน -
paddingVertical
ซึ่งกำหนดpaddingTop
และpaddingBottom
ในเวลาเดียวกัน -
paddingHorizontal
ซึ่งกำหนดpaddingLeft
และpaddingRight
ในเวลาเดียวกัน
หมายเหตุ: หากคุณปรับแต่งตรรกะของแอปเป็น
สนับสนุน
ภาษาและวัฒนธรรม รวมถึงการกำหนดทิศทางข้อความ ควรคำนึงอยู่เสมอว่า
จะไม่มีผลต่อค่าของ
layout_marginStart
layout_marginEnd
paddingStart
หรือ
paddingEnd
คุณสามารถตั้งค่าเหล่านี้ด้วยตนเองนอกเหนือจาก
แอตทริบิวต์การออกแบบแนวตั้งและแนวนอนใหม่เพื่อสร้างลักษณะการทำงานของเลย์เอาต์
ซึ่งขึ้นอยู่กับทิศทางของข้อความ
การจับภาพเคอร์เซอร์
แอปบางแอป เช่น เกม, Remote Desktop และไคลเอ็นต์ระบบเสมือนจริง จะได้ประโยชน์จากการควบคุมเคอร์เซอร์เมาส์ การจับภาพตัวชี้เป็น ใน Android 8.0 (API ระดับ 26) ที่ให้การควบคุมดังกล่าวโดยส่งเหตุการณ์เมาส์ทั้งหมด ไปยังมุมมองที่โฟกัสในแอป
ตั้งแต่ Android 8.0 เป็นต้นไป View
ในแอปจะขอได้
การบันทึกตัวชี้และกำหนด Listener เพื่อประมวลผลเหตุการณ์ตัวชี้ที่บันทึกไว้
ระบบจะซ่อนเคอร์เซอร์เมาส์ขณะอยู่ในโหมดนี้ มุมมองจะเผยแพร่การจับภาพตัวชี้
เมื่อไม่ต้องใช้ข้อมูลเมาส์อีก ระบบจะปล่อย
การจับภาพตัวชี้เมื่อมุมมองสูญเสียโฟกัส เช่น เมื่อผู้ใช้เปิด
แอปอื่น
สำหรับข้อมูลเกี่ยวกับวิธีใช้ฟีเจอร์นี้ในแอปของคุณ โปรดดู การจับภาพตัวชี้
หมวดหมู่ของแอป
Android 8.0 (API ระดับ 26) ช่วยให้แต่ละแอปประกาศหมวดหมู่ที่ตรงกับแอปนั้นๆ ได้
เมื่อมีความเกี่ยวข้อง หมวดหมู่เหล่านี้ใช้เพื่อจัดกลุ่มแอปที่คล้ายกัน
วัตถุประสงค์หรือฟังก์ชันเมื่อนำเสนอต่อผู้ใช้ เช่น ในการใช้ข้อมูล การใช้งานแบตเตอรี่ หรือ
การใช้พื้นที่เก็บข้อมูล คุณสามารถกำหนดหมวดหมู่สำหรับแอปได้โดยการตั้งค่า
แอตทริบิวต์ android:appCategory
ใน <application>
ไฟล์ Manifest
Launcher ของ Android TV
Android 8.0 (API ระดับ 26) ประกอบด้วยฟีเจอร์ใหม่ที่เน้นเนื้อหา ประสบการณ์การใช้งานหน้าจอหลักของ Android TV ซึ่งใช้งานได้กับ ภาพอุปกรณ์จำลอง Android TV และอุปกรณ์ Nexus Player สำหรับ Android 8.0 หน้าจอหลักใหม่จะจัดระเบียบ เนื้อหาวิดีโอในแถวที่สอดคล้องกับช่อง ซึ่งแต่ละรายการจะมีรายการจากแอปใน ระบบ แอปสามารถเผยแพร่ได้หลายช่องทาง และผู้ใช้ก็สามารถกำหนดค่าช่องทางที่ต้องการเผยแพร่ได้ ต้องการดูบนหน้าจอหลัก หน้าจอหลักของ Android TV ยังมีแถว "แนะนำให้รับชม" ซึ่งก็คือ ป้อนข้อมูลของโปรแกรมจากแอป โดยอิงตามพฤติกรรมการดูของผู้ใช้ นอกจากนี้ แอปยังให้ ตัวอย่างวิดีโอ ซึ่งจะเล่นโดยอัตโนมัติเมื่อผู้ใช้โฟกัสโปรแกรม API สำหรับ การป้อนข้อมูลเกี่ยวกับช่องทางและโปรแกรมต่างๆ เป็นส่วนหนึ่งของ TvProvider API ซึ่งจัดจำหน่ายในฐานะ Android โมดูลไลบรารีการสนับสนุนที่ใช้ Android 8.0
ชุดแอนิเมชัน
ตั้งแต่ Android 8.0 (API ระดับ 26) เป็นต้นไป AnimatorSet
API จะรองรับการค้นหาและการเล่นใน
สลับกัน การกรอวิดีโอช่วยให้คุณกำหนดตำแหน่งของภาพเคลื่อนไหวที่ตั้งค่าเป็น
ช่วงเวลาหนึ่ง การเล่นย้อนกลับจะมีประโยชน์หากแอปมีภาพเคลื่อนไหว
เพื่อดูการดำเนินการที่เลิกทำได้ แทนที่จะกำหนดภาพเคลื่อนไหว 2 ภาพแยกกัน
คุณก็สามารถเล่นชุดเดิมสลับกัน
การป้อนข้อมูลและการนำทาง
คลัสเตอร์การไปยังส่วนต่างๆ ด้วยแป้นพิมพ์
หากกิจกรรมในแอปใช้ลำดับชั้นการแสดงผลที่ซับซ้อน เช่น กิจกรรมในลำดับชั้น รูปที่ 2 ลองจัดกลุ่มองค์ประกอบ UI ให้เป็นคลัสเตอร์เพื่อให้ง่ายขึ้น การไปยังส่วนต่างๆ ด้วยแป้นพิมพ์ ผู้ใช้สามารถกด Meta+Tab หรือ Search+Tab ได้ อุปกรณ์ Chromebook สำหรับการไปยังส่วนต่างๆ จากคลัสเตอร์หนึ่งไปยังอีกคลัสเตอร์ ตัวอย่างที่ดีของ คลัสเตอร์ ได้แก่ แผงด้านข้าง แถบนำทาง พื้นที่เนื้อหาหลัก และองค์ประกอบ ซึ่งอาจมีองค์ประกอบย่อยหลายรายการ
![ตัวอย่างกิจกรรมที่มีคลัสเตอร์การนำทาง 5 คลัสเตอร์ที่ผู้ใช้
สามารถนำทางโดยใช้ทางลัดของคลัสเตอร์การนำทางด้วยแป้นพิมพ์ คลัสเตอร์
จะปรากฏในการจัดเรียง เช่น แผงด้านบน แผงด้านข้างทางซ้าย เนื้อหาหลัก
พื้นที่ แผงด้านล่าง และปุ่มการทำงานแบบลอย](https://developer.android.google.cn/static/images/about/versions/oreo/keyboard-navigation-clusters.png?authuser=7&hl=th)
วิธีสร้างองค์ประกอบ View
หรือ ViewGroup
คลัสเตอร์ ตั้งค่า
android:keyboardNavigationCluster
แอตทริบิวต์ให้กับ
true
ในไฟล์ XML สำหรับเลย์เอาต์ขององค์ประกอบ หรือส่ง true
ลงใน setKeyboardNavigationCluster()
ในตรรกะ UI ของแอป
หมายเหตุ: คลัสเตอร์จะซ้อนกันไม่ได้ แม้ว่าจะไม่ได้ซ้อนก็ตาม
คลัสเตอร์อาจปรากฏในระดับต่างๆ ของลำดับชั้น หากคุณพยายาม
คลัสเตอร์ Nest จะถือว่าแสดงเฉพาะรายการด้านบนสุด
องค์ประกอบ ViewGroup
รายการเป็นคลัสเตอร์
คุณตั้งค่ากำหนดคลัสเตอร์ในอุปกรณ์ที่มีหน้าจอสัมผัสได้
ออบเจ็กต์ ViewGroup
รายการ
android:touchscreenBlocksFocus
องค์ประกอบให้กับ true
ไปยัง
อนุญาตการนำทางเฉพาะคลัสเตอร์เข้าและออกจากคลัสเตอร์นั้น หากคุณใช้วิธีนี้
การกำหนดค่าให้กับคลัสเตอร์ ผู้ใช้จะไม่สามารถใช้แป้น Tab หรือแป้นลูกศรเพื่อ
ไปยังส่วนต่างๆ ของคลัสเตอร์หรือออกจากคลัสเตอร์ ผู้ใช้จะต้องกดการนำทางของคลัสเตอร์
การกดแป้นร่วมกันแทน
ดูโฟกัสเริ่มต้น
ใน Android 8.0 (API ระดับ 26) คุณสามารถกำหนด View
ที่ควร
รับโฟกัสหลังจากกิจกรรมที่สร้าง (ใหม่) กลับมาทำงานอีกครั้งและผู้ใช้กด
แป้นนำทางด้วยแป้นพิมพ์ เช่น แป้น Tab วิธีใช้ "โฟกัสโดยค่าเริ่มต้น" นี้
ตั้งค่าองค์ประกอบ View
android:focusedByDefault
เป็น true
ใน
ไฟล์ XML การจัดวางที่มีองค์ประกอบ UI หรือส่งใน true
ไปยัง
setFocusedByDefault()
ใน
ตรรกะ UI ของแอป
เอาต์พุตเสียงพูด
กิจกรรมและบริการสามารถใช้อินสแตนซ์ของ
TextToSpeech
เพื่อพิมพ์ตามคำบอกและออกเสียงเนื้อหา เมื่อ
Android 8.0 (API ระดับ 26) แอปของคุณสามารถรับข้อมูลเวลาที่แม่นยำมากขึ้น
เกี่ยวกับเวลาที่เครื่องมืออ่านออกเสียงข้อความเริ่มพูดคำสังเคราะห์แต่ละคำ
หากเครื่องมือให้ข้อมูลนี้ คุณใช้ฟังก์ชันนี้ได้
เพื่อเรียกความสนใจไปยังคำที่เจาะจงในขณะที่เครื่องมืออ่านออกเสียงข้อความพูด
ให้พวกเขา
หากต้องการใช้การปรับปรุงเครื่องมืออ่านออกเสียงข้อความเหล่านี้ในแอป ให้ลงทะเบียน
UtteranceProgressListener
ในฐานะส่วนหนึ่งของ
สำหรับขั้นตอนการลงทะเบียน
โดยใส่เครื่องจัดการสำหรับ
onRangeStart()
เครื่องมืออ่านออกเสียงข้อความ
rangeStart()
เพื่อบันทึก
ช่วงเวลาที่มีการเล่นเสียงของข้อความช่วงหนึ่ง
เพื่อเริ่มต้น เมื่อเสียงสำหรับช่วงข้อความดังกล่าวเริ่มเล่น
onRangeStart()
ของเมธอด จากนั้นแอปของคุณจะตอบกลับการเรียกกลับนี้ได้ เช่น
ไฮไลต์ช่วงข้อความที่เกี่ยวข้องกับคำพูด
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการติดตามความคืบหน้าในการเล่นการอ่านออกเสียงข้อความ
เครื่องมือ โปรดดูคลาส UtteranceProgressListener
ข้อมูลอ้างอิง
ระบบ
ตัวตรวจจับ StrictMode ใหม่
Android 8.0 (API ระดับ 26) เพิ่มตัวตรวจจับ StrictMode ใหม่ 3 รายการเพื่อช่วยระบุ ข้อบกพร่องที่อาจเกิดขึ้นในแอปของคุณ:
detectUnbufferedIo()
จะตรวจพบเมื่อ แอปอ่านหรือเขียนข้อมูลโดยไม่มีการบัฟเฟอร์ ซึ่งอาจส่งผลกระทบอย่างมาก ด้านประสิทธิภาพdetectContentUriWithoutPermission()
จะ ตรวจจับเมื่อแอปของคุณลืมให้สิทธิ์แก่แอปอื่นโดยไม่ตั้งใจเมื่อ การเริ่มกิจกรรมนอกแอปของคุณdetectUntaggedSockets()
จะตรวจพบเมื่อ แอปของคุณการจราจรของข้อมูลในเครือข่ายโดยไม่ใช้setThreadStatsTag(int)
เพื่อติดแท็กการเข้าชมของคุณสำหรับการแก้ไขข้อบกพร่อง วัตถุประสงค์
ข้อมูลในแคช
Android 8.0 (API ระดับ 26) ให้คำแนะนำและลักษณะการทำงานที่ดีขึ้นเกี่ยวกับข้อมูลที่แคชไว้ ชิ้น
ขณะนี้แอปจะได้รับโควต้าพื้นที่ดิสก์สำหรับข้อมูลที่แคชไว้ ตามที่ส่งคืนโดย
getCacheQuotaBytes(UUID)
เมื่อระบบต้องการเพิ่มพื้นที่ว่างในดิสก์ ระบบจะเริ่มต้นด้วยการลบไฟล์ที่แคชไว้ออกจากแอป เป็นจำนวนที่เกินโควต้าที่จัดสรรไว้ ดังนั้นหากคุณเก็บข้อมูลที่แคชไว้ภายใต้ โควต้าที่จัดสรรแล้ว ไฟล์ที่แคชไว้จะเป็นไฟล์ล่าสุดบางส่วนในระบบที่จะล้างเมื่อ ตามความจำเป็น เมื่อระบบกำลังตัดสินใจว่าจะลบไฟล์ใดในแคชจากในแอป ระบบจะดำเนินการ ให้พิจารณาไฟล์ที่เก่าที่สุดก่อน (ตามที่กำหนดโดยเวลาที่แก้ไข)
นอกจากนี้ ยังมีลักษณะการทำงานใหม่ 2 แบบที่คุณสามารถเปิดใช้แบบต่อไดเรกทอรีเพื่อควบคุม วิธีที่ระบบเพิ่มพื้นที่ว่างในแคช
StorageManager.setCacheBehaviorAtomic()
สามารถใช้เพื่อระบุ ไดเรกทอรีและเนื้อหาทั้งหมดควรถูกลบเป็นหน่วยอะตอมเดียวsetCacheBehaviorTombstone(File, boolean)
สามารถใช้เพื่อระบุ แทนที่จะลบไฟล์ภายในไดเรกทอรี ไฟล์ควรถูกตัดทอนให้เหลือ 0 ไบต์ใน ความยาว โดยปล่อยให้ไฟล์ที่ว่างเปล่าเหมือนเดิม
สุดท้าย เมื่อคุณต้องการจัดสรรพื้นที่ดิสก์สำหรับไฟล์ขนาดใหญ่ ให้พิจารณาใช้
allocateBytes(FileDescriptor, long)
API ซึ่งจะล้างโดยอัตโนมัติ
ไฟล์ที่แคชไว้ของแอปอื่นๆ (ตามความจำเป็น) เพื่อให้เป็นไปตามคำขอของคุณ เมื่อตัดสินใจว่า
อุปกรณ์มีพื้นที่ในดิสก์เพียงพอที่จะเก็บข้อมูลใหม่ การโทร
getAllocatableBytes(UUID)
แทนการใช้
getUsableSpace()
เนื่องจากตัวเลือกแรกจะพิจารณาจากแคช
ที่ระบบต้องการล้างในนามของคุณ
การแบ่งหน้าของผู้ให้บริการเนื้อหา
เราได้อัปเดตผู้ให้บริการเนื้อหาเพื่อให้รองรับการโหลด ชุดข้อมูลครั้งละ 1 หน้า ตัวอย่างเช่น แอปรูปภาพที่ รูปภาพสามารถค้นหาข้อมูลชุดย่อยที่จะแสดงในหน้าเว็บได้ แต่ละหน้า ของผลลัพธ์ที่แสดงโดยผู้ให้บริการเนื้อหาจะแสดงด้วยเคอร์เซอร์ตัวเดียว ออบเจ็กต์ ทั้งลูกค้าและผู้ให้บริการต้องใช้การแบ่งหน้าเพื่อใช้ประโยชน์จาก ฟีเจอร์นี้
สำหรับข้อมูลโดยละเอียดเกี่ยวกับการเปลี่ยนแปลงผู้ให้บริการเนื้อหา โปรดดู
ContentProvider
และ
ContentProviderClient
คำขอรีเฟรชเนื้อหา
ContentProvider
และ
ขณะนี้ ContentResolver
ชั้นเรียนแต่ละชั้นมี
refresh()
เพื่อให้ลูกค้าทราบข้อมูลได้ง่ายขึ้นว่า
ข้อมูลที่ลูกค้าขอนั้นเป็นปัจจุบัน
คุณสามารถเพิ่มตรรกะการรีเฟรชเนื้อหาที่กำหนดเองได้โดยการขยาย
ContentProvider
โปรดตรวจสอบว่าคุณได้ลบล้าง
refresh()
วิธีในการส่งคืน
true
หมายถึงลูกค้าของผู้ให้บริการว่าคุณได้พยายามแล้ว
เพื่อรีเฟรชข้อมูลด้วยตัวเอง
แอปไคลเอ็นต์ขอเนื้อหาที่รีเฟรชได้อย่างชัดแจ้งโดยเรียกใช้
วิธีอื่นที่เรียกอีกอย่างว่า
refresh()
เมื่อโทรหารายการนี้
ส่งใน URI ของข้อมูลที่จะรีเฟรช
หมายเหตุ: เนื่องจากคุณอาจขอข้อมูลผ่านเครือข่าย
คุณควรเรียกใช้ refresh()
จาก
ฝั่งไคลเอ็นต์เฉพาะเมื่อมีข้อความที่ชัดเจนว่าเนื้อหาเก่า
สาเหตุที่พบบ่อยที่สุดในการรีเฟรชเนื้อหาประเภทนี้คือ
ปัดเพื่อรีเฟรช
เพื่อแสดง UI ล่าสุดอย่างชัดเจน
เพื่อให้แสดงเนื้อหาที่อัปเดต
การปรับปรุง JobScheduler
Android 8.0 (API ระดับ 26) มีการปรับปรุงหลายอย่างให้กับ JobScheduler
การปรับปรุงเหล่านี้จะทำให้แอปของคุณ
เพื่อให้สอดคล้องกับพื้นหลังใหม่
ขีดจำกัดการดำเนินการ เนื่องจากโดยทั่วไปคุณสามารถใช้งานที่กำหนดเวลาไว้เพื่อแทนที่
บริการที่ทำงานอยู่เบื้องหลังที่ถูกจำกัดหรือตัวรับการออกอากาศโดยปริยาย
การอัปเดต JobScheduler
มีดังนี้
-
ขณะนี้คุณเชื่อมโยงคิวงานกับงานที่กำหนดเวลาไว้ได้แล้ว วิธีเพิ่มรายการงานลงใน
คิวงาน, การโทร
JobScheduler.enqueue()
เมื่องานอยู่ระหว่างดำเนินการ สามารถนำงานที่รอดำเนินการออกจากคิวและประมวลผลได้ ฟังก์ชันนี้รองรับ Use Case หลายอย่างที่ก่อนหน้านี้ต้องเจอ เรียกร้องให้เริ่มบริการในเบื้องหลัง โดยเฉพาะบริการที่ใช้IntentService
-
Android
Support Library 26.0.0 แนะนำคลาส
JobIntentService
ใหม่ ซึ่งมี เป็นIntentService
แต่ใช้งานแทน บริการเมื่อทำงานใน Android 8.0 (API ระดับ 26) ขึ้นไป -
ตอนนี้คุณสามารถโทร
JobInfo.Builder.setClipData()
เพื่อเชื่อมโยงClipData
เข้ากับงาน ตัวเลือกนี้จะทำให้ คุณต้องเชื่อมโยงการให้สิทธิ์ URI กับงาน ซึ่งคล้ายกับวิธี สามารถเผยแพร่สิทธิ์ไปยังContext.startService()
คุณยังใช้การให้สิทธิ์ URI กับ Intent ได้ด้วย เกี่ยวกับคิวงาน -
ตอนนี้งานที่กำหนดเวลาไว้รองรับข้อจำกัดใหม่หลายประการ ดังนี้
JobInfo.isRequireStorageNotLow()
- งานจะไม่ทำงานหากพื้นที่เก็บข้อมูลที่พร้อมใช้งานของอุปกรณ์เหลือน้อย
JobInfo.isRequireBatteryNotLow()
- งานจะไม่ทำงานหากระดับแบตเตอรี่อยู่ที่หรือต่ำกว่าระดับวิกฤต เกณฑ์ นี่คือระดับที่อุปกรณ์แสดงแบตเตอรี่ต่ำ คำเตือน กล่องโต้ตอบของระบบ
NETWORK_TYPE_METERED
- งานต้องใช้การเชื่อมต่อเครือข่ายแบบจำกัดปริมาณ เช่น ข้อมูลเครือข่ายมือถือส่วนใหญ่ แพ็กเกจ
พื้นที่เก็บข้อมูลที่กำหนดเอง
Android 8.0 (API ระดับ 26) ให้คุณมอบพื้นที่เก็บข้อมูลที่กำหนดเองให้กับค่ากำหนด ซึ่งสามารถ มีประโยชน์หากแอปจัดเก็บค่ากำหนดในระบบคลาวด์หรือฐานข้อมูลในเครื่อง หรือ หากค่ากำหนดนั้นเจาะจงอุปกรณ์ สำหรับข้อมูลเพิ่มเติมเกี่ยวกับ การใช้พื้นที่เก็บข้อมูล โปรดดู พื้นที่เก็บข้อมูลที่กำหนดเอง
การเพิ่มประสิทธิภาพสื่อ
VolumeShaper
มีชั้นเรียน VolumeShaper
ใหม่ ใช้
เพื่อดําเนินการเปลี่ยนระดับเสียงอัตโนมัติสั้นๆ เช่น เฟดอิน เฟดเอาต์ และการเฟด
ดูการควบคุม Amplitude ด้วย VolumeShaper
เพื่อดูข้อมูลเพิ่มเติม
การเพิ่มประสิทธิภาพโฟกัสเสียง
แอปเสียงจะแชร์เอาต์พุตเสียงในอุปกรณ์โดยการขอและยกเลิกการโฟกัสเสียง
แอปจะจัดการการเปลี่ยนแปลงโฟกัสโดยการเริ่มหรือหยุดการเล่น หรือการลดระดับเสียง
มีชั้นเรียน AudioFocusRequest
ใหม่ การใช้คลาสนี้เป็นพารามิเตอร์ของ
requestAudioFocus()
,
แอปมีความสามารถในการทำงานแบบใหม่เมื่อต้องรับมือกับการเปลี่ยนแปลงในโฟกัสของเสียง ดังนี้
การลดโดยอัตโนมัติและ
การเพิ่มขึ้นของโฟกัสแบบหน่วงเวลา
เมตริกสื่อ
เมธอด getMetrics()
ใหม่แสดงผล PersistableBundle
ออบเจ็กต์ที่มีการกำหนดค่า
และข้อมูลประสิทธิภาพ ซึ่งแสดงเป็นการแมปแอตทริบิวต์และค่า
มีการกำหนดเมธอด getMetrics()
สำหรับคลาสสื่อเหล่านี้
MediaPlayer.getMetrics()
MediaRecorder.getMetrics()
MediaCodec.getMetrics()
MediaExtractor.getMetrics()
ระบบจะรวบรวมเมตริกสำหรับแต่ละอินสแตนซ์แยกกันและจะยังคงอยู่สำหรับ ตลอดอายุของอินสแตนซ์ หากไม่มีเมตริกที่พร้อมใช้งาน ระบบจะแสดงผลเมธอด ค่าว่าง โดยเมตริกจริงที่แสดงผลจะขึ้นอยู่กับคลาส
MediaPlayer
เริ่มตั้งแต่ Android 8.0 (API ระดับ 26) สามารถเล่น MediaPlayer ได้ ได้รับการป้องกันด้วย DRM วัสดุและสื่อที่เข้ารหัสระดับตัวอย่าง HLS
Android 8.0 เปิดตัวฟีเจอร์ใหม่ "โอเวอร์โหลด"
คำสั่ง seekTo()
ที่แสดงแบบละเอียด
เมื่อกรอวิดีโอไปยังเฟรม โดยมีพารามิเตอร์ที่ 2 ที่ระบุโหมดค้นหา ดังนี้
SEEK_PREVIOUS_SYNC
ย้ายตำแหน่งสื่อไปยังเฟรมการซิงค์ (หรือแป้น) ที่เกี่ยวข้องกับแหล่งข้อมูลที่แสดงอยู่ก่อนหน้าหรือในช่วงเวลาที่ระบุSEEK_NEXT_SYNC
ย้ายตำแหน่งสื่อไปยังเฟรมการซิงค์ (หรือแป้น) ที่เกี่ยวข้อง กับแหล่งข้อมูลซึ่งอยู่หลังหรือเวลาที่ระบุทันทีSEEK_CLOSEST_SYNC
ย้ายตำแหน่งสื่อไปยังเฟรมการซิงค์ (หรือแป้น) เชื่อมโยงกับแหล่งข้อมูลที่อยู่ใกล้ที่สุด หรือในเวลาที่ระบุSEEK_CLOSEST
ย้ายตำแหน่งสื่อไปยังเฟรม (ไม่จำเป็นต้องซิงค์ หรือคีย์เฟรม) ที่เชื่อมโยงกับแหล่งข้อมูลที่อยู่ใกล้หรือ ในช่วงเวลาที่กำหนด
เมื่อกรอวิดีโออย่างต่อเนื่อง แอปควรใช้โหมด SEEK_
แทน SEEK_CLOSEST
ซึ่งจะทํางานได้ค่อนข้างช้าลงแต่ทํางานได้แม่นยํากว่า
โปรแกรมบันทึกสื่อ
- ขณะนี้ MediaRecorder สนับสนุนรูปแบบ MPEG2_TS ที่มีประโยชน์สำหรับ
สตรีมมิง:
Kotlin
mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_2_TS)
Java
mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_2_TS);
MediaMuxer
รองรับสตรีมเสียงและวิดีโอกี่รายการก็ได้ ยกเลิกการจำกัดแล้ว ไปยังแทร็กเสียง 1 แทร็กและ/หรือแทร็กวิดีโอ 1 แทร็ก ใช้addTrack()
เพื่อมิกซ์แทร็กได้มากเท่าที่ต้องการ- นอกจากนี้
MediaMuxer
ยังเพิ่มแทร็กข้อมูลเมตาอย่างน้อย 1 แทร็กที่มีแทร็กที่ผู้ใช้กำหนดต่อเฟรมได้ด้วย แอปพลิเคชันของคุณเป็นผู้กำหนดรูปแบบของข้อมูลเมตา แทร็กข้อมูลเมตารองรับเฉพาะคอนเทนเนอร์ MP4
ข้อมูลเมตาอาจเป็นประโยชน์ต่อการประมวลผลแบบออฟไลน์ เช่น สัญญาณไจโรจาก สามารถใช้เซ็นเซอร์เพื่อทำการป้องกันภาพวิดีโอสั่นไหว
เมื่อเพิ่มแทร็กข้อมูลเมตา รูปแบบ MIME ของแทร็กต้องขึ้นต้นด้วยคำนำหน้า
"application/" การเขียนข้อมูลเมตาเหมือนกับการเขียนข้อมูลวิดีโอ/เสียง ยกเว้น
ว่าข้อมูลไม่ได้มาจาก MediaCodec
แต่แอปจะส่ง
ByteBuffer
ที่มีการประทับเวลาที่เชื่อมโยงกับ
writeSampleData()
วิธี
การประทับเวลาต้องอยู่ในฐานเวลาเดียวกันกับแทร็กวิดีโอและแทร็กเสียง
ไฟล์ MP4 ที่สร้างขึ้นใช้ TextMetaDataSampleEntry
ที่กำหนดไว้ในส่วน
12.3.3.2 ของ ISOBMFF เพื่อส่งสัญญาณรูปแบบ MIME ของข้อมูลเมตา เมื่อใช้ MediaExtractor
เพื่อแยกไฟล์ด้วยแทร็กข้อมูลเมตา MIME
รูปแบบของข้อมูลเมตาจะแยกเป็น MediaFormat
ปรับปรุงการเข้าถึงไฟล์สื่อ
เฟรมเวิร์กการเข้าถึงพื้นที่เก็บข้อมูล (SAF) ทำให้แอปแสดง
DocumentsProvider
ซึ่งให้สิทธิ์เข้าถึงไฟล์ได้
ในแหล่งข้อมูลไปยังแอปอื่นๆ ที่จริงแล้ว
ผู้ให้บริการเอกสารยังสามารถให้สิทธิ์เข้าถึงไฟล์
ที่อยู่ในพื้นที่เก็บข้อมูลเครือข่ายหรือที่ใช้โปรโตคอล เช่น
โปรโตคอลการถ่ายโอนสื่อ (MTP)
อย่างไรก็ตาม การเข้าถึงไฟล์สื่อขนาดใหญ่จากแหล่งข้อมูลระยะไกลอาจทำให้ ชาเลนจ์:
- มีเดียเพลเยอร์ต้องใช้การเข้าถึงไฟล์ได้จากผู้ให้บริการเอกสาร ในกรณีที่มีไฟล์สื่อขนาดใหญ่อยู่ในแหล่งข้อมูลระยะไกล ผู้ให้บริการเอกสารต้องดึงข้อมูลทั้งหมดล่วงหน้าและสร้างสแนปชอต ข้อบ่งชี้ไฟล์ มีเดียเพลเยอร์ไม่สามารถเล่นไฟล์โดยไม่มีไฟล์ ข้อบ่งชี้ การเล่นจึงไม่สามารถเริ่มเล่นได้จนกว่าผู้ให้บริการเอกสารจะเสร็จสิ้น กำลังดาวน์โหลดไฟล์
- เครื่องมือจัดการคอลเล็กชันสื่อ เช่น แอปรูปภาพ จะต้องข้ามผ่านชุด เข้าถึง URI เพื่อเข้าถึงสื่อที่จัดเก็บไว้ในการ์ด SD ภายนอกผ่านขอบเขต โฟลเดอร์ รูปแบบการเข้าถึงนี้ทำให้มีการดำเนินการจำนวนมากในสื่อ เช่น การย้าย คัดลอก และลบ ค่อนข้างช้า
- ผู้จัดการคอลเล็กชันสื่อไม่สามารถระบุตำแหน่งของเอกสารได้ URI ซึ่งทำให้ผู้ใช้เลือกแอปประเภทนี้ได้ยาก ตำแหน่งที่จะบันทึกไฟล์สื่อ
Android 8.0 แก้ปัญหาเหล่านี้โดยปรับปรุงการเข้าถึงพื้นที่เก็บข้อมูล กรอบการทำงาน
ผู้ให้บริการเอกสารที่กำหนดเอง
ตั้งแต่ Android 8.0 เป็นต้นไป เฟรมเวิร์กการเข้าถึงพื้นที่เก็บข้อมูลจะช่วยให้ เอกสารที่กำหนดเอง ของผู้ให้บริการเพื่อสร้างข้อบ่งชี้ไฟล์ที่ค้นหาได้สำหรับไฟล์ที่อยู่ใน แหล่งข้อมูลระยะไกล SAF สามารถเปิดไฟล์เพื่อรับไฟล์แบบเนทีฟที่ค้นหาได้ ข้อบ่งชี้ จากนั้น SAF จะส่งคำขอไบต์ข้อมูลแบบไม่ต่อเนื่องไปยังเอกสาร ฟีเจอร์นี้ช่วยให้ผู้ให้บริการเอกสารแสดงช่วงที่แน่นอนได้ ที่แอปมีเดียเพลเยอร์ได้ร้องขอแทนที่จะแคชทั้งหมด ล่วงหน้า
หากต้องการใช้ฟีเจอร์นี้ คุณต้องเรียกฟิลด์
StorageManager.openProxyFileDescriptor()
วิธี
เมธอด openProxyFileDescriptor()
ยอมรับออบเจ็กต์ ProxyFileDescriptorCallback
เป็น Callback SAF เรียกร้อง
Callback ทุกครั้งที่แอปพลิเคชันไคลเอ็นต์ดำเนินการกับไฟล์บน
ข้อบ่งชี้ไฟล์ที่ส่งคืนจากผู้ให้บริการเอกสาร
การเข้าถึงเอกสารโดยตรง
สำหรับ Android 8.0 (API ระดับ 26) คุณสามารถใช้
getDocumentUri()
วิธีในการ
รับ URI ที่อ้างอิงเอกสารเดียวกันกับ mediaUri
ที่ระบุ
แต่เนื่องจาก URI ที่แสดงผลได้รับการสนับสนุนโดย
DocumentsProvider
ผู้จัดการคอลเล็กชันสื่อสามารถเข้าถึงได้
เอกสารได้โดยตรง โดยไม่ต้องข้ามผ่านต้นไม้ในไดเรกทอรีที่มีขอบเขต
ด้วยเหตุนี้ ผู้จัดการสื่อจึงดำเนินการเกี่ยวกับไฟล์ในเอกสารได้
ได้รวดเร็วยิ่งขึ้น
ข้อควรระวัง: เมธอด getDocumentUri()
จะค้นหาเฉพาะไฟล์สื่อเท่านั้น ไม่ได้ให้สิทธิ์แอป
สิทธิ์การเข้าถึงไฟล์เหล่านั้น ดูข้อมูลเพิ่มเติมเกี่ยวกับวิธีรับสิทธิ์เข้าถึง
สิทธิ์ในไฟล์สื่อ โปรดดูเอกสารอ้างอิง
เส้นทางไปยังเอกสาร
เมื่อใช้เฟรมเวิร์กการเข้าถึงพื้นที่เก็บข้อมูลใน Android 8.0 (API ระดับ 26) คุณสามารถใช้
เมธอด findDocumentPath()
ใช้ได้ในทั้ง 2 เมธอด
DocumentsContract
และ
DocumentsProvider
เพื่อระบุเส้นทางจากรากของระบบไฟล์ที่ระบุ
ID เมธอดจะแสดงเส้นทางนี้ใน
ออบเจ็กต์ DocumentsContract.Path
รายการ ในกรณีที่ไฟล์
ระบบมีเส้นทางที่กำหนดไว้หลายเส้นทางไปยังเอกสารเดียวกัน เมธอดจะแสดง
เส้นทางที่ใช้บ่อยที่สุดในการเข้าถึงเอกสารที่มีรหัสที่กำหนด
ฟังก์ชันนี้จะเป็นประโยชน์อย่างยิ่งในสถานการณ์ต่อไปนี้
- แอปของคุณใช้การ "บันทึกเป็น" กล่องโต้ตอบที่แสดงตำแหน่งของ เอกสารที่ต้องการ
- แอปของคุณแสดงโฟลเดอร์ในมุมมองผลการค้นหาและต้องโหลดรายการย่อย ที่อยู่ในโฟลเดอร์เฉพาะ หากผู้ใช้เลือก โฟลเดอร์
หมายเหตุ: หากแอปมีสิทธิ์เข้าถึงเอกสารบางอย่างเท่านั้น
ในเส้นทาง ค่าที่ส่งกลับ findDocumentPath()
จะรวมเฉพาะ
โฟลเดอร์และเอกสารที่แอปของคุณเข้าถึงได้
การตรวจสอบการเล่นเสียง
บริการของระบบ AudioManager
เก็บรักษารายการ
ออบเจ็กต์ AudioPlaybackConfiguration
ที่ใช้งานอยู่ แต่ละรายการ
มีข้อมูลเกี่ยวกับเซสชันการเล่นเสียงที่เฉพาะเจาะจง แอปของคุณสามารถ
ดึงชุดการกำหนดค่าที่ใช้งานอยู่ในปัจจุบันโดยการเรียกใช้
getActivePlaybackConfigurations()
สำหรับ Android 8.0 (API ระดับ 26) คุณสามารถลงทะเบียน Callback ที่แจ้งเตือน
แอปของคุณเมื่อ
มีการเปลี่ยนแปลง AudioPlaybackConfiguration
ออบเจ็กต์ โดยดำเนินการดังนี้
เรียก registerAudioPlaybackCallback()
ซึ่งผ่านในกรณี
AudioManager.AudioPlaybackCallback
AudioManager.AudioPlaybackCallback
คลาสมีฟังก์ชัน
onPlaybackConfigChanged()
ซึ่งระบบเรียกใช้เมื่อเสียง
การเปลี่ยนแปลงการกำหนดค่าการเล่น
การเชื่อมต่อ
การรับรู้ Wi-Fi
Android 8.0 (API ระดับ 26) เพิ่มการรองรับ Wi-Fi Aware ซึ่งอิงตาม Neighbor ข้อกำหนดเฉพาะสำหรับเครือข่ายการรับรู้ (NAN) ในอุปกรณ์ที่มี ฮาร์ดแวร์ Wi-Fi Aware, แอป และอุปกรณ์ที่อยู่ใกล้เคียงสามารถค้นพบและสื่อสารได้ ผ่าน Wi-Fi โดยไม่ต้องใช้จุดเชื่อมต่ออินเทอร์เน็ต เรากำลังพัฒนาฮาร์ดแวร์ เพื่อนำเทคโนโลยี Wi-Fi Aware มาใช้กับอุปกรณ์ได้โดยเร็วที่สุด สำหรับ เกี่ยวกับวิธีผสานรวม Wi-Fi Aware ในแอปของคุณ โปรดดูที่ Wi-Fi Aware
บลูทูธ
Android 8.0 (API ระดับ 26) เพิ่มการรองรับบลูทูธของแพลตฟอร์มด้วยการเพิ่มสิ่งต่อไปนี้ ได้แก่
- รองรับมาตรฐาน AVRCP 1.4 ซึ่งช่วยให้เรียกดูคลังเพลงได้
- รองรับมาตรฐานบลูทูธพลังงานต่ำ (BLE) 5.0
- การผสานรวมตัวแปลงรหัส Sony LDAC เข้ากับสแต็กบลูทูธ
การจับคู่อุปกรณ์ที่ใช้ร่วมกัน
Android 8.0 (API ระดับ 26) มี API ที่ช่วยให้คุณปรับแต่ง กล่องโต้ตอบคำขอจับคู่เมื่อพยายามจับคู่กับอุปกรณ์ที่ใช้ร่วมกันผ่าน บลูทูธ, BLE และ Wi-Fi สำหรับข้อมูลเพิ่มเติม โปรดดู อุปกรณ์ที่ใช้ร่วมกัน กำลังจับคู่อุปกรณ์
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการใช้บลูทูธใน Android โปรดดู คำแนะนำบลูทูธ สำหรับ การเปลี่ยนแปลงในบลูทูธที่มีเฉพาะใน Android 8.0 (API ระดับ 26) โปรดดู ส่วนบลูทูธของ หน้าการเปลี่ยนแปลงลักษณะการทำงานของ Android 8.0
การแชร์
การแชร์อัจฉริยะ
Android 8.0 (API ระดับ 26) เรียนรู้เกี่ยวกับผู้ใช้ การแชร์ที่ปรับเปลี่ยนในแบบของคุณ ที่เหมาะสม และเข้าใจได้ดีขึ้นสำหรับเนื้อหาแต่ละประเภท ที่จะแชร์ด้วย เช่น หากผู้ใช้ถ่ายภาพใบเสร็จ Android 8.0 สามารถแนะนำแอปติดตามค่าใช้จ่ายได้ หากผู้ใช้ถ่ายเซลฟี โซเชียลมีเดีย จัดการกับรูปภาพได้ดีขึ้น Android 8.0 จะเรียนรู้ทั้งหมดนี้โดยอัตโนมัติ รูปแบบตามผู้ใช้ ค่ากำหนดที่ปรับเปลี่ยนในแบบของคุณ
การแชร์อัจฉริยะใช้ได้กับเนื้อหาประเภทอื่นๆ นอกเหนือจาก image
เช่น
audio
, video
, text
, URL
อื่นๆ
หากต้องการเปิดใช้การแชร์อัจฉริยะ ให้เพิ่มArrayList
ได้สูงสุด 3 บัญชี
สตริงคำอธิบายประกอบที่สื่อถึง Intent ที่แชร์เนื้อหานั้น คำอธิบายประกอบควร
อธิบายส่วนประกอบหรือหัวข้อหลักๆ ในเนื้อหา ตัวอย่างโค้ดต่อไปนี้
แสดงวิธีการเพิ่มคำอธิบายประกอบให้กับ Intent ดังนี้
Kotlin
val annotations: ArrayList<String> = arrayListOf( "topic1", "topic2", "topic3" ) intent.putStringArrayListExtra( Intent.EXTRA_CONTENT_ANNOTATIONS, annotations )
Java
ArrayList<String> annotations = new ArrayList<>(); annotations.add("topic1"); annotations.add("topic2"); annotations.add("topic3"); intent.putStringArrayListExtra( Intent.EXTRA_CONTENT_ANNOTATIONS, annotations );
โปรดดูข้อมูลโดยละเอียดเกี่ยวกับคำอธิบายประกอบของการแชร์อัจฉริยะที่หัวข้อ
EXTRA_CONTENT_ANNOTATIONS
ตัวแยกประเภทข้อความ
ในอุปกรณ์ที่ใช้งานร่วมกันได้ แอปสามารถใช้ตัวแยกประเภทข้อความใหม่เพื่อตรวจสอบว่า
สตริงตรงกับประเภทเอนทิตีตัวแยกประเภทที่รู้จักและรับการเลือกที่แนะนำ
ทางเลือก เอนทิตีที่ระบบรู้จัก ได้แก่ ที่อยู่, URL,
หมายเลขโทรศัพท์ และที่อยู่อีเมล สำหรับข้อมูลเพิ่มเติม โปรดดู
TextClassifier
การช่วยเหลือพิเศษ
Android 8.0 (API ระดับ 26) รองรับฟีเจอร์การช่วยเหลือพิเศษใหม่ๆ มากมายสำหรับ นักพัฒนาซอฟต์แวร์ที่สร้างบริการการช่วยเหลือพิเศษของตนเอง
- หมวดหมู่ปริมาณการขายใหม่สำหรับปรับ การช่วยเหลือพิเศษ ระดับเสียง
- ลายนิ้วมือ ท่าทางสัมผัสเป็นกลไกการป้อนข้อมูล
- หลายภาษา การอ่านออกเสียงข้อความ
- การทำงานผ่านฮาร์ดแวร์ การช่วยเหลือพิเศษ ทางลัดเพื่อเข้าถึงบริการการช่วยเหลือพิเศษที่ต้องการได้อย่างรวดเร็ว
- การสนับสนุนสำหรับ ต่อ ท่าทางสัมผัส หรือเส้นโครงร่างแบบเป็นโปรแกรม
- CANNOT TRANSLATE การช่วยเหลือพิเศษ ปุ่มสำหรับเรียกใช้ฟีเจอร์การช่วยเหลือพิเศษที่เปิดใช้หลายรายการ (ใช้ได้เฉพาะในอุปกรณ์ที่ใช้พื้นที่การนำทางที่แสดงผลด้วยซอฟต์แวร์)
- เป็นไปตามมาตรฐาน ค่าของช่วงด้านเดียว
- ฟีเจอร์มากมายสำหรับ กำลังประมวลผล ข้อความได้ง่ายขึ้น รวมถึงข้อความบอกใบ้และตำแหน่งของข้อความบนหน้าจอ อักขระ
ความปลอดภัยและความเป็นส่วนตัว
สิทธิ์
Android 8.0 (API ระดับ 26) มาพร้อมกับสิทธิ์ใหม่ๆ มากมายที่เกี่ยวข้องกับโทรศัพท์ ดังนี้
-
สิทธิ์
ANSWER_PHONE_CALLS
อนุญาตให้แอปรับสายได้ รับสายเรียกเข้าแบบเป็นโปรแกรม วิธีจัดการกับสายเรียกเข้าใน คุณสามารถใช้acceptRingingCall()
-
สิทธิ์
READ_PHONE_NUMBERS
ให้สิทธิ์อ่านแอปแก่ หมายเลขโทรศัพท์ที่จัดเก็บไว้ในอุปกรณ์
ทั้งสิทธิ์เหล่านี้จัดประเภทเป็น
อันตราย
และเป็นส่วนหนึ่งของ
PHONE
กลุ่มสิทธิ์
API สำหรับการเข้าถึงและการค้นพบบัญชีใหม่
Android 8.0 (API ระดับ 26) มีการปรับปรุงหลายอย่างที่ช่วยให้ แอปจะเข้าถึงบัญชีผู้ใช้ได้ สำหรับบัญชีที่พวกเขาจัดการ เครื่องมือตรวจสอบสิทธิ์สามารถใช้นโยบายของตนเองเพื่อตัดสินใจว่าจะซ่อนบัญชีหรือไม่ หรือเปิดเผยบัญชีแก่แอป ระบบ Android ติดตามแอปพลิเคชันที่สามารถ เข้าถึงบัญชีใดบัญชีหนึ่งได้
ใน Android เวอร์ชันก่อนหน้า แอปที่ต้องการติดตามรายการ
บัญชีผู้ใช้จะได้รับการอัปเดตเกี่ยวกับทุกบัญชี รวมถึงบัญชีที่มี
ประเภทที่ไม่เกี่ยวข้อง Android 8.0 เพิ่ม
addOnAccountsUpdatedListener(android.accounts.OnAccountsUpdateListener, android.os.Handler, boolean, java.lang.String[])
ซึ่งช่วยให้แอปสามารถระบุรายการประเภทบัญชี
ที่ควรรับการเปลี่ยนแปลงในบัญชี
การเปลี่ยนแปลง API
AccountManager เสนอวิธีการใหม่ 6 วิธีเพื่อช่วย Authenticator จัดการ แอปสามารถดูบัญชีได้ดังนี้
setAccountVisibility(android.accounts.Account, java.lang.String, int)
: ตั้งค่าระดับการมองเห็นสำหรับบัญชีผู้ใช้และแพ็กเกจที่เจาะจง ชุดค่าผสม-
getAccountVisibility(android.accounts.Account, java.lang.String)
: รับระดับการมองเห็นสำหรับบัญชีผู้ใช้และแพ็กเกจที่ระบุ ชุดค่าผสม -
getAccountsAndVisibilityForPackage(java.lang.String, java.lang.String)
: ช่วยให้ Authenticator รับบัญชีและระดับการมองเห็น แพ็กเกจที่ให้มา -
getPackagesAndVisibilityForAccount(android.accounts.Account)
: อนุญาตให้ Authenticator รับค่าการเปิดเผยที่จัดเก็บไว้สำหรับบัญชีที่กำหนด -
addAccountExplicitly(android.accounts.Account, java.lang.String, android.os.Bundle, java.util.Map<java.lang.String, java.lang.Integer>)
: อนุญาตให้ Authenticator เริ่มต้นค่าการเปิดเผยของบัญชี -
addOnAccountsUpdatedListener(android.accounts.OnAccountsUpdateListener, android.os.Handler, boolean, java.lang.String[])
: เพิ่ม ListenerOnAccountsUpdateListener
ไปยัง ออบเจ็กต์AccountManager
รายการ ระบบจะเรียก Listener นี้ เมื่อใดก็ตามที่รายการบัญชีในอุปกรณ์มีการเปลี่ยนแปลง
Android 8.0 (API ระดับ 26) ใช้ค่าชื่อแพ็กเกจพิเศษ 2 ค่าเพื่อระบุระดับการเข้าถึง
ระดับสำหรับแอปพลิเคชันที่ไม่ได้ตั้งค่าโดยใช้
setAccountVisibility(android.accounts.Account, java.lang.String, int)
PACKAGE_NAME_KEY_LEGACY_VISIBLE
ค่าระดับการเข้าถึงจะมีผลกับแอปที่มี
วันที่ GET_ACCOUNTS
และเวอร์ชันเป้าหมายของ
Android ต่ำกว่า Android 8.0 หรือเจ้าของ
ลายเซ็นจะตรงกับ Authenticator ที่กําหนดเป้าหมายเป็น Android เวอร์ชันใดก็ตาม
PACKAGE_NAME_KEY_LEGACY_NOT_VISIBLE
กำหนดค่าระดับการเข้าถึงเริ่มต้นสำหรับ
แอปที่ก่อนหน้านี้ไม่ได้ตั้งค่าไว้ และแอปใด
PACKAGE_NAME_KEY_LEGACY_VISIBLE
ไม่ใช่
ที่เกี่ยวข้อง
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการเข้าถึงบัญชีใหม่และการค้นพบ API โปรดดูที่
ข้อมูลอ้างอิงสำหรับ
AccountManager
และ
OnAccountsUpdateListener
การทดสอบ
การทดสอบการวัดคุม
Android 8.0 (API ระดับ 26) ให้การสนับสนุนเพิ่มเติมต่อไปนี้สำหรับแอปของคุณ ของ Google Analytics
ทำงานโดยใช้กระบวนการของแอปที่ไม่ใช่ค่าเริ่มต้น
ตอนนี้คุณสามารถระบุได้ว่าควรใช้การทดสอบการใช้เครื่องมือหนึ่งๆ กับ กระบวนการที่อยู่นอกกระบวนการเริ่มต้นของแอป การกำหนดค่านี้มีประโยชน์ในกรณีต่อไปนี้ แอปมีกิจกรรมหลายอย่างที่ทำงานในกระบวนการที่ต่างกัน
หากต้องการกำหนดการใช้เครื่องมือสำหรับกระบวนการที่ไม่ใช่ค่าเริ่มต้น ให้ไปที่ไฟล์ Manifest
แล้วไปยังไฟล์
<instrumentation>
เพิ่ม
android:targetProcess
และตั้งค่าเป็น 1 ใน
ดังต่อไปนี้
- ชื่อของกระบวนการหนึ่งๆ
- รายการชื่อกระบวนการที่คั่นด้วยคอมมา
- ไวลด์การ์ด (
"*"
) ซึ่งช่วยให้เครื่องมือทํางานได้ เทียบกับกระบวนการที่เปิดอยู่ซึ่งเรียกใช้โค้ดในแพ็กเกจที่ระบุในandroid:targetPackage
ขณะที่ทดสอบการใช้เครื่องมืออยู่ คุณตรวจสอบได้ว่ากระบวนการใด
กำลังทดสอบโดยโทรหา getProcessName()
รายงานผลลัพธ์ระหว่างการทดสอบ
ตอนนี้คุณรายงานผลลัพธ์ขณะที่การทดสอบการใช้เครื่องมือทำงานอยู่ได้แล้ว
โดยโทรหา addResults()
แทนหลังจากนั้น
จำลองความตั้งใจสำหรับการทดสอบ
ช่วยให้สร้างการทดสอบ UI แยกอิสระสำหรับแอป
กิจกรรม Android 8.0 (API ระดับ 26) เปิดตัว
onStartActivity()
วิธี คุณลบล้างเมธอดนี้ในคลาสย่อยที่กำหนดเองของ
Instrumentation.ActivityMonitor
ชั้นเรียนเพื่อจัดการเฉพาะ
ที่คลาสทดสอบเรียกใช้
เมื่อคลาสการทดสอบเรียกใช้ Intent เมธอดจะแสดงต้นขั้ว
Instrumentation.ActivityResult
แทนการดำเนินการ
ที่ตัวความตั้งใจเอง เมื่อใช้ตรรกะความตั้งใจจำลองนี้ในการทดสอบ คุณจะสามารถโฟกัส
เกี่ยวกับวิธีเตรียมกิจกรรมและจัดการความตั้งใจที่คุณส่งไปยัง
กิจกรรมที่ต่างกันหรือใช้กับแอปอื่นโดยสิ้นเชิง
รันไทม์และ เครื่องมือ
การเพิ่มประสิทธิภาพแพลตฟอร์ม
Android 8.0 (API ระดับ 26) นำรันไทม์และการเพิ่มประสิทธิภาพอื่นๆ มาสู่แพลตฟอร์มที่ ทำให้ประสิทธิภาพดีขึ้นหลายประการ การเพิ่มประสิทธิภาพเหล่านี้รวมถึงการเก็บขยะแบบบีบอัดพร้อมกัน การใช้หน่วยความจำและตำแหน่งที่ตั้งของโค้ดอย่างมีประสิทธิภาพยิ่งขึ้น
การเพิ่มประสิทธิภาพเหล่านี้ช่วยให้เปิดเครื่องได้เร็วขึ้น และช่วยให้การทำงานทั้ง ระบบปฏิบัติการและแอป
การสนับสนุนภาษา Java ที่ได้รับการอัปเดต
Android 8.0 (API ระดับ 26) เพิ่มการรองรับ OpenJDK Java API เพิ่มเติมหลายรายการ ดังนี้
java.time
จาก OpenJDK 8java.nio.file
และjava.lang.invoke
จาก OpenJDK 7
หากต้องการเรียนรู้เพิ่มเติมเกี่ยวกับคลาสและวิธีการภายในที่เพิ่มเข้ามาใหม่เหล่านี้ โปรดดูเอกสารอ้างอิง API
หากต้องการ ที่ใช้ฟีเจอร์ภาษาของ Java 8 ใน Android Studio คุณควร ดาวน์โหลดเวอร์ชันตัวอย่างล่าสุด
อัปเดต API เฟรมเวิร์ก Android ของ ICU4J
Android 8.0 (API ระดับ 26) ขยาย
เฟรมเวิร์ก Android ICU4J
API ซึ่งเป็นชุดย่อยของ ICU4J API สำหรับนักพัฒนาแอปเพื่อ
ใช้ในแพ็กเกจ android.icu
API เหล่านี้ใช้ข้อมูลการแปล
บนอุปกรณ์ ดังนั้นคุณจะสามารถลดรอยเท้า APK ด้วยการไม่คอมไพล์
ไลบรารี ICU4J ใน APK ของคุณ
ตาราง 1 เวอร์ชัน ICU, CLDR และ Unicode ที่ใช้ ใน Android
ระดับ API ของ Android | เวอร์ชัน ICU | เวอร์ชัน CLDR | เวอร์ชัน Unicode |
---|---|---|---|
Android 7.0 (API ระดับ 24), Android 7.1 (API ระดับ 25) | 56 | 28 | 8.0 |
Android 8.0 (API ระดับ 26) | 58.2 | 30.0.3 | 9.0 |
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการปรับให้เป็นสากลบน Android ซึ่งรวมถึง การสนับสนุน ICU4J โปรดดู การทำให้เป็นสากลบน Android
Android Enterprise
เปิดตัวฟีเจอร์สำหรับองค์กรและ API ใหม่สำหรับอุปกรณ์ที่ใช้ Android 8.0 (API ระดับ 26) ไฮไลต์มีดังนี้
- โปรไฟล์งานในอุปกรณ์ที่มีการจัดการครบวงจรช่วยให้องค์กรแยกงานออกจาก ข้อมูลส่วนตัวในขณะที่จัดการทั้ง 2 อย่าง
- การมอบสิทธิ์ API ช่วยให้เจ้าของอุปกรณ์และเจ้าของโปรไฟล์กำหนดแอปได้ ไปยังแอปพลิเคชันอื่นได้ด้วย
- การปรับปรุงประสบการณ์ของผู้ใช้ในขั้นตอนการจัดสรร (รวมถึง ตัวเลือกการกำหนดค่าเอง) ซึ่งช่วยลดเวลาในการตั้งค่าได้
- การควบคุมแบบใหม่ผ่านบลูทูธ, Wi-Fi, การสำรองข้อมูล และการรักษาความปลอดภัยช่วยให้องค์กรต่างๆ ได้ จัดการอุปกรณ์ได้มากขึ้น การบันทึกกิจกรรมในเครือข่ายช่วยให้องค์กรติดตามได้ ปัญหาลง
หากต้องการดูข้อมูลเพิ่มเติมเกี่ยวกับ API และฟีเจอร์ใหม่อื่นๆ ของ Android Enterprise ดู Android ใน Enterprise