ใน Wear OS การจับคู่กิจกรรมต่อเนื่องกับการแจ้งเตือนต่อเนื่อง เพิ่มการแจ้งเตือนดังกล่าวไปยังแพลตฟอร์มอื่นๆ ภายในอินเทอร์เฟซผู้ใช้ Wear OS วิธีนี้ช่วยให้ผู้ใช้มีส่วนร่วมกับกิจกรรมที่ใช้เวลานานได้มากขึ้น
โดยทั่วไปการแจ้งเตือนต่อเนื่องจะใช้เพื่อระบุว่าการแจ้งเตือนมี งานในเบื้องหลังที่ผู้ใช้มีส่วนร่วมอยู่หรือรอดำเนินการอยู่ จึงกินพื้นที่อุปกรณ์
เช่น ผู้ใช้ Wear OS อาจใช้แอปออกกำลังกายเพื่อบันทึกการวิ่งจาก กิจกรรมแล้วออกจากแอปนั้นเพื่อเริ่มงานอื่นๆ เมื่อผู้ใช้ออกจากแอปออกกำลังกาย แอป เปลี่ยนเป็นการแจ้งเตือนต่อเนื่องซึ่งเกี่ยวข้องกับงานเบื้องหลังบางอย่างเพื่อให้ผู้ใช้รับรู้เกี่ยวกับการวิ่งแต่ละครั้ง การแจ้งเตือนจะแสดงข้อมูลอัปเดตเกี่ยวกับผู้ใช้และวิธีง่ายๆ ในการกลับไปยัง แอป
แต่หากต้องการดูการแจ้งเตือน ผู้ใช้ต้องปัดไปที่ ถาดการแจ้งเตือนใต้หน้าปัดและค้นหาการแจ้งเตือนที่ถูกต้อง ช่วงเวลานี้ อาจไม่สะดวกเท่าแพลตฟอร์มอื่นๆ
เมื่อใช้ API กิจกรรมต่อเนื่อง การแจ้งเตือนที่ดำเนินอยู่ของแอปจะแสดง ไปยังหลายแพลตฟอร์มใหม่ที่ใช้งานสะดวกใน Wear OS เพื่อให้ผู้ใช้ มีส่วนร่วม
ตัวอย่างเช่น ในแอปออกกำลังกายนี้ ข้อมูลอาจปรากฏในนาฬิกาของผู้ใช้ เป็นไอคอนการวิ่งที่แตะได้:
รูปที่ 1 สัญญาณบอกสถานะกิจกรรม
ส่วนล่าสุดของตัวเปิดแอปส่วนกลางจะแสดงรายการที่ดำเนินการอยู่ กิจกรรม:
รูปที่ 2 Launcher ส่วนกลาง
ต่อไปนี้เป็นสถานการณ์ที่ดีในการใช้การแจ้งเตือนอย่างต่อเนื่องที่เชื่อมโยงกับ กิจกรรมต่อเนื่อง:
รูปที่ 3 ตัวจับเวลา: นับเวลาถอยหลังตลอดเวลาและจะสิ้นสุดเมื่อตัวจับเวลาอยู่ หยุดชั่วคราวหรือหยุด
รูปที่ 4 การนำทางแบบเลี้ยวต่อเลี้ยว: ประกาศเส้นทางไปยังปลายทาง สิ้นสุดเมื่อผู้ใช้ไปถึงจุดหมายหรือหยุดการนำทาง
รูปที่ 5 สื่อ: เล่นเพลงตลอดเซสชัน สิ้นสุดทันทีหลังจาก ผู้ใช้หยุดเซสชันนั้นชั่วคราว
Wear สร้างกิจกรรมต่อเนื่องสำหรับแอปสื่อโดยอัตโนมัติ
โปรดดู Codelab กิจกรรมต่อเนื่องสำหรับ ตัวอย่างเชิงลึกของการสร้างกิจกรรมต่อเนื่องสำหรับแอปประเภทอื่นๆ
ตั้งค่า
หากต้องการเริ่มใช้ On Continue Activity API ในแอป ให้เพิ่มรายการต่อไปนี้
การอ้างอิงไปยังไฟล์ build.gradle
ของแอป:
dependencies {
implementation "androidx.wear:wear-ongoing:1.0.0"
// Includes LocusIdCompat and new Notification categories for Ongoing Activity.
implementation "androidx.core:core:1.6.0"
}
เริ่มกิจกรรมต่อเนื่อง
เริ่มต้นใช้งานโดยการสร้างการแจ้งเตือนต่อเนื่องและสร้างกิจกรรมต่อเนื่อง
สร้างการแจ้งเตือนต่อเนื่อง
กิจกรรมต่อเนื่องมีความเกี่ยวข้องอย่างใกล้ชิดกับการแจ้งเตือนต่อเนื่อง ทั้ง 2 อย่างทำงานร่วมกันเพื่อแจ้งให้ผู้ใช้ทราบเกี่ยวกับงานที่ผู้ใช้กำลังมีส่วนร่วมอยู่ หรืองานที่กำลังรอดำเนินการบางอย่างซึ่งกินพื้นที่อุปกรณ์
คุณต้องจับคู่กิจกรรมที่กำลังดำเนินอยู่กับการแจ้งเตือนต่อเนื่อง การลิงก์กิจกรรมต่อเนื่องกับการแจ้งเตือนมีประโยชน์หลายประการ ซึ่งรวมถึงรายการต่อไปนี้
- การแจ้งเตือนเป็นตัวเลือกสำรองในอุปกรณ์ที่ไม่รองรับการใช้งานอย่างต่อเนื่อง กิจกรรม การแจ้งเตือนจะเป็นเพียงแพลตฟอร์มเดียวที่แอปของคุณแสดง ขณะทำงานอยู่เบื้องหลัง
- ใน Android 11 ขึ้นไป Wear OS จะซ่อนการแจ้งเตือนในการแจ้งเตือน ถาดข้อมูลเมื่อแอปแสดงเป็นกิจกรรมต่อเนื่องในแพลตฟอร์มเพิ่มเติม
- การใช้งานในปัจจุบันใช้
Notification
เป็น กลไกการสื่อสาร
สร้างการแจ้งเตือนต่อเนื่องโดยใช้ Notification.Builder.setOngoing
เริ่มกิจกรรมต่อเนื่อง
เมื่อคุณมีการแจ้งเตือนต่อเนื่อง ให้สร้างกิจกรรมต่อเนื่องดังที่แสดง ในตัวอย่างต่อไปนี้ ตรวจสอบความคิดเห็นที่รวมไว้เพื่อทำความเข้าใจลักษณะการทำงานของพร็อพเพอร์ตี้แต่ละรายการ
Kotlin
var notificationBuilder = NotificationCompat.Builder(this, CHANNEL_ID) … .setSmallIcon(..) .setOngoing(true) val ongoingActivityStatus = Status.Builder() // Sets the text used across various surfaces. .addTemplate(mainText) .build() val ongoingActivity = OngoingActivity.Builder( applicationContext, NOTIFICATION_ID, notificationBuilder ) // Sets the animated icon that will appear on the watch face in // active mode. // If it isn't set, the watch face will use the static icon in // active mode. .setAnimatedIcon(R.drawable.ic_walk) // Sets the icon that will appear on the watch face in ambient mode. // Falls back to Notification's smallIcon if not set. // If neither is set, an Exception is thrown. .setStaticIcon(R.drawable.ic_walk) // Sets the tap/touch event so users can re-enter your app from the // other surfaces. // Falls back to Notification's contentIntent if not set. // If neither is set, an Exception is thrown. .setTouchIntent(activityPendingIntent) // Here, sets the text used for the Ongoing Activity (more // options are available for timers and stopwatches). .setStatus(ongoingActivityStatus) .build() ongoingActivity.apply(applicationContext) notificationManager.notify(NOTIFICATION_ID, builder.build())
Java
NotificationCompat.Builder notificationBuilder = NotificationCompat.Builder(this, CHANNEL_ID) … .setSmallIcon(..) .setOngoing(true); OngoingActivityStatus ongoingActivityStatus = OngoingActivityStatus.Builder() // Sets the text used across various surfaces. .addTemplate(mainText) .build(); OngoingActivity ongoingActivity = OngoingActivity.Builder( applicationContext, NOTIFICATION_ID, notificationBuilder ) // Sets the animated icon that will appear on the watch face in // active mode. // If it isn't set, the watch face will use the static icon in // active mode. .setAnimatedIcon(R.drawable.ic_walk) // Sets the icon that will appear on the watch face in ambient mode. // Falls back to Notification's smallIcon if not set. // If neither is set, an Exception is thrown. .setStaticIcon(R.drawable.ic_walk) // Sets the tap/touch event so users can re-enter your app from the // other surfaces. // Falls back to Notification's contentIntent if not set. // If neither is set, an Exception is thrown. .setTouchIntent(activityPendingIntent) // Here, sets the text used for the Ongoing Activity (more // options are available for timers and stopwatches). .setStatus(ongoingActivityStatus) .build(); ongoingActivity.apply(applicationContext); notificationManager.notify(NOTIFICATION_ID, builder.build());
ขั้นตอนต่อไปนี้กล่าวถึงส่วนที่สำคัญที่สุดของตัวอย่างก่อนหน้านี้
โทรหา
.setOngoing(true)
ในNotificationCompat.Builder
และตั้งค่าตัวเลือกใดก็ได้ ด้วยสร้าง
OngoingActivityStatus
หรือตัวเลือกสถานะอื่น ดังที่อธิบายไว้ในส่วนต่อไปนี้ เพื่อแสดงถึงข้อความสร้าง
OngoingActivity
และตั้งค่ารหัสการแจ้งเตือนโทรติดต่อ
apply()
ทางOngoingActivity
พร้อมระบุบริบทโทรหา
notificationManager.notify()
และผ่านการแจ้งเตือนเดียวกัน รหัสที่กำหนดไว้ในกิจกรรมต่อเนื่องเพื่อเชื่อมโยงเข้าด้วยกัน
สถานะ
คุณใช้Status
เพื่อแสดงสถานะปัจจุบันของ
OngoingActivity
ของผู้ใช้ในแพลตฟอร์มใหม่ๆ เช่น ล่าสุด
ของ Launcher หากต้องการใช้ฟีเจอร์นี้ ให้ใช้
คลาสย่อย Status.Builder
ในกรณีส่วนใหญ่ คุณเพียงต้อง เพิ่มเทมเพลต ซึ่งเป็นข้อความที่คุณต้องการให้ปรากฏในส่วนล่าสุดของเครื่องเรียกใช้งานแอป
จากนั้นปรับแต่งการแสดงข้อความได้ด้วย
spans โดยใช้เมธอด addTemplate()
และ
การระบุส่วนแบบไดนามิกของข้อความเป็น
Status.Part
ตัวอย่างต่อไปนี้แสดงวิธีทำคำว่า "เวลา" ปรากฏเป็นสีแดง
ตัวอย่างเช่น
Status.StopwatchPart
เพื่อแสดงนาฬิกาจับเวลาในส่วนล่าสุดของตัวเปิดแอป
Kotlin
val htmlStatus = "<p>The <font color=\"red\">time</font> on your current #type# is #time#.</p>" val statusTemplate = Html.fromHtml( htmlStatus, Html.FROM_HTML_MODE_COMPACT ) // Creates a 5 minute timer. // Note the use of SystemClock.elapsedRealtime(), not System.currentTimeMillis(). val runStartTime = SystemClock.elapsedRealtime() + TimeUnit.MINUTES.toMillis(5) val status = new Status.Builder() .addTemplate(statusTemplate) .addPart("type", Status.TextPart("run")) .addPart("time", Status.StopwatchPart(runStartTime) .build()
Java
String htmlStatus = "<p>The <font color=\"red\">time</font> on your current #type# is #time#.</p>"; Spanned statusTemplate = Html.fromHtml( htmlStatus, Html.FROM_HTML_MODE_COMPACT ); // Creates a 5 minute timer. // Note the use of SystemClock.elapsedRealtime(), not System.currentTimeMillis(). Long runStartTime = SystemClock.elapsedRealtime() + TimeUnit.MINUTES.toMillis(5); Status status = new Status.Builder() .addTemplate(statusTemplate) .addPart("type", new Status.TextPart("run")) .addPart("time", new Status.StopwatchPart(runStartTime) .build();
หากต้องการอ้างอิงบางส่วนจากเทมเพลต ให้ใช้ชื่อที่อยู่ใน #
หากต้องการสร้าง #
ในเอาต์พุต ให้ใช้ ##
ในเทมเพลต
ตัวอย่างก่อนหน้านี้ใช้
HTMLCompat
เพื่อสร้าง CharSequence
เพื่อส่งไปยังเทมเพลต ซึ่งง่ายกว่า
กำหนดออบเจ็กต์ Spannable
ด้วยตนเอง
การปรับแต่งเพิ่มเติม
หลังจากพ้น Status
คุณจะปรับแต่งกิจกรรมที่ทำอยู่ หรือ
การแจ้งเตือนในลักษณะต่อไปนี้ อย่างไรก็ตาม การกำหนดค่าเหล่านี้อาจไม่ได้
ตามการใช้งานของ OEM
การแจ้งเตือนต่อเนื่อง
- ชุดหมวดหมู่จะกำหนดลำดับความสำคัญของกิจกรรมต่อเนื่อง
CATEGORY_CALL
: การโทรด้วยเสียงหรือวิดีโอคอลที่เข้ามา หรือคำขอการสื่อสารแบบซิงโครนัสที่คล้ายกันCATEGORY_NAVIGATION
: แผนที่หรือการนำทางแบบเลี้ยวต่อเลี้ยวCATEGORY_TRANSPORT
: การควบคุมการส่งสื่อสำหรับการเล่นCATEGORY_ALARM
: การปลุกหรือตัวจับเวลาCATEGORY_WORKOUT
: การออกกำลังกาย (หมวดหมู่ใหม่)CATEGORY_LOCATION_SHARING
: การแชร์ตำแหน่งชั่วคราว (หมวดหมู่ใหม่)CATEGORY_STOPWATCH
: นาฬิกาจับเวลา (หมวดหมู่ใหม่)
กิจกรรมต่อเนื่อง
ไอคอนเคลื่อนไหว: เวกเตอร์สีขาวดำ ควรมีรูปแบบโปร่งใส พื้นหลัง แสดงบนหน้าปัดในโหมดทำงาน หากไอคอนแบบเคลื่อนไหว ที่ระบุไว้ ระบบจะใช้ไอคอนการแจ้งเตือนเริ่มต้น (ไอคอนการแจ้งเตือนเริ่มต้นคือ แตกต่างกันในแต่ละแอปพลิเคชัน)
ไอคอนแบบคงที่: ไอคอนเวกเตอร์ที่มีพื้นหลังโปร่งใส แสดงใน หน้าปัดในโหมดแอมเบียนท์ หากไม่ได้ตั้งค่าไอคอนภาพเคลื่อนไหวไว้ ไอคอนแบบคงที่ ใช้บนหน้าปัดในโหมดทำงาน หากไม่มีการกำหนดไว้ ใช้ไอคอนการแจ้งเตือน หากไม่ได้ตั้งค่าไว้ ข้อยกเว้นคือ โยนได้ (ตัวเปิดแอปจะยังคงใช้ไอคอนแอป)
OnwardsActivityStatus: ข้อความธรรมดาหรือ
Chronometer
แสดงใน ส่วนล่าสุดในตัวเปิดแอป หากไม่ระบุ การแจ้งเตือน และมีการใช้ "ข้อความบริบท"Touch Intent:
PendingIntent
จะใช้เพื่อสลับกลับไปยังแอปหาก ผู้ใช้แตะไอคอนกิจกรรมต่อเนื่อง แสดงบนหน้าปัดหรือบน รายการ Launcher ซึ่งอาจต่างจากความตั้งใจเดิมที่ใช้เพื่อ เปิดแอป หากไม่ระบุ เนื้อหาการแจ้งเตือนจะเป็น หากไม่ได้กำหนดค่าไว้ จะไม่มีการส่งข้อยกเว้นLocusId
: รหัสที่กำหนดฟิลด์ ทางลัด Launcher ที่สอดคล้องกับกิจกรรมต่อเนื่อง แสดงใน Launcher ในส่วนล่าสุดขณะที่กิจกรรมดำเนินอยู่ หากไม่ ที่มีให้ Launcher จะซ่อนรายการแอปทั้งหมดในส่วนล่าสุดจาก แพ็กเกจเดียวกันและแสดงเฉพาะกิจกรรมที่ดำเนินอยู่เท่านั้นรหัสกิจกรรมต่อเนื่อง: รหัสที่ใช้ชี้แจงการโทรไปยัง
fromExistingOngoingActivity()
เมื่อแอปพลิเคชันมีการดำเนินการอยู่มากกว่า 1 รายการ กิจกรรม
อัปเดตกิจกรรมต่อเนื่อง
ในกรณีส่วนใหญ่ นักพัฒนาซอฟต์แวร์จะสร้างการแจ้งเตือนต่อเนื่องใหม่
กิจกรรมต่อเนื่องเมื่อต้องการอัปเดตข้อมูลบนหน้าจอ อย่างไรก็ตาม
API กิจกรรมต่อเนื่องยังนำเสนอวิธีการที่เป็นตัวช่วยในการอัปเดต
OngoingActivity
หากต้องการเก็บอินสแตนซ์ไว้แทนการสร้างใหม่
หากแอปพลิเคชันกำลังทำงานในพื้นหลัง จะสามารถส่งการอัปเดตไปยัง API กิจกรรม แต่อย่าทำเช่นนี้บ่อยเกินไปเนื่องจากวิธีการอัปเดต เพิกเฉยต่อสายที่อยู่ใกล้กันเกินไป การอัปเดตจำนวน 2-3 ครั้งต่อนาทีคือ สมเหตุสมผล
หากต้องการอัปเดตกิจกรรมต่อเนื่องและการแจ้งเตือนที่โพสต์แล้ว ให้ใช้ออบเจ็กต์ที่คุณ
ที่สร้างขึ้นก่อนและเรียกใช้ update()
ดังที่ปรากฏในตัวอย่างต่อไปนี้
Kotlin
ongoingActivity.update(context, newStatus)
Java
ongoingActivity.update(context, newStatus);
เพื่อเป็นการอำนวยความสะดวก เรามีวิธีการแบบคงที่ในการสร้างกิจกรรมต่อเนื่อง
Kotlin
OngoingActivity.recoverOngoingActivity(context) .update(context, newStatus)
Java
OngoingActivity.recoverOngoingActivity(context) .update(context, newStatus);
หยุดกิจกรรมต่อเนื่อง
เมื่อแอปทำงานเป็นกิจกรรมต่อเนื่องเสร็จแล้ว ก็เพียงแค่ยกเลิก การแจ้งเตือนต่อเนื่อง
คุณยังเลือกยกเลิกการแจ้งเตือนหรือกิจกรรมต่อเนื่องได้ด้วย เมื่อพูดถึงเบื้องหน้า แล้วสร้างใหม่เมื่อกลับไปยัง พื้นหลัง แต่ไม่จำเป็น
หยุดกิจกรรมที่กำลังดำเนินอยู่ชั่วคราว
หากแอปมีการดำเนินการหยุดอย่างชัดแจ้ง ให้ดำเนินกิจกรรมต่อเนื่องต่อไปหลังจาก มีการยกเลิกการหยุดชั่วคราว สำหรับแอปที่ไม่มีการดำเนินการหยุดอย่างชัดแจ้ง สิ้นสุดกิจกรรมเมื่อหยุดชั่วคราว
แนวทางปฏิบัติแนะนำ
โปรดคำนึงถึงสิ่งต่อไปนี้เมื่อทำงานกับ API กิจกรรมต่อเนื่อง
- โปรดโทรหา
ongoingActivity.apply(context)
ก่อนโทรnotificationManager.notify(...)
ตั้งค่าไอคอนแบบคงที่สำหรับกิจกรรมต่อเนื่อง อย่างชัดแจ้ง หรือเป็นรายการสำรองผ่าน การแจ้งเตือน หากไม่มี คุณจะได้รับ
IllegalArgumentException
ใช้ไอคอนเวกเตอร์สีขาวดำที่มีพื้นหลังโปร่งใส
ตั้งค่าความตั้งใจแบบสัมผัสสำหรับกิจกรรมต่อเนื่อง อย่างชัดแจ้ง หรือเป็นวิธีสำรองโดยใช้ การแจ้งเตือน หากไม่มี คุณจะได้รับ
IllegalArgumentException
สำหรับ
NotificationCompat
ให้ใช้ไลบรารี Core AndroidXcore:1.5.0-alpha05+
ซึ่งมีLocusIdCompat
และใหม่ หมวดหมู่การออกกำลังกาย นาฬิกาจับเวลา และการแชร์ตำแหน่งหากแอปมีกิจกรรม
MAIN LAUNCHER
มากกว่า 1 รายการที่ประกาศใน ไฟล์ Manifest ให้เผยแพร่ แป้นพิมพ์ลัด และ ให้เชื่อมโยงกับกิจกรรมต่อเนื่องโดยใช้LocusId
เผยแพร่การแจ้งเตือนสื่อเมื่อเล่นสื่อในอุปกรณ์ Wear OS
หากเนื้อหาสื่อกำลังเล่นในอุปกรณ์ Wear OS เผยแพร่การแจ้งเตือนสื่อ ซึ่งจะช่วยให้ระบบสร้างกิจกรรมต่อเนื่องที่เกี่ยวข้องได้
หากคุณใช้ Media3 การแจ้งเตือนจะเผยแพร่โดยอัตโนมัติ หากคุณ
สร้างการแจ้งเตือนด้วยตนเอง การแจ้งเตือนนั้นควรใช้
MediaStyleNotificationHelper.MediaStyle
และ MediaSession
ที่เกี่ยวข้องควรมี
กิจกรรมเซสชัน
ป้อนข้อมูลแล้ว
แนะนำสำหรับคุณ
- หมายเหตุ: ข้อความลิงก์จะแสดงเมื่อ JavaScript ปิดอยู่
- สร้างการแจ้งเตือน {:#notification}
- ดึงดูดผู้ใช้ Wear OS ในรูปแบบใหม่ๆ ด้วย On Continue Activity API
- สร้างการแจ้งเตือนที่ขยายได้ {:#expandable-notification}