API ของ Android 6.0

Android 6.0 (M) มีฟีเจอร์ใหม่ๆ สำหรับผู้ใช้และนักพัฒนาแอป เอกสารนี้จะแนะนำ API ที่โดดเด่นที่สุด

เริ่มพัฒนา

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

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

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

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

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

การตรวจสอบสิทธิ์ด้วยลายนิ้วมือ

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

หากต้องการตรวจสอบสิทธิ์ผู้ใช้ผ่านการสแกนลายนิ้วมือ ให้รับอินสแตนซ์ของคลาสFingerprintManagerใหม่และเรียกใช้เมธอดauthenticate() แอปของคุณต้องทำงานบนอุปกรณ์ที่เข้ากันได้ซึ่งมีเซ็นเซอร์ลายนิ้วมือ คุณต้องติดตั้งใช้งานอินเทอร์เฟซผู้ใช้สำหรับขั้นตอนการตรวจสอบสิทธิ์ด้วยลายนิ้วมือในแอป และใช้ไอคอนลายนิ้วมือมาตรฐานของ Android ใน UI ไอคอนลายนิ้วมือของ Android (c_fp_40px.png) จะรวมอยู่ในตัวอย่างการตรวจสอบสิทธิ์ด้วยข้อมูลไบโอเมตริก หากคุณกำลังพัฒนาแอปหลายแอปที่ใช้การตรวจสอบสิทธิ์ด้วยลายนิ้วมือ โปรดทราบว่าแต่ละแอปต้องตรวจสอบสิทธิ์ลายนิ้วมือของผู้ใช้แยกกัน

หากต้องการใช้ฟีเจอร์นี้ในแอป ให้เพิ่มสิทธิ์ USE_FINGERPRINT ในไฟล์ Manifest ก่อน

<uses-permission
        android:name="android.permission.USE_FINGERPRINT" />
อุปกรณ์เคลื่อนที่แสดงฟังก์ชันการตรวจสอบสิทธิ์ด้วยลายนิ้วมือ

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

หากคุณกำลังทดสอบฟีเจอร์นี้ ให้ทำตามขั้นตอนต่อไปนี้

  1. ติดตั้ง Android SDK Tools เวอร์ชันแก้ไข 24.3 หากยังไม่ได้ดำเนินการ
  2. ลงทะเบียนลายนิ้วมือใหม่ในโปรแกรมจำลองโดยไปที่การตั้งค่า > ความปลอดภัย > ลายนิ้วมือ แล้วทำตามวิธีการลงทะเบียน
  3. ใช้โปรแกรมจำลองเพื่อจำลองเหตุการณ์การแตะด้วยลายนิ้วมือด้วยคำสั่งต่อไปนี้ ใช้คำสั่งเดียวกันเพื่อจำลองเหตุการณ์การสัมผัสลายนิ้วมือบนหน้าจอล็อกหรือในแอป
    adb -e emu finger touch <finger_id>
    

    ใน Windows คุณอาจต้องเรียกใช้ telnet 127.0.0.1 <emulator-id> ตามด้วย finger touch <finger_id>

ยืนยันข้อมูลเข้าสู่ระบบ

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

หากต้องการตั้งค่าระยะเวลาหมดเวลาที่จะใช้คีย์เดิมซ้ำได้หลังจากที่ตรวจสอบสิทธิ์ผู้ใช้เรียบร้อยแล้ว ให้เรียกใช้setUserAuthenticationValidityDurationSeconds()วิธีใหม่เมื่อคุณตั้งค่า KeyGenerator หรือ KeyPairGenerator

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

การลิงก์แอป

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

การสำรองข้อมูลอัตโนมัติสำหรับแอป

ขณะนี้ระบบดำเนินการสำรองและกู้คืนข้อมูลทั้งหมดโดยอัตโนมัติสำหรับแอป แอปของคุณต้องกําหนดเป้าหมายเป็น Android 6.0 (API ระดับ 23) เพื่อเปิดใช้การทํางานนี้ โดยไม่จําเป็นต้องเพิ่มโค้ดใดๆ เพิ่มเติม หากผู้ใช้ลบบัญชี Google ข้อมูลสำรองของผู้ใช้ก็จะถูกลบด้วย ดูวิธีการทำงานของฟีเจอร์นี้และวิธีกำหนดค่าสิ่งที่จะสำรองข้อมูลในระบบไฟล์ได้ที่การกำหนดค่าการสำรองข้อมูลอัตโนมัติสำหรับแอป

