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()
เพื่อตั้งค่าข้อความที่จะปรากฏเมื่อคุณสร้างลิงก์ไปยังการตั้งค่าการแจ้งเตือนของแอปจากการแจ้งเตือนโดยใช้ IntentNotification.INTENT_CATEGORY_NOTIFICATION_PREFERENCES
ระบบอาจระบุข้อมูลเพิ่มเติมต่อไปนี้โดยมีจุดประสงค์เพื่อกรองการตั้งค่าที่แอปต้องแสดงต่อผู้ใช้ ได้แก่EXTRA_CHANNEL_ID
,NOTIFICATION_TAG
และNOTIFICATION_ID
- การปิดการแจ้งเตือน: ผู้ใช้จะปิดการแจ้งเตือนด้วยตนเองได้ และ
นำแอปออกแบบเป็นโปรแกรมได้ คุณกำหนดเวลาที่การแจ้งเตือนได้
ถูกปิด และเหตุใดจึงปิดโดยใช้
onNotificationRemoved()
จาก ชั้นเรียนNotificationListenerService
- สีพื้นหลัง: คุณสามารถตั้งค่าและเปิดใช้สีพื้นหลังสำหรับ
การแจ้งเตือน คุณควรใช้ฟีเจอร์นี้ในการแจ้งเตือนสำหรับงานที่กำลังดำเนินอยู่ซึ่งสำคัญต่อผู้ใช้ที่จะเห็นข้อมูลโดยย่อ เช่น คุณอาจตั้งค่าสีพื้นหลังสำหรับการแจ้งเตือนที่เกี่ยวข้องกับเส้นทางการขับรถหรือการโทรที่กำลังดำเนินอยู่ คุณยังสามารถตั้งค่า
สีพื้นหลังที่ต้องการโดยใช้
setColor()
ซึ่งจะช่วยให้คุณใช้setColorized()
เพื่อเปิดใช้สีพื้นหลังสำหรับการแจ้งเตือนได้ - รูปแบบการรับส่งข้อความ: ใน Android 8.0 การแจ้งเตือนที่ใช้คลาส
MessagingStyle
จะแสดงเนื้อหาเพิ่มเติมในรูปแบบแบบยุบ คุณควรใช้MessagingStyle
ชั้นเรียนสำหรับ การแจ้งเตือนที่เกี่ยวข้องกับการรับส่งข้อความ คุณยังสามารถใช้addHistoricMessage()
วิธีในการให้บริบทในการสนทนาด้วยการเพิ่ม ข้อความที่ผ่านมาไปจนถึงการแจ้งเตือนที่เกี่ยวข้องกับการรับส่งข้อความ

ผู้ใช้กดไอคอนตัวเปิดแอปค้างไว้เพื่อดูการแจ้งเตือนใน 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
ที่แสดงเนื้อหาเว็บในแอป ซึ่งได้แก่
- Version API
- Google SafeBrowsing API
- 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 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 Support Library มาพร้อมกับ Android 8.0
AnimatorSet
ตั้งแต่ Android 8.0 (API ระดับ 26) เป็นต้นไป AnimatorSet
API จะรองรับการค้นหาและการเล่นใน
สลับกัน การกรอวิดีโอช่วยให้คุณกำหนดตำแหน่งของภาพเคลื่อนไหวที่ตั้งค่าเป็น
ช่วงเวลาหนึ่ง การเล่นย้อนกลับจะมีประโยชน์หากแอปของคุณมีภาพเคลื่อนไหวสำหรับการดำเนินการที่เลิกทำได้ แทนที่จะกำหนดภาพเคลื่อนไหว 2 ภาพแยกกัน
คุณก็สามารถเล่นชุดเดิมสลับกัน
การป้อนข้อมูลและการนำทาง
กลุ่มการนำทางด้วยแป้นพิมพ์
หากกิจกรรมในแอปใช้ลำดับชั้นการแสดงผลที่ซับซ้อน เช่น กิจกรรมในลำดับชั้น รูปที่ 2 ลองจัดกลุ่มองค์ประกอบ UI ให้เป็นคลัสเตอร์เพื่อให้ง่ายขึ้น การไปยังส่วนต่างๆ ด้วยแป้นพิมพ์ ผู้ใช้สามารถกด Meta+Tab หรือ Search+Tab ได้ อุปกรณ์ Chromebook สำหรับการไปยังส่วนต่างๆ จากคลัสเตอร์หนึ่งไปยังอีกคลัสเตอร์ ตัวอย่างที่ดีของคลัสเตอร์ ได้แก่ แผงด้านข้าง แถบนําทาง พื้นที่เนื้อหาหลัก และองค์ประกอบที่อาจมีองค์ประกอบย่อยจํานวนมาก

