ขยายแอป Android ให้รองรับ Google Assistant ด้วยการดำเนินการของแอป

1. ภาพรวม

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

Codelab นี้ครอบคลุมแนวคิดระดับเริ่มต้นในการพัฒนาด้วยการดำเนินการของแอป คุณควรมีประสบการณ์ในการพัฒนาแอป Android และ Android Intent มาก่อน เพื่อปฏิบัติตาม Codelab นี้ หากคุณเพิ่งเริ่มใช้ Android คุณอาจต้องเริ่มต้นใช้งาน Codelab สำหรับพื้นฐานสำหรับนักพัฒนาซอฟต์แวร์ Android

สิ่งที่คุณจะสร้าง

ใน Codelab นี้ คุณจะเพิ่ม Intent ในตัว (BII) ในตัว 2 รายการในแอปฟิตเนสบน Android ได้ เพื่อให้ผู้ใช้เริ่มและหยุดตัวจับเวลาการออกกำลังกายได้ด้วยเสียงของตน

สิ่งที่คุณจะได้เรียนรู้

คุณจะได้เรียนรู้วิธีใช้ BII จากหมวดหมู่สุขภาพและการออกกำลังกายเพื่อขยาย Assistant ไปยังแอป Android นอกจากนี้ คุณยังจะได้เรียนรู้วิธีใช้ปลั๊กอิน Google Assistant สำหรับ Android Studio เพื่อทดสอบ BII ด้วย

ข้อกำหนดเบื้องต้น

ก่อนดำเนินการต่อ โปรดตรวจสอบว่าคุณมีเครื่องมือต่อไปนี้ในสภาพแวดล้อมของคุณ

  • เทอร์มินัลสำหรับเรียกใช้คำสั่ง Shell ที่มีการติดตั้ง git
  • Android Studio เวอร์ชันล่าสุด
  • บัญชี Google ที่มีสิทธิ์เข้าถึง [Google Play Console][]
  • อุปกรณ์ Android จริงหรือเสมือนที่มีการเข้าถึงอินเทอร์เน็ตไปยัง Play Store

ก่อนดำเนินการต่อ ให้ตรวจสอบว่าบัญชี Google เดียวกันลงชื่อเข้าใช้ Android Studio และแอป Google ในอุปกรณ์ทดสอบ

2. ทำความเข้าใจวิธีการทำงาน

การดำเนินการของแอปจะเชื่อมต่อผู้ใช้จาก Google Assistant กับแอป Android วิธีการทำงาน

เมื่อผู้ใช้ขอให้ Assistant ทํางานโดยใช้แอปของคุณ Assistant จะจับคู่คำค้นหาของผู้ใช้กับการดำเนินการของแอป capability ที่กำหนดไว้ในทรัพยากร XML ของ shortcuts.xml ของแอป

แผนภาพกระบวนการที่สาธิตวิธีที่ Google Assistant ประมวลผลคำสั่งเสียงสำหรับการสั่งงานด้วยเสียง

รูปที่ 1 แผนภาพกระบวนการที่สาธิตวิธีที่ Assistant ประมวลผลคำถามด้วยเสียงของการดำเนินการของแอป

องค์ประกอบความสามารถแต่ละรายการจะกำหนดสิ่งต่อไปนี้

  • ความตั้งใจ: คำสั่งเสียง Intent ของการดำเนินการของแอปที่ควรทริกเกอร์ความสามารถ
  • การดำเนินการตามคำสั่งซื้ออย่างน้อย 1 รายการ: Intent ของ Android หรือ Deep Link ที่ Assistant สร้างขึ้นเพื่อเปิดแอปและดำเนินการตามคำขอด้วยเสียงของผู้ใช้ คำจำกัดความของ Fulfillment ระบุพารามิเตอร์ที่คาดว่าจะได้รับจากคำค้นหาของผู้ใช้ และวิธีที่ควรเข้ารหัสพารามิเตอร์เหล่านั้นไว้ในวิธีการเปิดใช้งาน

Intent

