สร้างทางลัด

ทางลัดจะแสดงเนื้อหาบางประเภทต่อผู้ใช้โดยช่วยให้ผู้ใช้เข้าถึงส่วนต่างๆ ของแอปได้อย่างรวดเร็ว

ความแตกต่างระหว่างทางลัดแอปกับทางลัดที่ปักหมุด
รูปที่ 1 ทางลัดแอปและทางลัดที่ปักหมุดไว้

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

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

สร้างทางลัดแบบคงที่

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

วิธีสร้างทางลัดแบบคงที่

  1. ในไฟล์ AndroidManifest.xml ของแอป ให้หากิจกรรมที่มีตัวกรอง Intent ตั้งค่าเป็นการดำเนินการ android.intent.action.MAIN และหมวดหมู่ android.intent.category.LAUNCHER
  2. เพิ่มองค์ประกอบ <meta-data> ลงในกิจกรรมนี้ซึ่งอ้างอิงถึง ไฟล์ทรัพยากรที่กำหนดทางลัดของแอป

    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
              package="com.example.myapplication">
      <application ... >
        <activity android:name="Main">
          <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
          </intent-filter>
          <meta-data android:name="android.app.shortcuts"
                     android:resource="@xml/shortcuts" />
        </activity>
      </application>
    </manifest>
    
  3. สร้างไฟล์ทรัพยากรใหม่ชื่อ res/xml/shortcuts.xml

  4. ในไฟล์ทรัพยากรใหม่ ให้เพิ่ม<shortcuts>องค์ประกอบรูทที่มีรายการองค์ประกอบ <shortcut> ในแต่ละ<shortcut> องค์ประกอบ ให้ระบุข้อมูลเกี่ยวกับทางลัดแบบคงที่ ซึ่งรวมถึงไอคอน ป้ายกำกับคำอธิบาย และ Intent ที่เปิดใช้ภายในแอป

    <shortcuts xmlns:android="http://schemas.android.com/apk/res/android">
      <shortcut
        android:shortcutId="compose"
        android:enabled="true"
        android:icon="@drawable/compose_icon"
        android:shortcutShortLabel="@string/compose_shortcut_short_label1"
        android:shortcutLongLabel="@string/compose_shortcut_long_label1"
        android:shortcutDisabledMessage="@string/compose_disabled_message1">
        <intent
          android:action="android.intent.action.VIEW"
          android:targetPackage="com.example.myapplication"
          android:targetClass="com.example.myapplication.Main" />
        <!-- If your shortcut is associated with multiple intents, include them
             here. The last intent in the list determines what the user sees when
             they launch this shortcut. -->
        <categories android:name="android.shortcut.conversation" />
        <capability-binding android:key="actions.intent.CREATE_MESSAGE" />
      </shortcut>
      <!-- Specify more shortcuts here. -->
    </shortcuts>

ปรับแต่งค่าแอตทริบิวต์

รายการต่อไปนี้มีคำอธิบายสำหรับแอตทริบิวต์ต่างๆ ภายใน ทางลัดแบบคงที่ ระบุค่าสำหรับ android:shortcutId และ android:shortcutShortLabel โดยจะใส่หรือไม่ใส่ก็ได้

android:shortcutId

สตริงลิเทอรัลที่แสดงทางลัดเมื่อออบเจ็กต์ ShortcutManagerดำเนินการกับทางลัด

android:shortcutShortLabel

วลีที่กระชับซึ่งอธิบาย วัตถุประสงค์ของทางลัด หากเป็นไปได้ ให้จำกัดคำอธิบายสั้นๆ นี้ไว้ไม่เกิน 10 อักขระ

ดูข้อมูลเพิ่มเติมได้ที่ setShortLabel()

android:shortcutLongLabel

วลีแบบขยายที่อธิบายวัตถุประสงค์ของทางลัด หากมีพื้นที่เพียงพอ ตัวเรียกใช้จะแสดงค่านี้แทน android:shortcutShortLabel หากเป็นไปได้ ให้จำกัดคำอธิบายแบบยาวนี้ ไม่เกิน 25 อักขระ

ดูข้อมูลเพิ่มเติมได้ที่ setLongLabel()