การแชร์โดยตรง

ส่วนด้านล่างของอุปกรณ์เคลื่อนที่แสดงฟังก์ชันการแชร์โดยตรง

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

หากต้องการเปิดใช้เป้าหมายการแชร์โดยตรง คุณต้องกำหนดคลาสที่ขยายคลาส ChooserTargetService ประกาศบริการของคุณในไฟล์ Manifest ภายในการประกาศ ให้ระบุสิทธิ์ BIND_CHOOSER_TARGET_SERVICE และตัวกรอง Intent โดยใช้การดำเนินการ SERVICE_INTERFACE

ตัวอย่างต่อไปนี้แสดงวิธีประกาศ ChooserTargetService ในไฟล์ Manifest

<service android:name=".ChooserTargetService"
        android:label="@string/service_name"
        android:permission="android.permission.BIND_CHOOSER_TARGET_SERVICE">
    <intent-filter>
        <action android:name="android.service.chooser.ChooserTargetService" />
    </intent-filter>
</service>

สําหรับกิจกรรมแต่ละรายการที่คุณต้องการแสดงใน ChooserTargetService ให้เพิ่มองค์ประกอบ <meta-data> ที่มีชื่อ "android.service.chooser.chooser_target_service" ในไฟล์ Manifest ของแอป

<activity android:name=".MyShareActivity”
        android:label="@string/share_activity_label">
    <intent-filter>
        <action android:name="android.intent.action.SEND" />
    </intent-filter>
<meta-data
        android:name="android.service.chooser.chooser_target_service"
        android:value=".ChooserTargetService" />
</activity>

การโต้ตอบด้วยเสียง

เวอร์ชันนี้มี API การโต้ตอบด้วยเสียงใหม่ ซึ่งเมื่อใช้ร่วมกับการดําเนินการด้วยเสียงจะช่วยให้คุณสร้างประสบการณ์การสนทนาด้วยเสียงในแอปได้ เรียกใช้เมธอด isVoiceInteraction() เพื่อตรวจสอบว่าการสั่งงานด้วยเสียงทริกเกอร์กิจกรรมของคุณหรือไม่ ถ้าใช่ แอปของคุณจะใช้คลาส VoiceInteractor เพื่อขอการยืนยันด้วยเสียงจากผู้ใช้ เลือกจากรายการตัวเลือก และอื่นๆ ได้

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

หากต้องการเรียนรู้เพิ่มเติมเกี่ยวกับการใช้การสั่งงานด้วยเสียง โปรดดูที่เว็บไซต์ของนักพัฒนาซอฟต์แวร์การสั่งงานด้วยเสียง

Assist API

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

แอปสามารถเลือกที่จะไม่แชร์บริบทปัจจุบันกับ Assistant ได้โดยการตั้งค่า Flag FLAG_SECURE นอกเหนือจากชุดข้อมูลมาตรฐานที่แพลตฟอร์มส่งผ่านไปยังผู้ช่วยแล้ว แอปของคุณยังแชร์ข้อมูลเพิ่มเติมได้โดยใช้คลาส AssistContent ใหม่

หากต้องการระบุบริบทเพิ่มเติมจากแอปของคุณให้กับ Assistant ให้ทำตามขั้นตอนต่อไปนี้

  1. ใช้อินเทอร์เฟซ Application.OnProvideAssistDataListener
  2. ลงทะเบียน Listener นี้โดยใช้ registerOnProvideAssistDataListener()
  3. หากต้องการระบุข้อมูลตามบริบทเฉพาะกิจกรรม ให้ลบล้างการเรียกกลับ onProvideAssistData() และการเรียกกลับ onProvideAssistContent() ใหม่ (ไม่บังคับ)