ใน Natural Language Understanding (NLU) Intent คือกลุ่มวลีของผู้ใช้ที่มีความหมายคล้ายกัน Google ก็มีระบบ "ในตัว" หลายสิบรายการ Intent (BII) ที่ครอบคลุมคำขอหลากหลายประเภทที่ใช้ได้กับการดำเนินการของแอป ตัวอย่างเช่น Assistant ได้รับการฝึกให้เชื่อมโยงวลี "สั่งพิซซ่า" หรือ "แสดงเมนูของหวาน" กับ ORDER_MENU_ITEM BII การดำเนินการของแอปจะช่วยให้คุณใช้ประโยชน์จาก BII เหล่านี้เพื่อขยายคำขอด้วยเสียงที่ใช้บ่อยไปยังฟังก์ชันการทำงานของแอปได้อย่างรวดเร็ว

การดำเนินการตามคำสั่งซื้อ

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

3. เตรียมสภาพแวดล้อมในการพัฒนาซอฟต์แวร์

Codelab นี้ใช้แอปตัวอย่างฟิตเนสสำหรับ Android แอปนี้ช่วยให้ผู้ใช้เริ่มและหยุดตัวจับเวลาการออกกำลังกาย และดูสถิติเกี่ยวกับกิจวัตรการออกกำลังกายได้

ดาวน์โหลดไฟล์พื้นฐาน

หากต้องการรับไฟล์ฐานสำหรับ Codelab นี้ ให้เรียกใช้คำสั่งต่อไปนี้เพื่อโคลนที่เก็บ GitHub

git clone --branch codelab-start https://github.com/actions-on-google/appactions-fitness-kotlin.git

เมื่อโคลนที่เก็บแล้ว ให้เปิดที่เก็บใน Android Studio โดยทำดังนี้

  1. คลิกนำเข้าโปรเจ็กต์ในกล่องโต้ตอบยินดีต้อนรับสู่ Android Studio
  2. ค้นหาและเลือกโฟลเดอร์ที่คุณโคลนที่เก็บ

อัปเดตรหัสแอปพลิเคชัน Android

การอัปเดตรหัสแอปพลิเคชันของแอปจะระบุแอปบนอุปกรณ์ทดสอบโดยไม่ซ้ำกัน และหลีกเลี่ยงไม่ให้มี "ชื่อแพ็กเกจซ้ำ" หากอัปโหลดแอปไปยัง Play Console หากต้องการอัปเดตรหัสแอปพลิเคชัน ให้เปิด app/build.gradle:

android {
...
  defaultConfig {
    applicationId "com.MYUNIQUENAME.android.fitactions"
    ...
  }
}

แทนที่ "MYUNIQUENAME" ในช่อง applicationId เพื่อนำเสนอข้อมูลเฉพาะสำหรับคุณ

ลองใช้แอปในอุปกรณ์

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

  1. การเปิดอุปกรณ์ทดสอบ Android เสมือนจริงหรือจริง
  2. กำลังยืนยันว่าแอป Assistant ใช้งานได้
  3. ใช้ Android Studio เพื่อติดตั้งใช้งานและเรียกใช้แอปตัวอย่างในอุปกรณ์

ทำตามขั้นตอนต่อไปนี้เพื่อทดสอบแอป

  1. ใน Android Studio ให้เลือกเรียกใช้ > เรียกใช้แอป หรือคลิกเรียกใช้acabcb8f8634af20.pngในแถบเครื่องมือ
  2. หากใช้อุปกรณ์เสมือน ในกล่องโต้ตอบเลือกเป้าหมายการทำให้ใช้งานได้ ให้เลือกอุปกรณ์เสมือนและคลิกตกลง เวอร์ชันระบบปฏิบัติการที่แนะนำคือ Android 8 (API ระดับ 26) ขึ้นไป แต่การดำเนินการจะทำงานในอุปกรณ์ตั้งแต่ Android 5 (API ระดับ 21) ขึ้นไป
  3. หลังจากเปิดแอป ให้กดปุ่มหน้าแรกค้างไว้เพื่อตั้งค่า Assistant และยืนยันว่าใช้งานได้ ลงชื่อเข้าใช้ Assistant หากยังไม่ได้ลงชื่อเข้าใช้
  4. เปิดแอปอีกครั้ง

