API ของ Android 5.0

ระดับ API: 21

Android 5.0 (LOLLIPOP) นำเสนอฟีเจอร์ใหม่ๆ ให้แก่ผู้ใช้และนักพัฒนาแอป เอกสารนี้จะให้ข้อมูลเบื้องต้นเกี่ยวกับ API ใหม่ที่โดดเด่นที่สุด

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

หากต้องการดูภาพรวมระดับสูงของฟีเจอร์ใหม่ในแพลตฟอร์ม ให้ดูไฮไลต์ของ Android Lollipop แทน

เริ่มพัฒนา

หากต้องการเริ่มสร้างแอปสำหรับ Android 5.0 คุณต้องรับ Android SDK ก่อน จากนั้นใช้ SDK Manager เพื่อดาวน์โหลดแพลตฟอร์ม SDK สำหรับ Android 5.0 และอิมเมจระบบ

อัปเดตระดับ API เป้าหมาย

หากต้องการเพิ่มประสิทธิภาพแอปสำหรับอุปกรณ์ที่ใช้ Android 5.0 ให้ดีขึ้น ให้ตั้งค่า targetSdkVersion เป็น "21" ติดตั้งแอปในภาพระบบ Android 5.0 ทดสอบ แล้วเผยแพร่แอปที่อัปเดตแล้วโดยทำการเปลี่ยนแปลงนี้

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

สำหรับข้อมูลเพิ่มเติมเกี่ยวกับวิธีการทำงานของระดับ API โปรดอ่านระดับ API คืออะไร

การเปลี่ยนแปลงที่สำคัญเกี่ยวกับลักษณะการทำงาน

หากคุณเคยเผยแพร่แอปสำหรับ Android โปรดทราบว่าแอปอาจได้รับผลกระทบจากการเปลี่ยนแปลงใน Android 5.0

โปรดดูข้อมูลทั้งหมดการเปลี่ยนแปลงใน Android 5.0

อินเทอร์เฟซผู้ใช้

การสนับสนุนดีไซน์ Material

Android 5.0 เพิ่มการรองรับสไตล์ดีไซน์ Material ใหม่ของ Android คุณสามารถสร้างแอปที่มีดีไซน์ Material ที่ดูมีชีวิตชีวาและมีการเปลี่ยนองค์ประกอบ UI ที่ให้ความรู้สึกเป็นธรรมชาติสำหรับผู้ใช้ การสนับสนุนดังกล่าวรวมถึงสิ่งต่อไปนี้

  • ธีม Material
  • ดูเงา
  • วิดเจ็ต RecyclerView
  • ภาพเคลื่อนไหวที่วาดได้และเอฟเฟกต์การจัดรูปแบบ
  • ภาพเคลื่อนไหวดีไซน์ Material และเอฟเฟกต์การเปลี่ยนกิจกรรม
  • อนิเมเตอร์สําหรับพร็อพเพอร์ตี้มุมมองตามสถานะของมุมมอง
  • วิดเจ็ต UI และแถบแอปที่ปรับแต่งได้พร้อมชุดสีที่คุณควบคุม
  • ภาพเคลื่อนไหวและไม่ใช่ภาพเคลื่อนไหวที่ถอนออกได้โดยอิงตามกราฟิกเวกเตอร์ XML

ดูข้อมูลเพิ่มเติมเกี่ยวกับการเพิ่มฟังก์ชันการทำงานของ Material Design ลงในแอปได้ที่Material Design

เอกสารและกิจกรรมต่างๆ ที่เกิดขึ้นพร้อมกันในหน้าจอล่าสุด

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

หากต้องการแทรกช่วงพักเชิงตรรกะเพื่อให้ระบบถือว่ากิจกรรมของคุณเป็นงานใหม่ ให้ใช้ FLAG_ACTIVITY_NEW_DOCUMENT เมื่อเปิดกิจกรรมด้วย startActivity() คุณยังใช้ลักษณะการทํางานนี้ได้โดยการตั้งค่าแอตทริบิวต์ documentLaunchMode ขององค์ประกอบ <activity> เป็น "intoExisting" หรือ "always" ในไฟล์ Manifest

คุณสามารถตั้งค่าจำนวนงานสูงสุดจากแอปที่จะให้ปรากฏในหน้าจอนั้นได้เพื่อไม่ให้หน้าจอล่าสุดรก ซึ่งทำได้โดยการตั้งแอตทริบิวต์ <application> android:maxRecents ขีดจำกัดสูงสุดปัจจุบันที่ระบุได้คือ 50 งานต่อผู้ใช้ (25 งานสำหรับอุปกรณ์ที่มี RAM ต่ำ)

คุณสามารถตั้งค่างานในหน้าจอล่าสุดให้คงอยู่ตลอดการรีบูตได้ หากต้องการควบคุมลักษณะการคงอยู่ ให้ใช้แอตทริบิวต์ android:persistableMode นอกจากนี้คุณยังเปลี่ยนคุณสมบัติการมองเห็นของกิจกรรมในหน้าจอล่าสุดได้ด้วย เช่น สี ป้ายกำกับ และไอคอนของกิจกรรม ด้วยการเรียกใช้เมธอด setTaskDescription()

การอัปเดต WebView