อุปกรณ์เก็บข้อมูลแบบ Adoptable

ในรุ่นนี้ ผู้ใช้จะใช้อุปกรณ์จัดเก็บข้อมูลภายนอก เช่น การ์ด SD ได้ การใช้อุปกรณ์จัดเก็บข้อมูลภายนอกจะเข้ารหัสและฟอร์แมตอุปกรณ์ให้ทำงานเหมือนที่จัดเก็บข้อมูลภายใน ฟีเจอร์นี้ช่วยให้ผู้ใช้ย้ายทั้งแอปและข้อมูลส่วนตัวของแอปเหล่านั้นระหว่างอุปกรณ์เก็บข้อมูลได้ เมื่อย้ายแอป ระบบจะยึดตามค่ากำหนด android:installLocation ในไฟล์ Manifest

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

หากต้องการแก้ไขข้อบกพร่องของฟีเจอร์นี้ คุณสามารถเปิดใช้ไดรฟ์ USB ที่เชื่อมต่อกับอุปกรณ์ Android ผ่านสาย USB On-The-Go (OTG) ได้โดยเรียกใช้คำสั่งนี้

$ adb shell sm set-force-adoptable true

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

รุ่นนี้เพิ่มการเปลี่ยนแปลง API ต่อไปนี้สำหรับการแจ้งเตือน

  • ระดับตัวกรอง INTERRUPTION_FILTER_ALARMS ใหม่ซึ่งสอดคล้องกับโหมดห้ามรบกวนการปลุกเท่านั้นโหมดใหม่
  • ค่าหมวดหมู่CATEGORY_REMINDERใหม่ที่ใช้ในการแยกการช่วยเตือนที่ผู้ใช้กำหนดเวลาไว้ออกจากกิจกรรมอื่นๆ (CATEGORY_EVENT) และการปลุก (CATEGORY_ALARM)
  • คลาส Icon ใหม่ที่คุณแนบมากับการแจ้งเตือนได้ผ่านวิธี setSmallIcon() และ setLargeIcon() ในทํานองเดียวกัน ตอนนี้เมธอด addAction() จะยอมรับออบเจ็กต์ Icon แทนรหัสทรัพยากรที่วาดได้
  • getActiveNotifications() ใหม่ที่ช่วยให้คุณแอปดูได้ว่าขณะนี้การแจ้งเตือนใดแสดงอยู่

การรองรับสไตลัสบลูทูธ

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

ใช้เมธอดและค่าคงที่ MotionEvent เพื่อตรวจหาการโต้ตอบกับปุ่มสไตลัส

  • หากผู้ใช้แตะปากกาสไตลัสที่มีปุ่มบนหน้าจอแอปของคุณ getTooltype() จะแสดงผล TOOL_TYPE_STYLUS
  • สําหรับแอปที่กําหนดเป้าหมายเป็น Android 6.0 (API ระดับ 23) getButtonState() เมธอดจะแสดงผลเป็น BUTTON_STYLUS_PRIMARY เมื่อผู้ใช้กดปุ่มสไตลัสหลัก หากปากกาสไตลัสมีปุ่มที่ 2 ระบบจะแสดงเมธอดเดียวกันBUTTON_STYLUS_SECONDARYเมื่อผู้ใช้กดปุ่ม หากผู้ใช้กดปุ่มทั้ง 2 ปุ่มพร้อมกัน วิธีการจะแสดงผลทั้ง 2 ค่าโดยใส่ OR ไว้ด้วยกัน (BUTTON_STYLUS_PRIMARY|BUTTON_STYLUS_SECONDARY)
  • สําหรับแอปที่กําหนดเป้าหมายเป็นแพลตฟอร์มเวอร์ชันต่ำกว่า getButtonState() จะแสดงผลเป็น BUTTON_SECONDARY (สําหรับการกดปุ่มสไตลัสหลัก) BUTTON_TERTIARY (สําหรับการกดปุ่มสไตลัสรอง) หรือทั้ง 2 อย่าง

ปรับปรุงการสแกนหาบลูทูธพลังงานต่ำ

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

การสนับสนุนฮอตสปอต 2.0 รุ่น 1