โทรศัพท์ที่เปิดแอปการดำเนินการใน Fit อยู่ซึ่งแสดงสถิติการออกกำลังกาย

รูปที่ 2 แอปตัวอย่างของ Fit Actions แสดงสถิติการออกกำลังกาย

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

ติดตั้งปลั๊กอิน Google Assistant

ปลั๊กอิน Google Assistant ช่วยให้คุณทดสอบการดำเนินการของแอปในอุปกรณ์ทดสอบได้ ทำตามขั้นตอนต่อไปนี้เพื่อเพิ่มลงใน Android Studio

  1. ไปที่ไฟล์ > การตั้งค่า (Android Studio > ค่ากำหนดบน MacOS)
  2. ในส่วนปลั๊กอิน ให้ไปที่ Marketplace และค้นหา "Google Assistant"
  3. ติดตั้งเครื่องมือและรีสตาร์ท Android Studio

4. เพิ่มความสามารถ Start Exercise BII

actions.intent.START_EXERCISE BII ช่วยให้ผู้ใช้เปิดแอปและเริ่มออกกำลังกายได้โดยใช้เสียงของตนเอง ในขั้นตอนนี้ คุณจะใช้ความสามารถสําหรับ BII นี้ ซึ่งจะอนุญาตให้ผู้ใช้ขอให้ Assistant เริ่มวิ่งในแอปฟิตเนส

กำหนดความสามารถ

Assistant ใช้องค์ประกอบ capability ที่กำหนดไว้ใน shortcuts.xml เพื่อประมวลผลคำสั่งเสียงโดยทำตามขั้นตอนต่อไปนี้

  1. Assistant จะจับคู่คำค้นหาเสียงของผู้ใช้กับ BII ที่ระบุไว้ในความสามารถของแอป
  2. Assistant จะแยกค่าจากคําค้นหาเป็นพารามิเตอร์ BII ระบบจะเพิ่มแต่ละพารามิเตอร์ลงใน Bundle ซึ่งแนบกับ Intent ที่สร้างขึ้น
  3. Assistant ใช้ Intent เพื่อเปิดแอป โดยให้สิทธิ์แอปเข้าถึงพารามิเตอร์ที่อยู่ในแพ็กเกจ

START_EXERCISE BII รองรับพารามิเตอร์ exercise.name BII คุณจะใช้พารามิเตอร์นี้เพื่ออนุญาตให้ผู้ใช้ระบุประเภทการออกกำลังกายที่จะติดตามในแอป

เพิ่ม START_EXERCISE BII ลงในแอปโดยเพิ่ม capability นี้ลงใน shortcuts.xml ซึ่งอยู่ในไดเรกทอรีโปรเจ็กต์ตัวอย่าง app/src/main/res/xml ดังนี้

<!-- shortcuts.xml -->

<capability android:name="actions.intent.START_EXERCISE">
  <intent
    android:action="android.intent.action.VIEW"
    android:targetPackage="PUT_YOUR_APPLICATION_ID_HERE"
    android:targetClass="com.devrel.android.fitactions.FitMainActivity">
    <parameter
      android:name="exercise.name"
      android:key="exerciseType"/>
  </intent>
</capability>

ให้แทนที่ PUT_YOUR_APPLICATION_ID_HERE ด้วย applicationId ที่ไม่ซ้ำกันซึ่งคุณกำหนดไว้ในขั้นตอนก่อนหน้า

XML ตัวอย่างก่อนหน้านี้

  • ประกาศความสามารถสำหรับ START_EXERCISE BII
  • ระบุintentของ Android ที่ Assistant สร้างขึ้นเพื่อเปิดแอป ดังนี้
    • แอตทริบิวต์ targetPackage และ targetClass จะระบุกิจกรรมการรับ
    • แอตทริบิวต์ parameter จะแมปพารามิเตอร์ exercise.name BII กับ exerciseType ในส่วนเพิ่มเติมของ Bundle ที่กิจกรรมได้รับ

จัดการพารามิเตอร์ BII ด้วยสินค้าคงคลังในบรรทัด