หากต้องการทําให้องค์ประกอบ 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()
เนื่องจาก getAllocatableBytes(UUID)
จะพิจารณาข้อมูลที่แคชไว้ซึ่งระบบยินดีล้างข้อมูลในนามของคุณ
การแบ่งหน้าของผู้ให้บริการเนื้อหา
เราได้อัปเดตผู้ให้บริการเนื้อหาเพื่อให้รองรับการโหลด ชุดข้อมูลครั้งละ 1 หน้า เช่น แอปรูปภาพที่มีรูปภาพหลายพันรูปสามารถค้นหาข้อมูลชุดย่อยเพื่อแสดงในหน้าเว็บ หน้าผลการค้นหาแต่ละหน้าซึ่งแสดงโดยผู้ให้บริการเนื้อหาจะแสดงด้วยออบเจ็กต์เคอร์เซอร์รายการเดียว ทั้งลูกค้าและผู้ให้บริการต้องใช้การแบ่งหน้าเพื่อใช้ประโยชน์จาก ฟีเจอร์นี้
สำหรับข้อมูลโดยละเอียดเกี่ยวกับการเปลี่ยนแปลงผู้ให้บริการเนื้อหา โปรดดู
ContentProvider
และ
ContentProviderClient
คำขอรีเฟรชเนื้อหา
ตอนนี้คลาส ContentProvider
และ ContentResolver
แต่ละคลาสมีเมธอด refresh()
อยู่แล้ว ซึ่งช่วยให้ลูกค้าทราบได้ง่ายขึ้นว่าข้อมูลที่ขอเป็นข้อมูลล่าสุดหรือไม่
คุณสามารถเพิ่มตรรกะการรีเฟรชเนื้อหาที่กำหนดเองได้โดยขยาย
ContentProvider
ตรวจสอบว่าคุณลบล้างเมธอด refresh()
เพื่อแสดงผล true
ซึ่งจะบ่งบอกให้ลูกค้าของผู้ให้บริการทราบว่าคุณได้พยายามรีเฟรชข้อมูลด้วยตนเองแล้ว
แอปไคลเอ็นต์ขอเนื้อหาที่รีเฟรชได้อย่างชัดแจ้งโดยเรียกใช้
วิธีอื่นที่เรียกอีกอย่างว่า
refresh()
เมื่อโทรหารายการนี้
ส่งใน URI ของข้อมูลที่จะรีเฟรช
หมายเหตุ: เนื่องจากคุณอาจขอข้อมูลผ่านเครือข่าย
คุณควรเรียกใช้ refresh()
จาก
ฝั่งไคลเอ็นต์เฉพาะเมื่อมีข้อความที่ชัดเจนว่าเนื้อหาเก่า
สาเหตุที่พบบ่อยที่สุดในการรีเฟรชเนื้อหาประเภทนี้คือ
ปัดเพื่อรีเฟรช
เพื่อแสดง UI ล่าสุดอย่างชัดเจน
เพื่อให้แสดงเนื้อหาที่อัปเดต
การปรับปรุง JobScheduler
Android 8.0 (API ระดับ 26) มีการปรับปรุง JobScheduler
หลายรายการ การปรับปรุงเหล่านี้ช่วยให้แอปของคุณปฏิบัติตามขีดจำกัดการเรียกใช้เบื้องหลังใหม่ได้ง่ายขึ้น เนื่องจากโดยทั่วไปแล้วคุณสามารถใช้งานที่ตั้งเวลาไว้แทนบริการที่ทำงานอยู่เบื้องหลังหรือ Broadcast Receiver ที่ไม่ระบุซึ่งถูกจำกัดในตอนนี้
การอัปเดต 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 การช่วยเหลือพิเศษ ปุ่มสำหรับเรียกใช้ฟีเจอร์การช่วยเหลือพิเศษที่เปิดใช้หลายรายการ (ใช้ได้เฉพาะในอุปกรณ์ที่ใช้พื้นที่การนำทางที่แสดงผลด้วยซอฟต์แวร์)
- ค่าช่วงแบบ 1 ด้านที่มาตรฐาน
- ฟีเจอร์ต่างๆ สำหรับการประมวลผลข้อความได้ง่ายขึ้น ซึ่งรวมถึงข้อความบอกใบ้และตำแหน่งของตัวอักษรในข้อความบนหน้าจอ
ความปลอดภัยและความเป็นส่วนตัว
สิทธิ์
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)
: อนุญาตให้โปรแกรมตรวจสอบสิทธิ์รับค่าระดับการเข้าถึงที่จัดเก็บไว้สำหรับบัญชีหนึ่งๆ -
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[])
: เพิ่มOnAccountsUpdateListener
listener ไปยังออบเจ็กต์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) ให้การรองรับเพิ่มเติมต่อไปนี้สําหรับการทดสอบเครื่องมือวัดผลของแอป
ทำงานโดยใช้กระบวนการของแอปที่ไม่ใช่ค่าเริ่มต้น
ตอนนี้คุณระบุได้ว่าการทดสอบเครื่องมือวัดค่าหนึ่งๆ ควรทํางานกับกระบวนการนอกกระบวนการเริ่มต้นของแอป การกำหนดค่านี้มีประโยชน์ในกรณีต่อไปนี้ แอปมีกิจกรรมหลายอย่างที่ทำงานในกระบวนการที่ต่างกัน
หากต้องการกำหนดเครื่องมือวัดผลกระบวนการที่ไม่ใช่ค่าเริ่มต้น ให้ไปที่ไฟล์ Manifest แล้วไปที่องค์ประกอบ
<instrumentation>
ที่ต้องการ เพิ่มแอตทริบิวต์ android:targetProcess
แล้วตั้งค่าแอตทริบิวต์เป็นค่าใดค่าหนึ่งต่อไปนี้
- ชื่อของกระบวนการหนึ่งๆ
- รายการชื่อกระบวนการที่คั่นด้วยคอมมา
- ไวลด์การ์ด (
"*"
) ซึ่งช่วยให้เครื่องมือทํางานได้ เทียบกับกระบวนการที่เปิดอยู่ซึ่งเรียกใช้โค้ดในแพ็กเกจที่ระบุในandroid:targetPackage
ขณะทำการทดสอบเครื่องมือวัดผล คุณสามารถตรวจสอบกระบวนการที่กำลังทดสอบได้โดยเรียกใช้ getProcessName()
รายงานผลลัพธ์ระหว่างการทดสอบ
ตอนนี้คุณรายงานผลลัพธ์ขณะที่การทดสอบการใช้เครื่องมือทำงานอยู่ได้แล้ว
โดยโทรหา addResults()
แทนหลังจากนั้น
จำลอง Intent สำหรับการทดสอบ
Android 8.0 (API ระดับ 26) เปิดตัวเมธอด onStartActivity()
เพื่อช่วยให้คุณสร้างการทดสอบ UI แบบแยกต่างหากสําหรับกิจกรรมของแอปได้ง่ายขึ้น คุณลบล้างเมธอดนี้ในคลาสย่อยที่กำหนดเองของ
Instrumentation.ActivityMonitor
ชั้นเรียนเพื่อจัดการเฉพาะ
ที่คลาสทดสอบเรียกใช้
เมื่อคลาสทดสอบเรียกใช้ Intent เมธอดจะแสดงผลออบเจ็กต์สตับ Instrumentation.ActivityResult
แทนที่จะเรียกใช้ Intent เอง เมื่อใช้ตรรกะความตั้งใจจำลองนี้ในการทดสอบ คุณจะมุ่งเน้นไปที่
เกี่ยวกับวิธีเตรียมกิจกรรมและจัดการความตั้งใจที่คุณส่งไปยัง
กิจกรรมที่ต่างกันหรือใช้กับแอปอื่นโดยสิ้นเชิง
รันไทม์และ เครื่องมือ
การเพิ่มประสิทธิภาพแพลตฟอร์ม
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) ขยายAPI ของเฟรมเวิร์ก ICU4J สำหรับ Android ซึ่งเป็นชุดย่อยของ 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