android:shortcutDisabledMessage

ข้อความที่ปรากฏในตัวเรียกใช้ที่รองรับ เมื่อผู้ใช้พยายามเปิดใช้ทางลัดที่ปิดใช้ ข้อความ ต้องอธิบายให้ผู้ใช้ทราบสาเหตุที่ปิดใช้ทางลัด ค่าของแอตทริบิวต์นี้จะไม่มีผลหาก android:enabled เป็น true

android:enabled

กำหนดว่าผู้ใช้จะโต้ตอบกับทางลัดได้หรือไม่ จาก Launcher ที่รองรับ ค่าเริ่มต้นของ android:enabled คือ true หากตั้งค่าเป็น false ให้ตั้งค่า android:shortcutDisabledMessage ที่ อธิบายเหตุผลที่คุณปิดใช้ทางลัด หากคุณไม่คิดว่าจำเป็นต้อง ระบุข้อความดังกล่าว ให้นำทางลัดออกจากไฟล์ XML ทั้งหมด

android:icon

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

กำหนดค่าองค์ประกอบด้านใน

ไฟล์ XML ที่แสดงทางลัดแบบคงที่ของแอปจะรองรับองค์ประกอบต่อไปนี้ ภายในองค์ประกอบ <shortcut> แต่ละรายการ คุณต้องระบุองค์ประกอบ intent inner สำหรับทางลัดแบบคงที่แต่ละรายการที่คุณกำหนด

intent

การดำเนินการที่ระบบจะเปิดเมื่อผู้ใช้เลือกทางลัด ความตั้งใจนี้ต้องระบุค่าสำหรับแอตทริบิวต์ android:action

คุณระบุ Intent หลายรายการสำหรับทางลัดเดียวได้ ดูรายละเอียดได้ที่จัดการหลายเจตนาและกิจกรรม ตั้งค่าเจตนา และข้อมูลอ้างอิงของคลาส TaskStackBuilder

categories

จัดกลุ่มประเภทการดำเนินการที่ทางลัดของแอป ดำเนินการ เช่น การสร้างข้อความแชทใหม่

ดูรายการหมวดหมู่ทางลัดที่รองรับได้ในShortcutInfo การอ้างอิงคลาส

capability-binding

ประกาศความสามารถที่ลิงก์กับทางลัด

ในตัวอย่างก่อนหน้า ทางลัดจะลิงก์กับความสามารถที่ประกาศไว้สำหรับ CREATE_MESSAGE ซึ่งเป็น Intent ในตัวของ การดำเนินการของแอป การเชื่อมโยงความสามารถนี้ช่วยให้ผู้ใช้ใช้คำสั่งเสียงกับ Google Assistant เพื่อเรียกใช้ทางลัดได้

สร้างทางลัดแบบไดนามิก

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

ไลบรารี ShortcutManagerCompat Jetpack เป็นตัวช่วยสำหรับ API ของ ShortcutManager ซึ่งช่วยให้คุณจัดการทางลัดแบบไดนามิกในแอปได้ การใช้ไลบรารี ShortcutManagerCompat จะช่วยลดโค้ด Boilerplate และช่วยให้มั่นใจว่าทางลัดจะทำงานได้อย่างสอดคล้องกันใน Android เวอร์ชันต่างๆ นอกจากนี้ คุณยังต้องมีไลบรารีนี้เพื่อพุชทางลัดแบบไดนามิกเพื่อให้มีสิทธิ์ ปรากฏบนแพลตฟอร์มของ Google เช่น Assistant โดยใช้ไลบรารีการผสานรวมทางลัดของ Google

ShortcutManagerCompat API ช่วยให้แอปของคุณดำเนินการต่อไปนี้ ด้วยทางลัดแบบไดนามิกได้

  • พุชและอัปเดต: ใช้ pushDynamicShortcut() เพื่อเผยแพร่และอัปเดต แป้นพิมพ์ลัดแบบไดนามิก หากมีทางลัดแบบไดนามิกหรือทางลัดที่ปักหมุดไว้แล้ว ที่มีรหัสเดียวกัน ทางลัดที่แก้ไขได้แต่ละรายการจะอัปเดต
  • นำออก: นำชุดแป้นพิมพ์ลัดแบบไดนามิกออกโดยใช้ removeDynamicShortcuts() นำทางลัดแบบไดนามิกทั้งหมดออกโดยใช้ removeAllDynamicShortcuts()