รุ่นนี้เพิ่มการสนับสนุนสำหรับข้อมูลจำเพาะของฮอตสปอต 2.0 รุ่น 1 บนอุปกรณ์ Nexus 6 และ Nexus 9 หากต้องการจัดสรรข้อมูลเข้าสู่ระบบ Hotspot 2.0 ในแอป ให้ใช้เมธอดใหม่ของคลาส WifiEnterpriseConfig เช่น setPlmn() และ setRealm() ในออบเจ็กต์ WifiConfiguration คุณสามารถตั้งค่าช่อง FQDN และ providerFriendlyName เมธอด isPasspointNetwork() ใหม่จะระบุว่าเครือข่ายที่ตรวจพบเป็นจุดเข้าใช้งานฮอตสปอต 2.0 หรือไม่

โหมดการแสดงผล 4K

ตอนนี้แพลตฟอร์มอนุญาตให้แอปส่งคำขออัปเกรดความละเอียดของจอแสดงผลเป็นการแสดงผล 4K ในฮาร์ดแวร์ที่เข้ากันได้ หากต้องการค้นหาความละเอียดจริงปัจจุบัน ให้ใช้ Display.ModeAPI ใหม่ หาก UI วาดด้วยความละเอียดเชิงตรรกะต่ำกว่าและมีการอัปเกรดเป็นความละเอียดเชิงกายภาพที่ใหญ่ขึ้น โปรดทราบว่าความละเอียดเชิงกายภาพที่วิธี getPhysicalWidth() แสดงผลอาจแตกต่างจากความละเอียดเชิงตรรกะที่ getSize() รายงาน

คุณสามารถขอให้ระบบเปลี่ยนความละเอียดจริงในแอปขณะที่ทำงานอยู่ได้โดยการตั้งค่าพร็อพเพอร์ตี้ preferredDisplayModeId ของหน้าต่างแอป ฟีเจอร์นี้มีประโยชน์หากคุณต้องการเปลี่ยนความละเอียดของจอแสดงผลเป็น 4K เมื่ออยู่ในโหมดการแสดงผล 4K ระบบจะยังคงแสดงผล UI ที่ความละเอียดเดิม (เช่น 1080p) และอัปไซส์เป็น 4K แต่ออบเจ็กต์ SurfaceView อาจแสดงเนื้อหาที่ความละเอียดเดิม

ColorStateList ที่ปรับธีมได้

ตอนนี้แอตทริบิวต์ธีมพร้อมใช้งานใน ColorStateList สำหรับอุปกรณ์ที่ใช้ Android 6.0 (API ระดับ 23) แล้ว เราเลิกใช้งานเมธอด Resources.getColorStateList() และ Resources.getColor() แล้ว หากต้องการเรียกใช้ API เหล่านี้ ให้เรียกใช้เมธอด Context.getColorStateList() หรือ Context.getColor() ใหม่แทน นอกจากนี้ วิธีการเหล่านี้ยังอยู่ในไลบรารี AppCompat v4 ผ่าน ContextCompat ด้วย

ฟีเจอร์เสียง