Android 5.0 อัปเดตการใช้งาน WebView เป็น Chromium M37 ซึ่งจะเพิ่มประสิทธิภาพด้านความปลอดภัยและความเสถียร รวมถึงแก้ไขข้อบกพร่อง สตริง User-Agent เริ่มต้นสำหรับ WebView ที่ทำงานบน Android 5.0 ได้รับการอัปเดตให้รวม 37.0.0.0 เป็นหมายเลขเวอร์ชัน

เวอร์ชันนี้เปิดตัวคลาส PermissionRequest ซึ่งช่วยให้แอปของคุณสามารถให้สิทธิ์ WebView ในการเข้าถึงทรัพยากรที่ได้รับการคุ้มครอง เช่น กล้องและไมโครโฟน ผ่าน Web API เช่น getUserMedia() แอปของคุณต้องมีสิทธิ์ Android ที่เหมาะสมสำหรับทรัพยากรเหล่านี้จึงจะมอบสิทธิ์ให้กับ WebView ได้

เมื่อใช้เมธอด onShowFileChooser() ใหม่แล้ว คุณจะใช้ช่องแบบฟอร์มการป้อนข้อมูลใน WebView และเปิดเครื่องมือเลือกไฟล์เพื่อเลือกรูปภาพและไฟล์จากอุปกรณ์ Android ได้

นอกจากนี้ รุ่นนี้ยังรองรับมาตรฐานแบบเปิด WebAudio, WebGL และ WebRTC หากต้องการเรียนรู้เพิ่มเติมเกี่ยวกับฟีเจอร์ใหม่ที่รวมอยู่ในรุ่นนี้ โปรดดู WebView สำหรับ Android

การจับภาพหน้าจอและการแชร์

Android 5.0 ให้คุณเพิ่มความสามารถในการจับภาพและการแชร์หน้าจอในแอปด้วย android.media.projection API ใหม่ ฟังก์ชันการทำงานนี้มีประโยชน์ เช่น หากต้องการเปิดใช้การแชร์หน้าจอในแอปการประชุมทางวิดีโอ

เมธอด createVirtualDisplay() ใหม่ช่วยให้แอปบันทึกเนื้อหาของหน้าจอหลัก (จอแสดงผลเริ่มต้น) ลงในออบเจ็กต์ Surface ซึ่งจากนั้นแอปจะส่งผ่านเครือข่ายได้ API นี้อนุญาตให้จับภาพเนื้อหาบนหน้าจอที่ไม่ปลอดภัยเท่านั้น และจะไม่อนุญาตให้จับเสียงของระบบ หากต้องการเริ่มจับภาพหน้าจอ แอปของคุณต้องขอสิทธิ์จากผู้ใช้ก่อนโดยเปิดกล่องโต้ตอบการจับภาพหน้าจอโดยใช้Intentที่ได้รับผ่านcreateScreenCaptureIntent()วิธี

ดูตัวอย่างวิธีใช้ API ใหม่ได้ที่คลาส MediaProjectionDemo ในโปรเจ็กต์ตัวอย่าง

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

การแจ้งเตือนบนหน้าจอล็อก

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

แอปของคุณควบคุมระดับรายละเอียดที่มองเห็นได้เมื่อแสดงการแจ้งเตือนบนหน้าจอล็อกที่ปลอดภัยได้ หากต้องการควบคุมระดับการมองเห็น ให้เรียกใช้ setVisibility() และระบุค่าใดค่าหนึ่งต่อไปนี้

  • VISIBILITY_PRIVATE: แสดงข้อมูลพื้นฐาน เช่น ไอคอนการแจ้งเตือน แต่ซ่อนเนื้อหาทั้งหมดของการแจ้งเตือน
  • VISIBILITY_PUBLIC: แสดงเนื้อหาทั้งหมดของการแจ้งเตือน
  • VISIBILITY_SECRET: ไม่แสดงข้อมูลใดๆ แม้แต่ไอคอนการแจ้งเตือน

เมื่อระดับการมองเห็นเป็น VISIBILITY_PRIVATE คุณจะระบุเนื้อหาการแจ้งเตือนเวอร์ชันปกปิดซึ่งซ่อนรายละเอียดส่วนตัวได้ด้วย เช่น แอป SMS อาจแสดงการแจ้งเตือนที่แจ้งว่า "คุณมีข้อความใหม่ 3 ข้อความ" แต่ซ่อนเนื้อหาข้อความและผู้ส่ง หากต้องการระบุการแจ้งเตือนทางเลือกนี้ ให้สร้างการแจ้งเตือนทดแทนโดยใช้ Notification.Builder ก่อน เมื่อคุณสร้างออบเจ็กต์การแจ้งเตือนส่วนตัว ให้แนบการแจ้งเตือนการเปลี่ยนทดแทนมากับออบเจ็กต์ผ่านเมธอด setPublicVersion()

ข้อมูลเมตาการแจ้งเตือน