ดูข้อมูลเพิ่มเติมเกี่ยวกับการดำเนินการกับทางลัดได้ที่จัดการ ทางลัดและข้อมูลอ้างอิงของ ShortcutManagerCompat

ต่อไปนี้เป็นตัวอย่างการสร้างทางลัดแบบไดนามิกและการเชื่อมโยงกับแอป

val shortcut = ShortcutInfoCompat.Builder(context, "id1")
    .setShortLabel("Website")
    .setLongLabel("Open the website")
    .setIcon(IconCompat.createWithResource(context, R.drawable.icon_website))
    .setIntent(
        Intent(
            Intent.ACTION_VIEW,
            Uri.parse("https://www.mysite.example.com/")
        )
    )
    .build()

ShortcutManagerCompat.pushDynamicShortcut(context, shortcut)

เพิ่มไลบรารีการผสานรวมทางลัดของ Google

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

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

ตัวอย่างเช่น Assistant สามารถเรียนรู้จากทางลัดที่ส่งมาจากแอปติดตามการออกกำลังกายว่าโดยปกติแล้วผู้ใช้จะวิ่งทุกเช้า และแนะนำทางลัด "เริ่มวิ่ง" อย่างรวดเร็วเมื่อผู้ใช้หยิบโทรศัพท์ขึ้นมาในตอนเช้า

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

หากต้องการใช้ไลบรารีนี้ในแอป ให้เพิ่มทรัพยากร Dependency สำหรับไลบรารีการผสานรวม Google Shortcuts และ ShortcutManagerCompat ลงในไฟล์ app/build.gradle หรือ app/build.gradle.kts

Kotlin

dependencies {
    implementation("androidx.core:core:1.6.0")
    implementation("androidx.core:core-google-shortcuts:1.0.0")
}

ดึงดูด

dependencies {
    implementation "androidx.core:core:1.6.0"
    implementation 'androidx.core:core-google-shortcuts:1.0.0'
}

เมื่อเพิ่มทรัพยากร Dependency ของไลบรารีลงในโปรเจ็กต์ Android แล้ว แอปจะใช้เมธอด pushDynamicShortcut() จาก ShortcutManagerCompat เพื่อพุชทางลัดแบบไดนามิกที่มีสิทธิ์แสดงใน Launcher และแพลตฟอร์มต่างๆ ของ Google ที่เข้าร่วมได้

สร้างทางลัดที่ปักหมุดไว้

ใน Android 8.0 (ระดับ API 26) ขึ้นไป คุณจะสร้างทางลัดที่ปักหมุดได้ ทางลัดที่ปักหมุดจะปรากฏในตัวเรียกใช้ที่รองรับเป็นไอคอนแยกต่างหาก ซึ่งต่างจากทางลัดแบบคงที่และแบบไดนามิก รูปที่ 1 แสดงความแตกต่างระหว่างทางลัด 2 ประเภทนี้

หากต้องการปักหมุดทางลัดไปยัง Launcher ที่รองรับโดยใช้แอป ให้ทำตามขั้นตอนต่อไปนี้

  1. ใช้ isRequestPinShortcutSupported() เพื่อยืนยันว่า Launcher เริ่มต้นของอุปกรณ์รองรับการปักหมุดทางลัดในแอป
  2. สร้างออบเจ็กต์ ShortcutInfoCompat ที่มีรหัส Intent และป้ายกำกับสั้นๆ สำหรับทางลัด หากมีทางลัดอยู่แล้ว ให้ใช้รหัสของ ทางลัดที่มีอยู่ ระบบจะค้นหาและปักหมุดข้อมูลอื่นๆ ทั้งหมด ที่เกี่ยวข้องกับทางลัดโดยอัตโนมัติ

  3. ปักหมุดทางลัดไปยังตัวเรียกใช้ของอุปกรณ์โดยเรียกใช้ requestPinShortcut() ในกระบวนการนี้ คุณสามารถส่งออบเจ็กต์ PendingIntent ซึ่งจะแจ้งเตือนแอปของคุณเมื่อปักหมุดทางลัดสำเร็จเท่านั้น

    หลังจากปักหมุดทางลัดแล้ว แอปจะอัปเดตเนื้อหาได้โดยใช้เมธอด updateShortcuts() ดูข้อมูลเพิ่มเติมได้ที่อัปเดต ทางลัด

