API ของ Android 6.0

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

เริ่มพัฒนา

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

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

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

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

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

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

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

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

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

<uses-permission
        android:name="android.permission.USE_FINGERPRINT" />
โทรศัพท์มือถือแสดงฟังก์ชันการตรวจสอบสิทธิ์ด้วยลายนิ้วมือ

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

Direct Share

ส่วนล่างของโทรศัพท์มือถือที่แสดงฟังก์ชันการแชร์โดยตรง

การเปิดตัวนี้มี 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 เพื่อขอการยืนยันด้วยเสียงจากผู้ใช้ เลือก จากรายการตัวเลือก และอื่นๆ ได้

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

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

Assist API

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

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

หากต้องการให้บริบทเพิ่มเติมจากแอปแก่ผู้ช่วย ให้ทำตามขั้นตอนต่อไปนี้

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

อุปกรณ์พื้นที่เก็บข้อมูลแบบ Adoptable

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

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

การรองรับ Hotspot 2.0 รุ่นที่ 1

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

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

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

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

ColorStateLists ที่กำหนดธีมได้

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

ฟีเจอร์ด้านเสียง

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

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

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

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

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

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

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

Flashlight API

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

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

Reprocessing API

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

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

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

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

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

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

การเปิดตัวนี้มี API ใหม่ต่อไปนี้สำหรับ Android for Work

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

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

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