Android 5.0 ใช้ข้อมูลเมตาที่เชื่อมโยงกับการแจ้งเตือนของแอป เพื่อจัดเรียงการแจ้งเตือนอย่างชาญฉลาดยิ่งขึ้น หากต้องการตั้งค่าข้อมูลเมตา ให้เรียกใช้เมธอดต่อไปนี้ใน Notification.Builder เมื่อคุณสร้างการแจ้งเตือน

  • setCategory(): บอกระบบให้ทราบถึงวิธีจัดการการแจ้งเตือนของแอปเมื่ออุปกรณ์อยู่ในโหมดลำดับความสำคัญ (เช่น หากการแจ้งเตือนแสดงถึงสายเรียกเข้า ข้อความโต้ตอบแบบทันที หรือการปลุก)
  • setPriority(): ทำเครื่องหมายการแจ้งเตือนว่าสำคัญกว่าหรือสำคัญน้อยกว่าการแจ้งเตือนปกติ การแจ้งเตือนที่ตั้งค่าช่องลำดับความสำคัญเป็น PRIORITY_MAX หรือ PRIORITY_HIGH จะปรากฏในหน้าต่างแบบลอยขนาดเล็ก หากการแจ้งเตือนนั้นมีเสียงหรือการสั่นด้วย
  • addPerson(): ช่วยให้คุณสามารถเพิ่มบุคคลที่เกี่ยวข้องกับการแจ้งเตือนได้อย่างน้อยหนึ่งคน แอปของคุณสามารถใช้ข้อมูลนี้เพื่อส่งสัญญาณให้ระบบจัดกลุ่มการแจ้งเตือนจากผู้ที่คุณระบุไว้ไว้ด้วยกัน หรือจัดอันดับการแจ้งเตือนจากผู้เหล่านี้ว่าสำคัญกว่า

กราฟิก

การรองรับ OpenGL ES 3.1

Android 5.0 เพิ่มอินเทอร์เฟซ Java และการสนับสนุนในตัวสำหรับ OpenGL ES 3.1 ฟังก์ชันใหม่ที่สำคัญซึ่งมีให้ใน OpenGL ES 3.1 ได้แก่

  • ตัวปรับเงาการประมวลผล
  • แยกวัตถุที่ให้เฉดสี
  • คำสั่งวาดทางอ้อม
  • พื้นผิวแบบหลายตัวอย่างและพื้นผิวลายฉลุ
  • การปรับปรุงภาษาของการปรับแสง
  • ส่วนขยายสำหรับโหมดการผสมขั้นสูงและการแก้ไขข้อบกพร่อง
  • ความเข้ากันได้แบบย้อนหลังกับ OpenGL ES 2.0 และ 3.0

อินเทอร์เฟซ Java สำหรับ OpenGL ES 3.1 บน Android มาพร้อม GLES31 เมื่อใช้ OpenGL ES 3.1 โปรดตรวจสอบว่าคุณได้ประกาศไว้ในไฟล์ Manifest ด้วยแท็ก <uses-feature> และแอตทริบิวต์ android:glEsVersion เช่น

<manifest>
    <uses-feature android:glEsVersion="0x00030001" />
    ...
</manifest>

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

Android Extension Pack