พารามิเตอร์ BII แสดงองค์ประกอบที่ดึงมาจากคำค้นหาของผู้ใช้ Assistant เช่น เมื่อผู้ใช้พูดว่า "Ok Google เริ่มรันใน ExampleApp" Assistant จะดึงข้อมูลว่า "Run" ลงในพารามิเตอร์ schema.org BII ของ exercise.name สําหรับ BII บางรายการ คุณจะสั่งให้ Assistant จับคู่พารามิเตอร์ BII กับชุดตัวระบุที่แอปคาดหวังได้

ซึ่งทำได้ด้วยการเชื่อมโยงองค์ประกอบพื้นที่โฆษณาในบรรทัดกับพารามิเตอร์ BII พื้นที่โฆษณาในบรรทัดคือชุดค่าพารามิเตอร์ BII ที่รองรับ เช่น "run" "hike" และ "jog" และรหัสทางลัดที่เกี่ยวข้อง เช่น EXERCISE_RUN การเชื่อมโยงพื้นที่โฆษณานี้ช่วยให้ Assistant ส่งรหัสทางลัดสำหรับพารามิเตอร์การจับคู่ไปยังกิจกรรมการดำเนินการตามคำสั่งซื้อ แทนค่าการค้นหาดิบ

พารามิเตอร์ BII บางรายการ เช่น exercise.name ต้องใช้พื้นที่โฆษณาในบรรทัดจึงจะทำงานได้ หากต้องการจัดการพารามิเตอร์นี้ ให้เพิ่มองค์ประกอบ shortcut ของพื้นที่โฆษณาต่อไปนี้ลงใน shortcuts.xml

<!-- shortcuts.xml -->

<shortcuts>
  <shortcut
    android:shortcutId="running"
    android:shortcutShortLabel="@string/activity_running">
    <capability-binding android:key="actions.intent.START_EXERCISE">
      <parameter-binding
        android:key="exercise.name"
        android:value="@array/runningSynonyms"/>
    </capability-binding>
  </shortcut>

  <shortcut
    android:shortcutId="walking"
    android:shortcutShortLabel="@string/activity_walking">
    <capability-binding android:key="actions.intent.START_EXERCISE">
      <parameter-binding
        android:key="exercise.name"
        android:value="@array/walkingSynonyms"/>
    </capability-binding>
  </shortcut>

  <shortcut
    android:shortcutId="cycling"
    android:shortcutShortLabel="@string/activity_cycling">
    <capability-binding android:key="actions.intent.START_EXERCISE">
      <parameter-binding
        android:key="exercise.name"
        android:value="@array/cyclingSynonyms"/>
    </capability-binding>
  </shortcut>

  <capability> ... </capability>
</shortcuts>

ในโค้ดก่อนหน้านี้ คุณได้กำหนดทางลัด 3 รายการที่แสดงถึงพื้นที่โฆษณาแบบอินไลน์สำหรับประเภทการออกกำลังกายที่รองรับของแอป ซึ่งได้แก่ การวิ่ง การเดิน และการปั่นจักรยาน แป้นพิมพ์ลัดแต่ละรายการจะเชื่อมโยงกับความสามารถในลักษณะต่อไปนี้

  • แอตทริบิวต์ android:key ขององค์ประกอบ capability-binding แต่ละรายการอ้างอิงถึง START_EXCERCISE BII เดียวกันที่กำหนดไว้สำหรับความสามารถนี้
  • องค์ประกอบ parameter-binding ของแป้นพิมพ์ลัดแต่ละรายการไปยังพารามิเตอร์ exercise.name BII

เพิ่มคำพ้องความหมายพื้นที่โฆษณาในบรรทัด

แอตทริบิวต์ android:value ขององค์ประกอบ parameter-binding ในทางลัดของพื้นที่โฆษณาก่อนหน้านี้หมายถึงทรัพยากรอาร์เรย์ของคำพ้องความหมายสำหรับองค์ประกอบพื้นที่โฆษณาแต่ละรายการ คำพ้องความหมายทำให้ประเภทขององค์ประกอบหนึ่งๆ ใช้ได้ เช่น "วิ่ง" "วิ่งเหยาะๆ" และ "วิ่ง" เพื่ออ้างอิงถึง shortcutId เดียวกัน เพิ่มรายการคำพ้องความหมายต่อไปนี้ในทรัพยากร array.xml ของโปรเจ็กต์:

<!-- array.xml -->
<array name="runningSynonyms">
  <item>Run</item>
  <item>Jog</item>
  <item>Jogging</item>
  <item>Sprint</item>
</array>

<array name="walkingSynonyms">
  <item>Walk</item>
  <item>Hike</item>
  <item>Hiking</item>
</array>

<array name="cyclingSynonyms">
  <item>Biking</item>
  <item>Riding</item>
  <item>Pedaling</item>
</array>

ตอบสนอง Intent ของ Android ที่เข้ามาใหม่

Intent ของ Android คือออบเจ็กต์การรับส่งข้อความที่ Android ใช้เพื่อขอให้ดำเนินการจากแอปอื่น Assistant ตอบสนองความต้องการของผู้ใช้ การค้นหาด้วยเสียงโดยการสร้าง Intent จากรายละเอียดการกำหนดค่าในความสามารถที่ทริกเกอร์ เพื่อให้ Intent สำหรับความสามารถของ START_EXERCISE เสร็จสมบูรณ์ ให้อัปเดตคลาสเป้าหมาย FitMainActivity เพื่อจัดการพารามิเตอร์ Intent ขาเข้าและพารามิเตอร์ BII

ก่อนอื่น ให้แทนที่ฟังก์ชัน Intent.handleIntent ด้วยโค้ดต่อไปนี้

//FitMainActivity.kt

private fun Intent.handleIntent() {
  when (action) {
    // When the BII is matched, Intent.Action_VIEW will be used
    Intent.ACTION_VIEW -> handleIntent(data)
    // Otherwise start the app as you would normally do.
    else -> showDefaultView()
  }
}

จากนั้นเพิ่มฟังก์ชัน handleIntent ใหม่ในชั้นเรียนโดยใช้รหัสต่อไปนี้

//FitMainActivity.kt

/**
 * Use extras provided by the intent to handle the different BIIs
 */

private fun handleIntent(data: Uri?) {
  // path is normally used to indicate which view should be displayed
  // i.e https://fit-actions.firebaseapp.com/start?exerciseType="Running" -> path = "start"
  var actionHandled = true

  val startExercise = intent?.extras?.getString(START_EXERCISE)
  // Add stopExercise variable here

  if (startExercise != null){
    val type = FitActivity.Type.find(startExercise)
    val arguments = Bundle().apply {
      putSerializable(FitTrackingFragment.PARAM_TYPE, type)
    }
    updateView(FitTrackingFragment::class.java, arguments)
  } // Add conditional for stopExercise
  else{
   // path is not supported or invalid, start normal flow.
   showDefaultView()

   // Unknown or invalid action
   actionHandled = false
  }
  notifyActionSuccess(actionHandled)
}

ในฟังก์ชัน Intent.handleIntent ก่อนหน้านี้ เมื่อมีการทริกเกอร์ ACTION_VIEW ระบบจะส่งข้อมูล Intent ของการดำเนินการของแอปไปยังฟังก์ชัน handleIntent พารามิเตอร์ BII ที่รวมอยู่ใน Intent ของ START_EXERCISE จะเข้าถึงได้ผ่าน intent?.extras?.getString(START_EXERCISE) ฟังก์ชันที่เหลือจะอัปเดต FitTrackingFragment เพื่อแสดงประเภทการออกกำลังกาย startExercise ที่เลือก

ทดสอบการดำเนินการของแอป

ในระหว่างการพัฒนาการดำเนินการของแอป คุณจะใช้ปลั๊กอิน Google Assistant เพื่อดูตัวอย่างการดำเนินการในอุปกรณ์ทดสอบได้ คุณยังใช้ปลั๊กอินเพื่อปรับค่าพารามิเตอร์ Intent ของการดำเนินการเพื่อทดสอบว่าแอปของคุณจัดการกับวิธีต่างๆ ที่ผู้ใช้อาจใช้วลีคำขอ Assistant สำหรับแอปของคุณได้