รุ่นนี้เพิ่มการปรับปรุงการประมวลผลเสียงใน Android ซึ่งรวมถึงรายการต่อไปนี้

  • การรองรับโปรโตคอล MIDI ด้วย android.media.midi API ใหม่ ใช้ API เหล่านี้เพื่อส่งและรับเหตุการณ์ MIDI
  • คลาส AudioRecord.Builder และ AudioTrack.Builder ใหม่เพื่อสร้างออบเจ็กต์การเล่นและบันทึกเสียงดิจิทัลตามลำดับ รวมถึงกำหนดค่าพร็อพเพอร์ตี้แหล่งที่มาและที่เก็บเสียงเพื่อลบล้างค่าเริ่มต้นของระบบ
  • ฮุก API สำหรับการเชื่อมโยงอุปกรณ์เสียงและอินพุต ซึ่งจะมีประโยชน์อย่างยิ่งหากแอปของคุณอนุญาตให้ผู้ใช้เริ่มการค้นหาด้วยเสียงจากตัวควบคุมเกมหรือรีโมตคอนโทรลที่เชื่อมต่อกับ Android TV ระบบจะเรียกใช้การเรียกคืนใหม่ onSearchRequested() เมื่อผู้ใช้เริ่มการค้นหา หากต้องการดูว่าอุปกรณ์อินพุตของผู้ใช้มีไมโครโฟนในตัวหรือไม่ ให้เรียกออบเจ็กต์ InputDevice จาก Callback นั้นแล้วเรียกใช้เมธอด hasMicrophone() ใหม่
  • เมธอด getDevices() ใหม่ที่ช่วยให้คุณเรียกดูรายการอุปกรณ์เสียงทั้งหมดที่เชื่อมต่อกับระบบอยู่ในขณะนี้ นอกจากนี้ คุณยังลงทะเบียนออบเจ็กต์ AudioDeviceCallback ได้หากต้องการให้ระบบแจ้งเตือนแอปเมื่ออุปกรณ์เสียงเชื่อมต่อหรือยกเลิกการเชื่อมต่อ

ฟีเจอร์วิดีโอ

รุ่นนี้เพิ่มความสามารถใหม่ๆ ให้กับ API การประมวลผลวิดีโอ ซึ่งรวมถึง

  • คลาส MediaSync ใหม่ซึ่งช่วยให้แอปพลิเคชันแสดงผลสตรีมเสียงและวิดีโอพร้อมกัน ระบบจะส่งบัฟเฟอร์เสียงในลักษณะที่ไม่บล็อกและแสดงผลผ่านคอลแบ็ก ทั้งยังรองรับอัตราการเล่นแบบไดนามิกด้วย
  • เหตุการณ์ EVENT_SESSION_RECLAIMED ใหม่ ซึ่งระบุว่าเครื่องมือจัดการทรัพยากรได้เรียกคืนเซสชันที่แอปเปิดไว้แล้ว หากแอปใช้เซสชัน DRM คุณควรจัดการเหตุการณ์นี้และตรวจสอบว่าไม่ได้ใช้เซสชันที่เรียกคืน
  • รหัสข้อผิดพลาด ERROR_RECLAIMED ใหม่ ซึ่งบ่งชี้ว่าเครื่องมือจัดการทรัพยากรได้เรียกคืนทรัพยากรสื่อที่ใช้โดยตัวแปลงรหัสแล้ว ในกรณีนี้ จะต้องปล่อยตัวแปลงรหัส เนื่องจากได้ย้ายไปยังสถานะสิ้นสุดแล้ว
  • อินเทอร์เฟซ getMaxSupportedInstances() ใหม่เพื่อดูคำแนะนำเกี่ยวกับจำนวนอินสแตนซ์ตัวแปลงรหัสพร้อมกันสูงสุดที่รองรับ
  • setPlaybackParams() วิธีการใหม่ในการตั้งค่าอัตราการเล่นสื่อสำหรับการเล่นแบบเร็วหรือแบบสโลว์โมชัน นอกจากนี้ ยังยืดหรือเร่งการเล่นเสียงโดยอัตโนมัติควบคู่ไปกับวิดีโอ

ฟีเจอร์ของกล้อง

รุ่นนี้มี API ใหม่ต่อไปนี้สำหรับการเข้าถึงไฟฉายของกล้องและสำหรับการประมวลผลภาพกล้องใหม่

Flashlight API

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

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

Reprocessing API

เราขยาย Camera2 API เพื่อรองรับ YUV และการประมวลผลรูปภาพรูปแบบทึบแสงแบบส่วนตัวอีกครั้ง หากต้องการดูว่ามีความสามารถในการประมวลผลซ้ำเหล่านี้หรือไม่ ให้เรียกใช้ getCameraCharacteristics() แล้วตรวจสอบคีย์ REPROCESS_MAX_CAPTURE_STALL หากอุปกรณ์รองรับการประมวลผลอีกครั้ง คุณสามารถสร้างเซสชันการจับภาพจากกล้องที่ประมวลผลอีกครั้งได้โดยเรียกใช้ createReprocessableCaptureSession() และสร้างคำขอประมวลผลบัฟเฟอร์อินพุตอีกครั้ง

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

  1. เรียกใช้เมธอด dequeueInputImage()
  2. กรอกข้อมูลลงในบัฟเฟอร์อินพุต
  3. ส่งบัฟเฟอร์ไปยังกล้องโดยเรียกใช้เมธอด queueInputImage()