นอกจาก OpenGL ES 3.1 แล้ว เวอร์ชันนี้ยังมีแพ็กเกจส่วนขยายที่มีอินเทอร์เฟซ Java และการรองรับฟังก์ชันกราฟิกขั้นสูงในตัว Android จะถือว่าส่วนขยายเหล่านี้เป็นแพ็กเกจเดียว (หากมีชิ้นงาน ANDROID_extension_pack_es31a แอปจะถือว่ามีชิ้นงานทั้งหมดในแพ็กเกจและเปิดใช้ฟีเจอร์ภาษาแรเงาด้วยคำสั่ง #extension คำสั่งเดียว)

แพ็กเกจส่วนขยายรองรับรายการต่อไปนี้

  • การรับประกันการรองรับ Fragment Shape สำหรับบัฟเฟอร์พื้นที่เก็บข้อมูลเฉดสี รูปภาพ และ Atomics (มีการรองรับตัวปรับแต่ง Fragment ด้วยหรือไม่ก็ได้ใน OpenGL ES 3.1)
  • เทสเซลเลชันและชิดเดอร์เรขาคณิต
  • รูปแบบการบีบอัดพื้นผิว ASTC (LDR)
  • การประมาณค่าในช่วงและการลงสีตามตัวอย่าง
  • โหมดการผสมที่แตกต่างกันสำหรับไฟล์แนบสีแต่ละรายการในเฟรมบัฟเฟอร์

อินเทอร์เฟซ Java สำหรับแพ็กส่วนขยายมาพร้อมกับ GLES31Ext ในไฟล์ Manifest ของแอป คุณประกาศว่าต้องติดตั้งแอปเฉพาะในอุปกรณ์ที่รองรับชุดส่วนขยายเท่านั้น เช่น

<manifest>
    <uses-feature android:name=“android.hardware.opengles.aep”
        android:required="true" />
    ...
</manifest>

สื่อ

Camera API สำหรับความสามารถขั้นสูงของกล้อง

Android 5.0 เปิดตัว API ใหม่ android.hardware.camera2 เพื่ออำนวยความสะดวกในการจับภาพและประมวลผลรูปภาพอย่างละเอียด ตอนนี้คุณสามารถเข้าถึงอุปกรณ์กล้องที่ใช้งานได้กับระบบด้วยโปรแกรมด้วย getCameraIdList() และเชื่อมต่อกับอุปกรณ์ที่ต้องการด้วย openCamera() หากต้องการเริ่มจับภาพ ให้สร้างCameraCaptureSession และระบุออบเจ็กต์ Surface เพื่อส่งรูปภาพที่จับภาพ คุณกำหนดค่า CameraCaptureSession ให้ถ่ายช็อตเดียวหรือหลายรูปในภาพถ่ายอัจฉริยะได้

หากต้องการรับการแจ้งเตือนเมื่อมีการจับภาพรูปภาพใหม่ ให้ใช้ CameraCaptureSession.CaptureCallbacklistener และตั้งค่าในคำขอจับภาพ เมื่อระบบส่งคำขอจับภาพเรียบร้อยแล้ว ผู้ฟัง CameraCaptureSession.CaptureCallback จะได้รับการเรียกไปยัง onCaptureCompleted() ซึ่งให้ข้อมูลเมตาการจับภาพแก่คุณใน CaptureResult

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

  • อุปกรณ์ทั้งหมดรองรับระดับฮาร์ดแวร์อย่างน้อย INFO_SUPPORTED_HARDWARE_LEVEL_LEGACY ซึ่งมีความสามารถใกล้เคียงกับของ Camera API ที่เลิกใช้งานแล้ว
  • อุปกรณ์ที่รองรับระดับฮาร์ดแวร์ INFO_SUPPORTED_HARDWARE_LEVEL_FULL จะควบคุมการจับภาพและการประมวลผลหลังการประมวลผลด้วยตนเองได้ รวมถึงการจับภาพความละเอียดสูงที่อัตราเฟรมสูงได้

หากต้องการดูวิธีใช้ API ของ กล้องถ่ายรูป ที่อัปเดตแล้ว โปรดดูตัวอย่างการใช้งาน Camera2Basic และ Camera2Video ในรุ่นนี้

การเล่นเสียง

รุ่นนี้มีการเปลี่ยนแปลงต่อไปนี้ใน AudioTrack

  • ตอนนี้แอปของคุณสามารถส่งข้อมูลเสียงในรูปแบบทศนิยม (ENCODING_PCM_FLOAT) ซึ่งช่วยให้ช่วงไดนามิกแม่นยำมากขึ้น สม่ำเสมอมากขึ้น และมีพื้นที่เหลือมากขึ้น การคำนวณเลขทศนิยมมีประโยชน์อย่างยิ่งในระหว่างการคํานวณขั้นกลาง ปลายทางการเล่นจะใช้รูปแบบจำนวนเต็มสำหรับข้อมูลเสียง และมีความละเอียดของบิตต่ำกว่า (ใน Android 5.0 ไปป์ไลน์ภายในบางส่วนยังไม่เป็นทศนิยม)
  • ตอนนี้แอปของคุณจะให้ข้อมูลเสียงเป็น ByteBuffer ในรูปแบบเดียวกับที่ MediaCodec ระบุไว้ได้แล้ว
  • ตัวเลือก WRITE_NON_BLOCKING ช่วยให้บัฟเฟอร์และมัลติเธรดสำหรับบางแอปทำงานได้ง่ายขึ้น

ตัวควบคุมการเล่นสื่อ

ใช้ API การแจ้งเตือนและสื่อใหม่เพื่อให้ UI ของระบบทราบเกี่ยวกับการเล่นสื่อและสามารถดึงข้อมูลและแสดงอาร์ตเวิร์กจากอัลบั้มได้ ตอนนี้การควบคุมการเล่นสื่อใน UI และบริการทำได้ง่ายกว่าเดิมด้วยคลาส MediaSession และ MediaController ใหม่

คลาส MediaSession ใหม่จะแทนที่คลาส RemoteControlClient ที่เลิกใช้งานแล้วและมีเมธอด Callback ชุดเดียวสำหรับการจัดการตัวควบคุมการขนส่งและปุ่มสื่อ หากแอปมีการเล่นสื่อและเรียกใช้บนแพลตฟอร์ม Android TV หรือ Wear ให้ใช้คลาส MediaSession เพื่อจัดการการควบคุม การส่งโดยใช้วิธี Callback เดียวกัน

ตอนนี้คุณสามารถสร้างแอปตัวควบคุมสื่อของคุณเองด้วยคลาส MediaController ใหม่ได้แล้ว คลาสนี้มีวิธีที่ปลอดภัยในชุดข้อความในการตรวจสอบและควบคุมการเล่นสื่อจากกระบวนการ UI ของแอป เมื่อสร้างตัวควบคุม ให้ระบุออบเจ็กต์ MediaSession.Token เพื่อให้แอปโต้ตอบกับ MediaSession ที่กำหนดได้ เมื่อใช้เมธอด MediaController.TransportControls คุณจะสามารถส่งคําสั่ง เช่น play(), stop(), skipToNext() และ setRating() เพื่อควบคุมการเล่นสื่อในเซสชันนั้นได้ เมื่อใช้ตัวควบคุม คุณยังลงทะเบียนออบเจ็กต์ MediaController.Callback เพื่อฟังการเปลี่ยนแปลงข้อมูลเมตาและสถานะในเซสชันได้ด้วย

นอกจากนี้ คุณยังสร้างการแจ้งเตือนริชมีเดียที่อนุญาตการควบคุมการเล่นที่ผูกกับเซสชันสื่อกับคลาส Notification.MediaStyle ใหม่ได้อีกด้วย

การเรียกดูสื่อ

Android 5.0 มอบความสามารถในการเรียกดูคลังเนื้อหาสื่อของแอปอื่นผ่าน API android.media.browse สำหรับแอป หากต้องการแสดงเนื้อหาสื่อในแอป ให้ขยายคลาส MediaBrowserService การติดตั้งใช้งาน MediaBrowserService ควรให้สิทธิ์เข้าถึง MediaSession.Token เพื่อให้แอปเล่นเนื้อหาสื่อที่ให้บริการผ่านบริการของคุณได้

หากต้องการโต้ตอบกับบริการเบราว์เซอร์สื่อ ให้ใช้คลาส MediaBrowser ระบุชื่อคอมโพเนนต์สำหรับ MediaSession เมื่อสร้างอินสแตนซ์ MediaBrowser เมื่อใช้อินสแตนซ์ของเบราว์เซอร์ดังกล่าว แอปจะเชื่อมต่อกับบริการที่เกี่ยวข้องและรับออบเจ็กต์ MediaSession.Token เพื่อเล่นเนื้อหาที่เปิดเผยผ่านบริการนั้นได้

พื้นที่เก็บข้อมูล

การเลือกไดเรกทอรี

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

หากต้องการเลือกแผนผังย่อยของไดเรกทอรี ให้สร้างและส่งความตั้งใจ OPEN_DOCUMENT_TREE ระบบจะแสดงDocumentsProviderอินสแตนซ์ทั้งหมดที่รองรับการเลือกซับต้นไม้ ซึ่งจะช่วยให้ผู้ใช้เรียกดูและเลือกไดเรกทอรีได้ URI ที่แสดงผลแสดงถึงสิทธิ์เข้าถึงซับต้นไม้ที่เลือก จากนั้นใช้ buildChildDocumentsUriUsingTree() และ buildDocumentUriUsingTree() ร่วมกับ query() เพื่อสำรวจซับต้นไม้

เมธอด createDocument() ใหม่ช่วยให้คุณสร้างเอกสารหรือไดเรกทอรีใหม่ที่ใดก็ได้ในโครงสร้างย่อย หากต้องการจัดการเอกสารที่มีอยู่ ให้ใช้ renameDocument() และ deleteDocument() โปรดตรวจสอบ COLUMN_FLAGS เพื่อยืนยันการสนับสนุนผู้ให้บริการสำหรับการโทรเหล่านี้ก่อนออกการโทร

หากคุณกำลังติดตั้งใช้งาน DocumentsProvider และต้องการสนับสนุนการเลือกซับต้นไม้ ให้ติดตั้งใช้งาน isChildDocument() และใส่ FLAG_SUPPORTS_IS_CHILD ใน COLUMN_FLAGS

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

ระบบไร้สายและการเชื่อมต่อ

การเชื่อมต่อเครือข่ายหลายรายการ

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

หากต้องการเลือกและเชื่อมต่อกับเครือข่ายแบบไดนามิกจากแอป ให้ทำตามขั้นตอนต่อไปนี้

  1. สร้าง ConnectivityManager
  2. ใช้คลาส NetworkRequest.Builder เพื่อสร้างออบเจ็กต์ NetworkRequest และระบุฟีเจอร์เครือข่ายและประเภทการขนส่งที่แอปสนใจ
  3. หากต้องการสแกนหาเครือข่ายที่เหมาะสม ให้เรียกใช้ requestNetwork() หรือ registerNetworkCallback() แล้วส่งออบเจ็กต์ NetworkRequest และการใช้งาน ConnectivityManager.NetworkCallback โปรดใช้เมธอด requestNetwork() หากต้องการเปลี่ยนไปใช้เครือข่ายที่เหมาะสมเมื่อตรวจพบเครือข่าย ในการรับเฉพาะการแจ้งเตือนสำหรับเครือข่ายที่สแกนโดยไม่ต้องเปลี่ยนอุปกรณ์ตลอดเวลา ให้ใช้เมธอด registerNetworkCallback() แทน

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

บลูทูธพลังงานต่ำ

Android 4.3 เปิดตัวการรองรับแพลตฟอร์มสำหรับ บลูทูธพลังงานต่ำ (Bluetooth LE) ซึ่งมีบทบาทหลัก ใน Android 5.0 อุปกรณ์ Android สามารถทำหน้าที่เป็นอุปกรณ์ต่อพ่วงบลูทูธ LE แอปสามารถใช้ความสามารถนี้ ในการทำให้อุปกรณ์ที่อยู่ใกล้เคียงทราบว่ามีแอปอยู่แล้ว เช่น คุณสามารถสร้างแอปที่ช่วยให้อุปกรณ์ทํางานเป็นเครื่องนับก้าวหรือเครื่องวัดสุขภาพ และสื่อสารข้อมูลกับอุปกรณ์ Bluetooth LE เครื่องอื่นได้

android.bluetooth.le API ใหม่ช่วยให้แอปของคุณสามารถกระจายโฆษณา สแกนหาการตอบกลับ และสร้างการเชื่อมต่อกับอุปกรณ์บลูทูธ LE ที่อยู่ใกล้เคียง หากต้องการใช้ฟีเจอร์โฆษณาและการสแกนใหม่ ให้เพิ่มสิทธิ์ BLUETOOTH_ADMIN ในไฟล์ Manifest เมื่อผู้ใช้อัปเดตหรือดาวน์โหลดแอปของคุณจาก Play Store ระบบจะขอให้ผู้ใช้ให้สิทธิ์แก่แอปของคุณดังต่อไปนี้ "ข้อมูลการเชื่อมต่อบลูทูธ: อนุญาตให้แอปควบคุมบลูทูธ ซึ่งรวมถึงการประกาศหรือการรับข้อมูลเกี่ยวกับอุปกรณ์บลูทูธที่อยู่ใกล้เคียง"

หากต้องการเริ่มการโฆษณา Bluetooth LE เพื่อให้อุปกรณ์อื่นๆ ค้นพบแอปของคุณได้ โปรดโทร startAdvertising() แล้วติดตั้งใช้งานคลาส AdvertiseCallback ออบเจ็กต์ Callback จะได้รับรายงานความสำเร็จหรือความล้มเหลวของการดำเนินการโฆษณา

Android 5.0 เปิดตัวคลาส ScanFilter เพื่อให้แอปสแกนหาเฉพาะอุปกรณ์ประเภทที่สนใจได้ หากต้องการเริ่มสแกนหาอุปกรณ์ Bluetooth LE ให้โทรหา startScan() และส่งในรายการตัวกรอง ในการเรียกใช้เมธอด คุณต้องติดตั้งใช้งาน ScanCallback ด้วยเพื่อรายงานเมื่อพบโฆษณา Bluetooth LE

การปรับปรุง NFC

Android 5.0 เพิ่มการเพิ่มประสิทธิภาพเหล่านี้เพื่อให้ใช้งาน NFC ได้กว้างและยืดหยุ่นมากขึ้น

  • ตอนนี้ Android Beam พร้อมใช้งานในเมนูแชร์แล้ว
  • แอปของคุณสามารถเรียกใช้ Android Beam ในอุปกรณ์ของผู้ใช้เพื่อแชร์ข้อมูลโดย โทรหา invokeBeam() วิธีนี้ช่วยให้ผู้ใช้ไม่ต้องแตะอุปกรณ์กับอุปกรณ์อื่นที่ใช้ NFC ได้ด้วยตนเองเพื่อดำเนินการโอนข้อมูล
  • คุณใช้เมธอด createTextRecord() ใหม่เพื่อสร้างระเบียน NDEF ที่มีข้อมูลข้อความ UTF-8 ได้
  • หากกำลังพัฒนาแอปการชำระเงิน ตอนนี้คุณสามารถลงทะเบียนรหัสแอปพลิเคชัน NFC (AID) แบบไดนามิกได้โดยเรียกใช้ registerAidsForService() นอกจากนี้ คุณยังใช้ setPreferredService() เพื่อตั้งค่าบริการจําลองบัตรที่ต้องการซึ่งควรใช้เมื่อกิจกรรมหนึ่งๆ อยู่เบื้องหน้าได้ด้วย

Project Volta

นอกเหนือจากฟีเจอร์ใหม่ๆ แล้ว Android 5.0 ยังเน้นการปรับปรุงอายุการใช้งานแบตเตอรี่ ใช้ API และเครื่องมือใหม่เพื่อทำความเข้าใจและเพิ่มประสิทธิภาพ การใช้พลังงานของแอป

การกำหนดเวลางาน

Android 5.0 มี JobScheduler API ใหม่ที่ช่วยให้คุณยืดอายุการใช้งานแบตเตอรี่ได้โดยกำหนดงานให้ระบบทำงานแบบไม่พร้อมกันในภายหลังหรือภายใต้เงื่อนไขที่ระบุ (เช่น เมื่ออุปกรณ์กำลังชาร์จ) การกำหนดเวลางานมีประโยชน์ในสถานการณ์ต่อไปนี้

  • แอปมีงานที่ไม่ได้แสดงต่อผู้ใช้ ซึ่งคุณสามารถเลื่อนเวลาได้
  • แอปมีงานที่คุณต้องการทำเมื่อเสียบปลั๊กอุปกรณ์แล้ว
  • แอปมีงานที่ต้องมีการเข้าถึงเครือข่ายหรือการเชื่อมต่อ Wi-Fi
  • แอปมีงานจำนวนมากที่คุณต้องการเรียกใช้เป็นกลุ่มตามตารางเวลาปกติ

หน่วยงานจะรวมอยู่ในออบเจ็กต์ JobInfo ออบเจ็กต์นี้ระบุเกณฑ์การตั้งเวลา

ใช้คลาส JobInfo.Builder เพื่อกำหนดค่าวิธีเรียกใช้งานที่กำหนดเวลาไว้ คุณสามารถกําหนดเวลาให้งานทํางานภายใต้เงื่อนไขที่เฉพาะเจาะจง เช่น

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

ตัวอย่างเช่น คุณสามารถเพิ่มโค้ดเช่นนี้เพื่อเรียกใช้งานในเครือข่ายที่ไม่ใช้การวัด

Kotlin

val uploadTask: JobInfo = JobInfo.Builder(
        jobId,
        serviceComponent /* JobService component */
).run {
    setRequiredNetworkType(JobInfo.NETWORK_TYPE_UNMETERED)
    build()
}
val jobScheduler = context.getSystemService(Context.JOB_SCHEDULER_SERVICE) as JobScheduler
jobScheduler.schedule(uploadTask)

Java

JobInfo uploadTask = new JobInfo.Builder(jobId,
                                         serviceComponent /* JobService component */)
        .setRequiredNetworkCapabilities(JobInfo.NETWORK_TYPE_UNMETERED)
        .build();
JobScheduler jobScheduler =
        (JobScheduler) context.getSystemService(Context.JOB_SCHEDULER_SERVICE);
jobScheduler.schedule(uploadTask);

หากอุปกรณ์มีพลังงานที่เสถียร (กล่าวคือ เสียบปลั๊กไว้นานกว่า 2 นาทีและแบตเตอรี่อยู่ในระดับดี) ระบบจะเรียกใช้งานที่กําหนดเวลาไว้ซึ่งพร้อมใช้งาน แม้ว่ากําหนดเวลาของงานจะยังไม่หมดอายุก็ตาม

หากต้องการดูตัวอย่างวิธีใช้ JobScheduler API โปรดดูตัวอย่างการใช้งาน JobSchedulerSample ในรุ่นนี้

เครื่องมือสำหรับนักพัฒนาซอฟต์แวร์สำหรับการใช้งานแบตเตอรี่

คำสั่ง dumpsys batterystats ใหม่จะสร้างข้อมูลสถิติที่น่าสนใจเกี่ยวกับการใช้แบตเตอรี่ในอุปกรณ์ โดยจัดระเบียบตามรหัสผู้ใช้ที่ไม่ซ้ำกัน (UID) สถิติดังกล่าว ได้แก่

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

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

$ adb shell dumpsys batterystats --charged <package-name>

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

Android ในที่ทำงานและในภาคการศึกษา

การจัดสรรที่มีการจัดการ

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

หากต้องการเริ่มต้นกระบวนการจัดสรรที่มีการจัดการ ให้ส่ง ACTION_PROVISION_MANAGED_PROFILE ใน Intent หากการเรียกใช้สำเร็จ ระบบจะเรียกใช้การเรียกกลับonProfileProvisioningComplete() จากนั้นโทรหา setProfileEnabled() เพื่อเปิดใช้โปรไฟล์ที่มีการจัดการนี้

โดยค่าเริ่มต้น จะมีแอปเพียงบางส่วนเท่านั้นที่เปิดใช้ในโปรไฟล์ที่มีการจัดการ คุณสามารถติดตั้งแอปเพิ่มเติมในโปรไฟล์ที่มีการจัดการได้โดยเรียกใช้ enableSystemApp()

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

หากต้องการดูวิธีใช้ฟังก์ชันใหม่ โปรดดูตัวอย่างการใช้งาน BasicManagedProfile ในรุ่นนี้

เจ้าของอุปกรณ์

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

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

การปักหมุดหน้าจอ

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

การเปิดใช้งานการตรึงหน้าจอทำได้ 2 วิธีดังนี้

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

เมื่อการล็อกงานทำงานอยู่ ระบบจะแสดงลักษณะการทำงานต่อไปนี้

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

กรอบการพิมพ์

แสดงผล PDF เป็นบิตแมป

ตอนนี้คุณสามารถแสดงผลหน้าเอกสาร PDF เป็นภาพบิตแมปสำหรับการพิมพ์ได้โดยใช้คลาส PdfRenderer ใหม่ คุณต้องระบุ ParcelFileDescriptor ที่กรอได้ (นั่นคือ เข้าถึงเนื้อหาแบบสุ่มได้) ซึ่งระบบจะเขียนเนื้อหาที่พิมพ์ได้ แอปของคุณสามารถรับหน้าเว็บสําหรับการแสดงผลด้วย openPage() จากนั้นเรียกใช้ render() เพื่อเปลี่ยน PdfRenderer.Page ที่เปิดอยู่ให้เป็นบิตแมป นอกจากนี้ คุณยังตั้งค่าพารามิเตอร์เพิ่มเติมได้หากต้องการแปลงเฉพาะบางส่วนของเอกสารเป็นภาพบิตแมป (เช่น เพื่อใช้การแสดงผลแบบแบ่งส่วนเพื่อซูมเข้าเอกสาร)

ดูตัวอย่างวิธีใช้ API ใหม่ได้ที่PdfRendererBasic ตัวอย่าง

ระบบ

สถิติการใช้งานแอป

ตอนนี้คุณเข้าถึงประวัติการใช้งานแอปในอุปกรณ์ Android ด้วย android.app.usage API ใหม่ได้แล้ว API นี้ให้ข้อมูลการใช้งานที่ละเอียดกว่าเมธอด getRecentTasks() ที่เลิกใช้งานแล้ว หากต้องการใช้ API นี้ คุณต้องประกาศสิทธิ์ "android.permission.PACKAGE_USAGE_STATS" ในไฟล์ Manifest ก่อน นอกจากนี้ ผู้ใช้ยังต้องเปิดใช้การเข้าถึงสําหรับแอปนี้ผ่านการตั้งค่า > ความปลอดภัย > แอปด้วยสิทธิ์เข้าถึงการใช้งาน

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

  • ข้อมูลรายวัน: 7 วัน
  • ข้อมูลรายสัปดาห์: 4 สัปดาห์
  • ข้อมูลรายเดือน: 6 เดือน
  • ข้อมูลรายปี: 2 ปี

ระบบจะบันทึกข้อมูลต่อไปนี้สำหรับแต่ละแอป

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

การทดสอบและการเข้าถึง

การปรับปรุงการทดสอบและการเข้าถึง

Android 5.0 เพิ่มการรองรับต่อไปนี้สำหรับการทดสอบและการช่วยเหลือพิเศษ

  • เมธอด getWindowAnimationFrameStats() และ getWindowContentFrameStats() ใหม่จะบันทึกสถิติเฟรมสำหรับภาพเคลื่อนไหวและเนื้อหาในหน้าต่าง วิธีการเหล่านี้ช่วยให้คุณเขียนการทดสอบเครื่องมือวัดผลเพื่อประเมินว่าแอปแสดงผลเฟรมด้วยความถี่รีเฟรชที่เพียงพอเพื่อให้ผู้ใช้ได้รับประสบการณ์การใช้งานที่ราบรื่นหรือไม่
  • เมธอด executeShellCommand() ใหม่ช่วยให้คุณเรียกใช้คำสั่ง Shell จากการทดสอบการใช้เครื่องมือได้ การเรียกใช้คำสั่งคล้ายกับการเรียกใช้ adb shell จากโฮสต์ที่เชื่อมต่อกับอุปกรณ์ ซึ่งช่วยให้คุณใช้เครื่องมือที่อิงตาม Shell ได้ เช่น dumpsys, am, content และ pm
  • ตอนนี้บริการการช่วยเหลือพิเศษและเครื่องมือทดสอบที่ใช้ Accessibility API (เช่น UiAutomator) สามารถดึงข้อมูลโดยละเอียดเกี่ยวกับพร็อพเพอร์ตี้ของหน้าต่างบนหน้าจอที่ผู้ใช้ที่มองเห็นได้โต้ตอบด้วย หากต้องการเรียกข้อมูลรายการออบเจ็กต์ AccessibilityWindowInfo ให้เรียกใช้เมธอด getWindows() ใหม่
  • คลาส AccessibilityNodeInfo.AccessibilityAction แบบใหม่ช่วยให้คุณกำหนดการดำเนินการมาตรฐานหรือการดำเนินการที่กําหนดเองเพื่อดําเนินการกับ AccessibilityNodeInfo ได้ คลาส AccessibilityNodeInfo.AccessibilityAction ใหม่จะแทนที่ API ที่เกี่ยวข้องกับการดำเนินการซึ่งพบก่อนหน้านี้ใน AccessibilityNodeInfo
  • Android 5.0 ให้การควบคุมการสังเคราะห์การอ่านออกเสียงข้อความในแอปอย่างละเอียดขึ้น คลาส Voice ใหม่ช่วยให้แอปใช้โปรไฟล์เสียงที่เชื่อมโยงกับภาษา คุณภาพและการให้คะแนนเวลาในการตอบสนอง และพารามิเตอร์เฉพาะสำหรับเครื่องมืออ่านออกเสียงข้อความได้

IME

สลับระหว่างภาษาในการป้อนข้อมูลได้ง่ายขึ้น

ตั้งแต่ Android 5.0 เป็นต้นไป ผู้ใช้จะสลับระหว่างเครื่องมือแก้ไขวิธีการป้อนข้อมูล (IME) ทั้งหมดที่แพลตฟอร์มรองรับได้ง่ายขึ้น การดำเนินการสลับที่กำหนด (โดยปกติคือการแตะไอคอนลูกโลกบนแป้นพิมพ์บนหน้าจอ) จะวนไปยัง IME ทั้งหมดดังกล่าว การเปลี่ยนแปลงลักษณะการทํางานนี้ใช้วิธี shouldOfferSwitchingToNextInputMethod()

นอกจากนี้ ปัจจุบันเฟรมเวิร์กจะตรวจสอบว่า IME ถัดไปมีกลไกการสลับหรือไม่ (และด้วยเหตุนี้ IME นั้นรองรับการเปลี่ยนไปใช้ IME หรือไม่หลังจากนั้น) IME ที่มีกลไกการเปลี่ยนจะไม่วนไปยัง IME ที่ไม่มีกลไกดังกล่าว การเปลี่ยนแปลงลักษณะการทำงานนี้จะดำเนินการโดยเมธอด switchToNextInputMethod()

หากต้องการดูตัวอย่างวิธีใช้ API การสลับ IME ที่อัปเดตแล้ว โปรดดูตัวอย่างการใช้งานแป้นพิมพ์เสมือนที่อัปเดตในรุ่นนี้ ดูข้อมูลเพิ่มเติมเกี่ยวกับวิธีใช้การสลับระหว่าง IME ได้ที่การสร้างวิธีการป้อนข้อมูล

การประกาศไฟล์ Manifest

ฟีเจอร์ที่จำเป็นที่ต้องประกาศ

ตอนนี้ระบบรองรับค่าต่อไปนี้ในองค์ประกอบ <uses-feature> แล้ว เพื่อให้มั่นใจว่าแอปจะติดตั้งในอุปกรณ์ที่มีฟีเจอร์ที่แอปต้องการเท่านั้น

สิทธิ์ของผู้ใช้

ตอนนี้ระบบรองรับสิทธิ์ต่อไปนี้ในองค์ประกอบ <uses-permission> เพื่อประกาศสิทธิ์ที่แอปของคุณต้องใช้ในการเข้าถึง API บางรายการแล้ว

  • BIND_DREAM_SERVICE: เมื่อกำหนดเป้าหมายเป็น API ระดับ 21 ขึ้นไป บริการ Daydream จะต้องใช้สิทธิ์นี้เพื่อให้แน่ใจว่ามีเพียงระบบเท่านั้นที่จะเชื่อมโยงได้