หากต้องการทดสอบการดำเนินการของแอปด้วยปลั๊กอิน ให้ทำตามขั้นตอนต่อไปนี้

  1. เรียกใช้แอปใน Android Studio โดยเลือกเรียกใช้ > เรียกใช้แอปหรือคลิกไอคอนเรียกใช้บนแถบเครื่องมือด้านบน
  2. ไปที่เครื่องมือ > การดำเนินการของแอป > Google Assistant > เครื่องมือทดสอบการดำเนินการของแอป
  3. คลิกสร้างพรีวิว หากระบบถาม ให้อ่านและยอมรับนโยบายและข้อกำหนดในการให้บริการของการดำเนินการของแอป
  4. เลือก Intent ในตัว actions.intent.START_EXERCISE
  5. ในช่อง exercise ให้ใช้ค่าเริ่มต้น running
  6. คลิกเรียกใช้การดำเนินการของแอป ตรวจสอบว่า Deep Link ของ Assistant เข้าสู่ตัวจับเวลาการออกกำลังกายของแอป และตัวจับเวลาได้เริ่มออกกำลังกายประเภทการวิ่งแล้ว

คุณได้ใช้การดําเนินการของแอปครั้งแรกด้วยSTART_EXERCISE BII ยินดีด้วย ถัดไป เราจะอนุญาตให้ผู้ใช้หยุดการออกกำลังกายที่กำลังดำเนินอยู่ในแอปของคุณ

5. เพิ่มความสามารถ Stop Exercise BII

actions.intent.STOP_EXERCISE BII อนุญาตให้ผู้ใช้หยุดเซสชันการออกกำลังกายโดยถามคำถามอย่างเช่น "Ok Google หยุดการวิ่งของฉันใน ExampleApp" ใช้งาน BII นี้ในแอปฟิตเนสโดยเพิ่ม capability รายการที่ 2 ลงใน shortcuts.xml

<!-- shortcuts.xml -->

<capability android:name="actions.intent.STOP_EXERCISE">
  <intent
    android:action="android.intent.action.VIEW"
    android:targetPackage="PUT_YOUR_APPLICATION_ID_HERE"
    android:targetClass="com.devrel.android.fitactions.FitMainActivity">
    <!-- Eg. name = "Running" -->
    <parameter
        android:name="exercise.name"
        android:key="stopExercise"/>
  </intent>
</capability>

แทนที่ PUT_YOUR_APPLICATION_ID_HERE ด้วย applicationId ที่ไม่ซ้ำกันของคุณ

จัดการพารามิเตอร์ BII ด้วยสินค้าคงคลังในบรรทัด

BII นี้รองรับพารามิเตอร์ exercise.name เดียวกับ START_EXERCISE BII เพื่อให้ผู้ใช้ระบุการออกกำลังกายที่ต้องการสิ้นสุดได้ หากต้องการเปิดใช้ ให้เพิ่มองค์ประกอบทางลัดพื้นที่โฆษณาชุดที่ 2 ลงใน shortcuts.xml ดังนี้

<!-- shortcuts.xml -->

<shortcut
  android:shortcutId="running"
  android:shortcutShortLabel="@string/activity_running">
  <capability-binding android:key="actions.intent.STOP_EXERCISE">
      <parameter-binding
          android:key="exercise.name"
          android:value="@array/runningSynonyms"/>
  </capability-binding>
</shortcut>

<shortcut
  android:shortcutId="walking"
  android:shortcutShortLabel="@string/activity_walking">
  <capability-binding android:key="actions.intent.STOP_EXERCISE">
      <parameter-binding
          android:key="exercise.name"
          android:value="@array/walkingSynonyms"/>
  </capability-binding>
</shortcut>

<shortcut
  android:shortcutId="cycling"
  android:shortcutShortLabel="@string/activity_cycling">
  <capability-binding android:key="actions.intent.STOP_EXERCISE">
      <parameter-binding
          android:key="exercise.name"
          android:value="@array/cyclingSynonyms"/>
  </capability-binding>
</shortcut>

ตอบสนอง Intent ของ Android ที่เข้ามาใหม่