ข้อมูลโค้ดต่อไปนี้แสดงวิธีสร้างทางลัดที่ปักหมุด

if (ShortcutManagerCompat.isRequestPinShortcutSupported(context)) {
    // Enable the existing shortcut with the ID "my-shortcut".
    val pinShortcutInfo = ShortcutInfoCompat.Builder(context, "my-shortcut")
        .setShortLabel("Website")
        .setIntent(
            Intent(
                Intent.ACTION_VIEW,
                Uri.parse("https://www.mysite.example.com/")
            )
        )
        .build()

    // Create the PendingIntent object only if your app needs to be notified
    // that the user let the shortcut be pinned. If the pinning operation fails,
    // your app isn't notified. Assume here that the app implements a method
    // called createShortcutResultIntent() that returns a broadcast intent.
    val pinnedShortcutCallbackIntent =
        ShortcutManagerCompat.createShortcutResultIntent(context, pinShortcutInfo)

    // Configure the intent so that your app's broadcast receiver gets the
    // callback successfully. For details, see PendingIntent.getBroadcast().
    val successCallback = PendingIntent.getBroadcast(
        context, /* request code */ 0,
        pinnedShortcutCallbackIntent, /* flags */ PendingIntent.FLAG_IMMUTABLE
    )

    ShortcutManagerCompat.requestPinShortcut(
        context,
        pinShortcutInfo,
        successCallback.intentSender
    )
}

สร้างกิจกรรมทางลัดที่กำหนดเอง

กิจกรรมกล่องโต้ตอบที่กำหนดเองซึ่งแสดงข้อความแจ้ง &quot;คุณต้องการเพิ่มไอคอน Launcher ของ Gmail ลงในหน้าจอหลักไหม&quot; ตัวเลือกที่กำหนดเองคือ &quot;ไม่เป็นไร&quot; และ &quot;เพิ่มไอคอน&quot;
รูปที่ 2 ตัวอย่างกิจกรรมกล่องโต้ตอบทางลัดแอปที่กำหนดเอง

นอกจากนี้ คุณยังสร้างกิจกรรมเฉพาะทางที่ช่วยให้ผู้ใช้สร้างทางลัดได้ พร้อมตัวเลือกที่กำหนดเองและปุ่มยืนยัน รูปที่ 2 แสดง ตัวอย่างกิจกรรมประเภทนี้ในแอป Gmail

ในไฟล์ Manifest ของแอป ให้เพิ่ม ACTION_CREATE_SHORTCUT ลงในองค์ประกอบ <intent-filter> ของกิจกรรม การประกาศนี้จะตั้งค่าลักษณะการทำงานต่อไปนี้ เมื่อผู้ใช้พยายามสร้างทางลัด

  1. ระบบจะเริ่มกิจกรรมเฉพาะของแอป
  2. ผู้ใช้ตั้งค่าตัวเลือกสำหรับทางลัด
  3. ผู้ใช้เลือกปุ่มยืนยัน
  4. แอปของคุณสร้างทางลัดโดยใช้เมธอด createShortcutResultIntent() วิธีนี้จะส่งคืน Intent ซึ่งแอปของคุณจะส่งต่อกลับไปยัง กิจกรรมที่ดำเนินการก่อนหน้านี้โดยใช้ setResult()
  5. แอปของคุณเรียกใช้ finish() ในกิจกรรมที่ใช้สร้าง ทางลัดที่กำหนดเอง

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

ทดสอบแป้นพิมพ์ลัด

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

  • แตะไอคอน Launcher ของแอปค้างไว้เพื่อดูทางลัดที่คุณกำหนด สำหรับแอป
  • ลากทางลัดเพื่อปักหมุดไว้ใน Launcher ของอุปกรณ์