Android 6.0 Marshmallow นำเสนอวิธีใหม่ในการมีส่วนร่วมกับแอปผ่านผู้ช่วย แอปต่างๆ เช่น Google Assistant ผู้ช่วยคือหน้าต่างระดับบนสุดที่ผู้ใช้สามารถดูเพื่อดึงข้อมูลตามบริบท การดำเนินการที่เกี่ยวข้องกับกิจกรรมปัจจุบัน การดำเนินการเหล่านี้อาจรวมถึง Deep Link ไปยังแอปอื่นๆ ใน อุปกรณ์
ผู้ใช้เปิดใช้งานผู้ช่วยโดยกดปุ่มหน้าแรกค้างไว้หรือพูด วลีที่สำคัญ ในการตอบกลับ ระบบจะเปิดหน้าต่างระดับบนสุดที่แสดงตามบริบท ที่เกี่ยวข้อง
แอปผู้ช่วย เช่น Google Assistant จะใช้หน้าต่างการวางซ้อนของ Assistant ผ่าน คุณลักษณะที่ชื่อว่า Now on Tap ซึ่งทำงานร่วมกับฟังก์ชันระดับแพลตฟอร์มของ Android ระบบ ช่วยให้ผู้ใช้เลือกแอปผู้ช่วย ซึ่งจะรับข้อมูลบริบทจากแอปโดยใช้ API ช่วยเหลือของ Android
คำแนะนำนี้จะอธิบายวิธีที่แอป Android ใช้ Assist API ของ Android เพื่อปรับปรุง Assistant ประสบการณ์ของผู้ใช้ ดูวิธีสร้างแอปสื่อเพื่อให้ Assistant เปิดได้ และการควบคุม โปรดดู Google Assistant และแอปสื่อ
การใช้ Assistant
รูปที่ 1 แสดงการโต้ตอบทั่วไปของผู้ใช้กับผู้ช่วย เมื่อผู้ใช้กดค้าง ปุ่มหน้าแรกจะมีการเรียกใช้ Callback ของ Assist API ในแอปแหล่งที่มา (ขั้นตอนที่ 1) ผู้ช่วยแสดงหน้าต่างที่วางซ้อน (ขั้นตอนที่ 2 และ 3) จากนั้นผู้ใช้จะเลือกการดำเนินการที่ต้องการ Assistant จะดำเนินการที่เลือก เช่น การเรียกให้ Intent เริ่มทำงานด้วย Deep Link ไปยังแอปร้านอาหาร (ปลายทาง) (ขั้นตอนที่ 4)
![](https://developer.android.google.cn/static/images/training/assistant/image01.png?authuser=0000&hl=th)
รูปที่ 1 ตัวอย่างการโต้ตอบกับ Assistant กับฟีเจอร์ Now on Tap แอป Google
ผู้ใช้สามารถกำหนดค่าผู้ช่วยโดยเลือกการตั้งค่า > แอป > แอปเริ่มต้น > ช่วยเหลือและ ป้อนข้อมูลด้วยเสียง ผู้ใช้จะเปลี่ยนตัวเลือกของระบบได้ เช่น การเข้าถึง เนื้อหาบนหน้าจอเป็นข้อความและเข้าถึงภาพหน้าจอ ดังที่แสดงในรูปที่ 2
![](https://developer.android.google.cn/static/images/training/assistant/image02.png?authuser=0000&hl=th)
รูปที่ 2 ช่วยเหลือและ การตั้งค่าการป้อนข้อมูลด้วยเสียง
แอปแหล่งที่มา
เพื่อให้แอปทำงานกับ Assistant ในฐานะแหล่งข้อมูลให้ผู้ใช้ได้ คุณก็แค่ปฏิบัติตามการช่วยเหลือพิเศษที่ดีที่สุด แนวทางปฏิบัติที่ดีที่สุด ส่วนนี้อธิบายวิธีให้ข้อมูลเพิ่มเติม เพื่อช่วยปรับปรุงประสบการณ์ของผู้ใช้ Assistant รวมถึงสถานการณ์ต่างๆ ที่ต้องมีการจัดการพิเศษ เช่น มุมมองที่กำหนดเอง
แชร์ข้อมูลเพิ่มเติม ด้วย Assistant
นอกจากข้อความและภาพหน้าจอแล้ว แอปของคุณยังแชร์ ข้อมูลอื่นๆ กับผู้ช่วย เช่น เพลงของคุณ แอปสามารถเลือกส่งข้อมูลปัจจุบันของอัลบั้มเพื่อให้ Assistant สามารถ แนะนำการดำเนินการที่ชาญฉลาด ปรับ ให้เหมาะกับกิจกรรมในปัจจุบันได้ โปรดทราบว่า API การสนับสนุน ไม่มีการควบคุมสื่อ หากต้องการเพิ่มการควบคุมสื่อ โปรดดู Google Assistant และแอปสื่อ
เพื่อให้ข้อมูลเพิ่มเติมแก่ผู้ช่วย แอปจะ บริบทแอปพลิเคชันส่วนกลางด้วยการลงทะเบียน Listener แอปและ ระบุข้อมูลเฉพาะกิจกรรมพร้อมกับ Callback ของกิจกรรมตามที่แสดงใน รูปที่ 3:
![](https://developer.android.google.cn/static/images/training/assistant/image03.png?authuser=0000&hl=th)
รูปที่ 3 แผนภาพลำดับวงจรการใช้งาน API การสนับสนุน
เพื่อให้บริบททั่วโลกของแอปพลิเคชัน แอปจึงสร้างการติดตั้งใช้งาน
Application.OnProvideAssistDataListener
และลงทะเบียน
ด้วย registerOnProvideAssistDataListener()
ในการให้ข้อมูลบริบทเฉพาะกิจกรรม กิจกรรม
ลบล้าง onProvideAssistData()
และ onProvideAssistContent()
เราจะเรียกวิธีกิจกรรมทั้งสองนี้หลังจากตัวเลือกสากล
มีการเรียกใช้ Callback เนื่องจาก Callback จะทำงานในเทรดหลัก
ให้ทำทันที
ระบบจะเรียกใช้ Callback เมื่อกิจกรรมทำงานอยู่เท่านั้น
การให้บริบท
เมื่อผู้ใช้เปิดใช้งานผู้ช่วย
เรียกใช้ onProvideAssistData()
เพื่อสร้าง
ACTION_ASSIST
Intent ที่มีบริบททั้งหมดของ
แอปพลิเคชันปัจจุบันแสดงเป็นอินสแตนซ์ของ AssistStructure
คุณสามารถลบล้างเมธอดนี้เพื่อวาง
สิ่งที่คุณต้องการในชุดข้อมูลเพื่อให้ปรากฏใน
ความตั้งใจสนับสนุน EXTRA_ASSIST_CONTEXT
ส่วน
การอธิบายเนื้อหา
แอปของคุณใช้ onProvideAssistContent()
ได้
เพื่อปรับปรุงประสบการณ์ของผู้ใช้ Assistant ด้วยการให้ข้อมูลอ้างอิงที่เกี่ยวข้องกับเนื้อหา
เกี่ยวข้องกับกิจกรรมปัจจุบัน คุณสามารถอธิบายเนื้อหาแอปได้โดยใช้
คำศัพท์ทั่วไปที่กำหนดโดย Schema.org
ผ่านออบเจ็กต์ JSON-LD ในตัวอย่างด้านล่าง แอปเพลงมี
เพื่ออธิบายอัลบั้มเพลงที่ผู้ใช้กำลังใช้งานอยู่
กำลังดู:
Kotlin
override fun onProvideAssistContent(assistContent: AssistContent) { super.onProvideAssistContent(assistContent) val structuredJson: String = JSONObject() .put("@type", "MusicRecording") .put("@id", "https://example.com/music/recording") .put("name", "Album Title") .toString() assistContent.structuredData = structuredJson }
Java
@Override public void onProvideAssistContent(AssistContent assistContent) { super.onProvideAssistContent(assistContent); String structuredJson = new JSONObject() .put("@type", "MusicRecording") .put("@id", "https://example.com/music/recording") .put("name", "Album Title") .toString(); assistContent.setStructuredData(structuredJson); }
นอกจากนี้ คุณยังปรับปรุงประสบการณ์ของผู้ใช้ได้ด้วยการติดตั้งใช้งานที่กําหนดเอง
onProvideAssistContent()
,
ซึ่งมีประโยชน์ดังต่อไปนี้
- ปรับเนื้อหาที่ให้มา ความตั้งใจที่จะ สะท้อนให้เห็นถึงบริบทระดับบนสุดของกิจกรรมได้ดียิ่งขึ้น
- ระบุ URI ของเนื้อหาที่แสดง
- กรอก
setClipData()
ด้วย เนื้อหาที่สนใจซึ่งผู้ใช้กำลังดูอยู่
หมายเหตุ: แอปที่ใช้การเลือกข้อความที่กำหนดเองอาจต้องมี
เพื่อติดตั้งใช้งาน onProvideAssistContent()
และโทรหา setClipData()
การใช้งานเริ่มต้น
หากทั้ง onProvideAssistData()
และ onProvideAssistContent()
มีการใช้งาน Callback แล้ว ระบบจะยังคงดำเนินการต่อและส่งผ่าน
ข้อมูลที่รวบรวมไปยังผู้ช่วยโดยอัตโนมัติ ยกเว้นในกรณีที่
มีข้อความว่าปลอดภัย
ดังที่แสดงในรูปที่ 3 ระบบจะใช้การใช้งานเริ่มต้นของ onProvideStructure()
และ onProvideVirtualStructure()
เพื่อ
เก็บรวบรวมข้อความและดูข้อมูลลำดับชั้น หากข้อมูลพร็อพเพอร์ตี้ของคุณใช้บรรทัดที่กำหนดเอง
ภาพวาดข้อความ ลบล้าง onProvideStructure()
เพื่อระบุ
Assistant พร้อมข้อความที่แสดงแก่ผู้ใช้โดยโทรหา setText(CharSequence)
ในกรณีส่วนใหญ่ การสนับสนุนการช่วยเหลือพิเศษจะช่วยให้ เป็นผู้ช่วยเพื่อรับข้อมูลที่ต้องการ หากต้องการใช้การสนับสนุนการช่วยเหลือพิเศษ ปฏิบัติตามแนวทางปฏิบัติที่ดีที่สุดที่อธิบายไว้ในการสร้างแอปพลิเคชัน เข้าถึงได้ รวมถึงสิ่งต่อไปนี้
- ระบุแอตทริบิวต์
android:contentDescription
- ป้อนข้อมูล
AccessibilityNodeInfo
สำหรับมุมมองที่กำหนดเอง - สร้าง
ตรวจสอบว่าออบเจ็กต์
ViewGroup
ที่กำหนดเองถูกต้อง แสดง บุตรหลานของตน
การยกเว้นยอดดูจากผู้ช่วย
แอปจะยกเว้นมุมมองปัจจุบันจากผู้ช่วยเพื่อจัดการข้อมูลที่ละเอียดอ่อน
โดยการตั้งค่าพารามิเตอร์เลย์เอาต์ FLAG_SECURE
ของ WindowManager
คุณต้องตั้งค่า FLAG_SECURE
อย่างชัดแจ้งสำหรับ
ทุกหน้าต่างที่กิจกรรมสร้างขึ้นรวมถึงกล่องโต้ตอบ นอกจากนี้ แอปยังสามารถใช้
setSecure()
ที่จะยกเว้น
แพลตฟอร์มจาก Assistant ไม่มี
กลไกสากล (ระดับแอป) เพื่อยกเว้นการดูทั้งหมดจาก Assistant หมายเหตุ
ว่า FLAG_SECURE
ไม่ได้ทำให้การเรียกกลับของ Assist API หยุดลง
เริ่มทำงาน กิจกรรมที่ใช้ FLAG_SECURE
จะยังคงสามารถ
ให้ข้อมูลแก่แอป Assistant โดยใช้ Callback ที่อธิบายไว้ก่อนหน้านี้
ในคู่มือนี้
หมายเหตุ: สำหรับบัญชีองค์กร (Android for Work)
ผู้ดูแลระบบสามารถปิดใช้
การรวบรวมข้อมูลผู้ช่วยสำหรับโปรไฟล์งานโดยใช้เมธอด setScreenCaptureDisabled()
ของ DevicePolicyManager
API
การโต้ตอบด้วยเสียง
มีการเรียกใช้ Callback ของ API สนับสนุนตาม วลีสำคัญ สำหรับข้อมูลเพิ่มเติม โปรดดู เสียง Actions
ข้อควรพิจารณาเกี่ยวกับ Z-order
Assistant ใช้หน้าต่างวางซ้อนที่มีน้ำหนักเบาซึ่งแสดงอยู่ด้านบน ด้วย เพราะผู้ใช้สามารถเปิดใช้งานผู้ช่วยได้ตลอดเวลา ห้ามสร้าง อย่างถาวร หน้าต่างแจ้งเตือนของระบบที่รบกวนหน้าต่างที่วางซ้อนดังที่แสดงใน รูปที่ 4
![](https://developer.android.google.cn/static/images/training/assistant/image04.png?authuser=0000&hl=th)
รูปที่ 4 Z-order ในเลเยอร์สนับสนุน
หากแอปของคุณใช้ การแจ้งเตือนของระบบ ให้นำออกโดยทันทีเพราะวางไว้บน ทำให้ประสบการณ์ของผู้ใช้แย่ลง
แอปปลายทาง
แอป Assistant มักจะใช้ประโยชน์จากการทำ Deep Link เพื่อค้นหาแอปปลายทาง หากต้องการให้ เป็นแอปปลายทางที่เป็นไปได้ โปรดพิจารณาเพิ่มการสนับสนุนการทำ Deep Link การจับคู่ ระหว่างบริบทผู้ใช้ปัจจุบันกับ Deep Link หรือการทำงานอื่นๆ ที่เป็นไปได้ที่แสดงใน หน้าต่างที่วางซ้อน (แสดงในขั้นตอนที่ 3 ในรูปที่ 1) จำเพาะเจาะจงกับการใช้งาน Google Assistant เท่านั้น สำหรับ ตัวอย่างเช่น แอป Google Assistant ใช้การทำ Deep Link และ App Link เพิ่มการเข้าชมไปยังแอปปลายทาง
ใช้งาน Assistant ของคุณเอง
คุณอาจต้องการใช้ผู้ช่วยของคุณเอง ดังที่แสดงในรูป
2 ผู้ใช้จะเลือกแอปผู้ช่วยที่ใช้งานอยู่ได้
แอป Assistant ต้องให้การใช้งาน VoiceInteractionSessionService
และ VoiceInteractionSession
ดังที่แสดงใน
VoiceInteraction
ตัวอย่างนี้ และต้องมีสิทธิ์ BIND_VOICE_INTERACTION
ด้วย จากนั้นผู้ช่วยจะ
รับข้อความและมุมมองต้นไม้ที่แสดงเป็นอินสแตนซ์ของ AssistStructure
ใน onHandleAssist()
โดยจะได้รับภาพหน้าจอผ่าน onHandleScreenshot()