เปิดใช้แอปเพื่อจัดการ Intent ของ Android STOP_EXERCISE ที่เข้ามาใหม่โดยการอัปเดตคลาส FitMainActivity ก่อนอื่นให้เพิ่มตัวแปรลงในฟังก์ชัน handleIntent เพื่อเก็บข้อมูล Intent STOP_EXERCISE ดังนี้

// FitMainActivity.kt

private fun handleIntent(data: Uri?) {
  val stopExercise = intent?.extras?.getString(STOP_EXERCISE)
  //...
}

ถัดไป ให้อัปเดตตรรกะแบบมีเงื่อนไขของฟังก์ชัน handleIntent เพื่อจัดการ Intent ของ STOP_EXERCISE ดังนี้

// FitMainActivity.kt

private fun handleIntent(data: Uri?) {
  //...
  if (startExercise != null){
    val type = FitActivity.Type.find(startExercise)
    val arguments = Bundle().apply {
      putSerializable(FitTrackingFragment.PARAM_TYPE, type)
    }
    updateView(FitTrackingFragment::class.java, arguments)
  } // Add conditional for stopExercise
  <strong>
  } else if(stopExercise != null){
    // Stop the tracking service if any and return to home screen.
    stopService(Intent(this, FitTrackingService::class.java))
    updateView(FitStatsFragment::class.java)
  }
  </strong>
  //...
}

ในโค้ดก่อนหน้านี้ คุณได้อัปเดตฟังก์ชัน handleIntent เพื่อตรวจหา STOP_EXERCISE BII ใน Intent ที่เข้ามาของ Android หากพบ ฟังก์ชันจะหยุดตัวจับเวลาที่ใช้งานอยู่และนำผู้ใช้กลับไปที่หน้าจอหลัก

ทดสอบการดำเนินการของแอป

ทดสอบการดำเนินการของแอปโดยใช้ปลั๊กอิน Google Assistant โดยทำตามขั้นตอนต่อไปนี้

  1. เรียกใช้แอปใน Android Studio โดยเลือกเรียกใช้ > เรียกใช้แอปหรือคลิกไอคอนเรียกใช้บนแถบเครื่องมือด้านบน
  2. ในแอป ให้เริ่ม "การวิ่ง" ใหม่ สำหรับการออกกำลังกาย
  3. เปิดปลั๊กอินใน Android Studio โดยไปที่เครื่องมือ > การดำเนินการของแอป > Google Assistant > เครื่องมือทดสอบการดำเนินการของแอป
  4. คลิกสร้างพรีวิว
  5. เลือก Intent ในตัว actions.intent.STOP_EXERCISE
  6. ในช่อง exercise ให้ใช้ค่าเริ่มต้น running
  7. คลิกเรียกใช้การดำเนินการของแอป ยืนยันว่า Assistant หยุดการออกกำลังกายและกลับไปยังหน้าจอหลัก

6. ขั้นตอนถัดไป

ยินดีด้วย

ตอนนี้คุณเข้าใจวิธีเปิดใช้แอป Android ด้วยเสียงโดยใช้ Intent ในตัวของ Assistant แล้ว คุณได้เรียนรู้สิ่งต่อไปนี้ใน Codelab แล้ว

  • วิธีช่วยให้ผู้ใช้เจาะลึกข้อมูลของฟีเจอร์ที่เจาะจงของแอปโดยใช้ Assistant
  • วิธีใช้พื้นที่โฆษณาแบบอินไลน์
  • วิธีทดสอบ BII โดยใช้ปลั๊กอิน Google Assistant

ขั้นตอนถัดไป

จากที่นี่ คุณสามารถลองปรับเกณฑ์การค้นหาเพิ่มเติมในแอปฟิตเนสของคุณได้ หากต้องการอ้างอิงโปรเจ็กต์ที่เสร็จสมบูรณ์แล้ว ให้ดู Branch หลักใน GitHub

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

โปรดสำรวจแหล่งข้อมูลเหล่านี้เพื่อดำเนินการต่อในเส้นทางของ Actions on Google

ติดตามเราบน Twitter @ActionsOnGoogle เพื่อติดตามประกาศล่าสุดของเรา และทวีตไปที่ #appactions เพื่อแชร์สิ่งที่คุณสร้างขึ้น

แบบสำรวจความคิดเห็น

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