แอปที่เปิดตลอดเวลาและโหมดแอมเบียนท์ของระบบ

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

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

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

กำหนดค่าโปรเจ็กต์

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

  1. สร้างหรืออัปเดตโปรเจ็กต์ตามการกำหนดค่าใน สร้าง และเรียกใช้หน้าแอปสำหรับอุปกรณ์สวมใส่
  2. เพิ่มสิทธิ์ WAKE_LOCK ลงในไฟล์ Android Manifest ดังนี้
<uses-permission android:name="android.permission.WAKE_LOCK" />

เปิดใช้โหมดเปิดตลอดเวลา

หากต้องการใช้ AmbientLifecycleObserverแล้วทำดังนี้

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

    Kotlin

    val ambientCallback = object : AmbientLifecycleObserver.AmbientLifecycleCallback {
        override fun onEnterAmbient(ambientDetails: AmbientLifecycleObserver.AmbientDetails) {
        // ... Called when moving from interactive mode into ambient mode.
        }
    
        override fun onExitAmbient() {
        // ... Called when leaving ambient mode, back into interactive mode.
        }
    
        override fun onUpdateAmbient() {
        // ... Called by the system in order to allow the app to periodically
        // update the display while in ambient mode. Typically the system will
        // call this every 60 seconds.
        }
    }
  2. สร้าง AmbientLifecycleObserver และลงทะเบียนผู้สังเกตการณ์ โดยทั่วไปแล้ว จะใช้ใน onCreate() หรือ Composable ระดับบนสุดหากใช้ Compose สำหรับ Wear OS เพื่อ ทำให้เปิดใช้ลักษณะการทำงานตลอดเวลาได้ตลอดวงจรของกิจกรรม

    Kotlin

    private val ambientObserver = AmbientLifecycleObserver(activity, callback)
    
    override fun onCreate(savedInstanceState: Bundle) {
      super.onCreate(savedInstanceState)
      lifecycle.addObserver(observer)
    
      // ...
    }
    
  3. นำผู้สังเกตการณ์ออก โดยโทรหา removeObserver() เมื่อเปิดฟีเจอร์เปิดตลอดเวลา ไม่จำเป็นต้องมีลักษณะการทำงานอีกต่อไป ตัวอย่างเช่น คุณอาจเรียกใช้เมธอดนี้ใน เมธอด onDestroy() ของ กิจกรรม

แอปที่เปิดตลอดเวลาอาจย้ายไปที่พื้นหลังได้

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

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

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

// Create a pending intent that point to your always-on activity
val touchIntent =
    PendingIntent.getActivity(
        context,
        0,
        Intent(context, MyAlwaysOnActivity::class.java),
        PendingIntent.FLAG_MUTABLE or PendingIntent.FLAG_UPDATE_CURRENT
    )

val notificationBuilder =
    NotificationCompat.Builder(this, CHANNEL_ID)
    // ...
    .setOngoing(true)

val ongoingActivity =
    OngoingActivity.Builder(
        applicationContext, NOTIFICATION_ID, notificationBuilder
    )
    // ...
    .setTouchIntent(touchIntent)
    .build()

ongoingActivity.apply(applicationContext)

notificationManager.notify(
    NOTIFICATION_ID,
    notificationBuilder.build()
)

แก้ไขลักษณะที่ปรากฏในโหมดแอมเบียนท์

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

หากต้องการประหยัดพลังงาน ให้ทำดังต่อไปนี้

  • ลดความสว่างของพิกเซล และปล่อยให้หน้าจอส่วนใหญ่เป็นสีดำ พิจารณา แสดงเฉพาะข้อมูลสำคัญในโหมดแอมเบียนท์ และให้ เมื่อผู้ใช้เข้าสู่โหมดอินเทอร์แอกทีฟ
  • ปรับเนื้อหาเพื่อให้มีการอัปเดตบ่อยน้อยลง เช่น แสดงตัวจับเวลา เป็นนาทีที่ใกล้ที่สุด แทนที่จะเป็นวินาทีที่ใกล้ที่สุด
  • ในAmbientDetails มีการส่งออบเจ็กต์ไปยัง onEnterAmbient():
    • หากตั้งค่า deviceHasLowBitAmbient ไว้ ให้ปิดใช้การลบรอยหยัก หากทำได้
    • หากตั้งค่า burnInProtectionRequired ไว้ ให้เปลี่ยนการแสดงภาพไปรอบๆ เป็นระยะ และหลีกเลี่ยงพื้นที่สีขาวทึบ

เมื่อใช้ Compose สำหรับ Wear OS เราขอแนะนําให้ใช้วิธีการเรียกกลับเหล่านี้ เพื่ออัปเดต state ซึ่งช่วยให้ระบบเขียนคำสั่ง UI อย่างเหมาะสม

สำหรับตัวอย่างของวิธีการนี้ โปรดดู ซึ่งเป็นเนื้อหาพื้นฐาน ตัวอย่างการออกกำลังกายใน GitHub ซึ่งใช้ประโยชน์จาก AmbientAware Composable จากไลบรารี Horologist