หากคุณใช้ออบเจ็กต์ ImageWriter ร่วมกับรูปภาพ PRIVATE แอปของคุณจะเข้าถึงข้อมูลรูปภาพโดยตรงไม่ได้ แต่ให้ส่งรูปภาพ PRIVATE ไปยัง ImageWriter โดยตรงโดยการเรียกใช้เมธอด queueInputImage() โดยไม่ต้องคัดลอกบัฟเฟอร์

คลาส ImageReader รองรับสตรีมรูปภาพรูปแบบ PRIVATE แล้ว การรองรับนี้ช่วยให้แอปของคุณจัดคิวรูปภาพแบบวนซ้ำของรูปภาพเอาต์พุต ImageReader เลือกรูปภาพอย่างน้อย 1 รูป และส่งไปยัง ImageWriter เพื่อประมวลผลด้วยกล้องอีกครั้ง

ฟีเจอร์ของ Android for Work

เวอร์ชันนี้มี API ใหม่สำหรับ Android สำหรับงานดังต่อไปนี้

  • การควบคุมที่มีประสิทธิภาพมากขึ้นสำหรับอุปกรณ์ของบริษัทแบบใช้งานครั้งเดียว: ตอนนี้เจ้าของอุปกรณ์สามารถควบคุมการตั้งค่าต่อไปนี้เพื่อปรับปรุงการจัดการอุปกรณ์ของบริษัทแบบใช้งานครั้งเดียว (COSU) ได้
    • ปิดใช้หรือเปิดใช้การป้องกันด้วยการล็อกคีย์อีกครั้งด้วยวิธี setKeyguardDisabled()
    • ปิดหรือเปิดใช้แถบสถานะอีกครั้ง (รวมถึงการตั้งค่าด่วน การแจ้งเตือน และท่าทางควบคุมการปัดขึ้นเพื่อไปยังส่วนต่างๆ ซึ่งจะเปิด Google Now) ด้วยsetStatusBarDisabled()วิธีนี้
    • ปิดใช้หรือเปิดใช้การเปิดเครื่องที่ปลอดภัยอีกครั้งด้วยUserManager constant DISALLOW_SAFE_BOOT
    • ป้องกันไม่ให้หน้าจอปิดขณะเสียบปลั๊กโดยกด STAY_ON_WHILE_PLUGGED_IN ค้างไว้
  • การติดตั้งและถอนการติดตั้งแอปแบบเงียบโดยเจ้าของอุปกรณ์: ขณะนี้เจ้าของอุปกรณ์สามารถติดตั้งและถอนการติดตั้งแอปพลิเคชันโดยไม่แสดงผลโดยใช้ PackageInstaller API ที่เป็นอิสระจาก Google Play for Work ตอนนี้คุณจัดสรรอุปกรณ์ผ่านเจ้าของอุปกรณ์ที่ดึงข้อมูลและติดตั้งแอปโดยไม่ต้องมีการโต้ตอบจากผู้ใช้ได้แล้ว ฟีเจอร์นี้มีประโยชน์ในการเปิดใช้การจัดเตรียมแบบสัมผัสเดียวของคีออสก์หรืออุปกรณ์อื่นๆ โดยไม่ต้องเปิดใช้งานบัญชี Google
  • การเข้าถึงใบรับรองขององค์กรแบบไม่ส่งเสียง: เมื่อแอปเรียกใช้ choosePrivateKeyAlias() ก่อนที่ระบบจะแจ้งให้ผู้ใช้เลือกใบรับรอง ตอนนี้โปรไฟล์หรือเจ้าของอุปกรณ์สามารถเรียกใช้เมธอด onChoosePrivateKeyAlias() เพื่อระบุชื่อแทนไปยังแอปพลิเคชันที่ขอแบบไม่มีเสียง ฟีเจอร์นี้ช่วยให้คุณให้สิทธิ์แอปที่มีการจัดการเข้าถึงใบรับรองได้โดยไม่ต้องโต้ตอบกับผู้ใช้
  • การยอมรับการอัปเดตระบบโดยอัตโนมัติ เมื่อตั้งค่านโยบายการอัปเดตระบบด้วย setSystemUpdatePolicy() เจ้าของอุปกรณ์จะยอมรับการอัปเดตระบบโดยอัตโนมัติได้ เช่น ในกรณีของอุปกรณ์คีออสก์ หรือเลื่อนการอัปเดตและป้องกันไม่ให้ผู้ใช้ดำเนินการอัปเดตได้สูงสุด 30 วัน นอกจากนี้ ผู้ดูแลระบบจะกำหนดกรอบเวลารายวันที่ควรทำการอัปเดตได้ เช่น ในช่วงเวลาที่ไม่ได้ใช้งานอุปกรณ์คีออสก์ เมื่อมีการอัปเดตระบบพร้อมใช้งาน ระบบจะตรวจสอบว่าแอปเครื่องมือควบคุมนโยบายด้านอุปกรณ์ได้ตั้งค่านโยบายการอัปเดตระบบหรือไม่ และจะทำงานตามนั้น
  • การติดตั้งใบรับรองที่มอบสิทธิ์: ตอนนี้เจ้าของโปรไฟล์หรืออุปกรณ์สามารถให้สิทธิ์แอปของบุคคลที่สามเรียกใช้DevicePolicyManager API การจัดการใบรับรองต่อไปนี้ได้
  • อุปกรณ์เคลื่อนที่ที่แสดงฟีเจอร์การแจ้งเตือนสถานะงานภายใน Android สำหรับงาน
  • การติดตามปริมาณการใช้อินเทอร์เน็ต ตอนนี้เจ้าของโปรไฟล์หรืออุปกรณ์สามารถค้นหาสถิติการใช้งานข้อมูลที่แสดงในการตั้งค่า > ข้อมูลได้โดยใช้วิธีการNetworkStatsManagerใหม่ โดยเจ้าของโปรไฟล์จะได้รับสิทธิ์ในการค้นหาข้อมูลในโปรไฟล์ที่ตนจัดการโดยอัตโนมัติ ส่วนเจ้าของอุปกรณ์จะได้รับสิทธิ์เข้าถึงข้อมูลการใช้งานของผู้ใช้หลักที่มีการจัดการ
  • การจัดการสิทธิ์รันไทม์:

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

  • VPN ในการตั้งค่า: ตอนนี้คุณสามารถดูแอป VPN ได้ในการตั้งค่า > เพิ่มเติม > VPN นอกจากนี้ การแจ้งเตือนที่มาพร้อมกับการใช้งาน VPN จะแสดงเฉพาะวิธีการกำหนดค่า VPN นั้น สําหรับเจ้าของโปรไฟล์ การแจ้งเตือนจะระบุได้อย่างชัดเจนว่า VPN ได้รับการกําหนดค่าสําหรับโปรไฟล์ที่มีการจัดการ โปรไฟล์ส่วนตัว หรือทั้ง 2 โปรไฟล์ สําหรับเจ้าของอุปกรณ์ การแจ้งเตือนจะระบุได้เฉพาะว่ามีการกําหนดค่า VPN สําหรับทั้งอุปกรณ์หรือไม่
  • การแจ้งเตือนสถานะงาน: ตอนนี้ไอคอนกระเป๋าเอกสารในแถบสถานะจะปรากฏขึ้นทุกครั้งที่แอปจากโปรไฟล์ที่มีการจัดการมีกิจกรรมอยู่เบื้องหน้า นอกจากนี้ หากปลดล็อกอุปกรณ์โดยตรงเพื่อดำเนินกิจกรรมของแอปในโปรไฟล์ที่มีการจัดการ ข้อความโทสต์จะปรากฏขึ้นเพื่อแจ้งให้ผู้ใช้ทราบว่าผู้ใช้อยู่ในโปรไฟล์งาน