ทำความเข้าใจการกำหนดเส้นทางอินพุตทางกายภาพสำหรับแว่นตาที่มีระบบเสียง

อุปกรณ์ XR ที่รองรับ
คำแนะนำนี้จะช่วยคุณสร้างประสบการณ์การใช้งานสำหรับอุปกรณ์ XR ประเภทนี้
แว่นตาที่มีระบบเสียง

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

วิธีที่ระบบพิจารณาการรับรู้ของผู้ใช้

ระบบจะพิจารณาการรับรู้ของผู้ใช้โดยตรวจสอบว่าสตรีมข้อมูลใดต่อไปนี้ทำงานอยู่

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

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

การทำงานพร้อมกันและการโฟกัสอินพุต

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

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

วิธีนี้จะช่วยให้ผู้ใช้ได้รับประสบการณ์การใช้งานที่สอดคล้องกัน

ให้ระบบเปิดกิจกรรมที่คาดการณ์ไว้อีกครั้ง

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

วิธีตรวจสอบว่าระบบสามารถเปิดกิจกรรมอีกครั้งได้มีดังนี้

  1. สร้าง Intent รอดำเนินการ: สร้าง Intent ที่ชัดเจนซึ่งชี้ไปยังกิจกรรมที่คาดการณ์เป้าหมาย รวม Intent ไว้ใน PendingIntent และตั้งค่า FLAG_UPDATE_CURRENT หรือ FLAG_IMMUTABLE เพื่อรักษาลักษณะการเปิดใช้งานที่ปลอดภัยและคาดการณ์ได้ ดังนี้

    // Build an explicit Intent pointing to this projected activity and wrap it in a
    // PendingIntent so the system can relaunch it and route physical input to it.
    private val pendingIntent: PendingIntent by lazy {
        val intent = Intent(this, ProjectedInputFocusActivity::class.java)
    
        PendingIntent.getActivity(
            this,
            0,
            intent,
            PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE
        )
    }

  2. ลงทะเบียนตัวรับอินพุต: รับอินสแตนซ์ของ ProjectedActivityCompat และลงทะเบียน PendingIntent เป็นตัวรับอินพุตที่กำหนดโดยส่งไปยัง setActivityAsInputReceiver

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
    
        lifecycleScope.launch {
            // Create or obtain the ProjectedActivityCompat instance
            val projectedActivity = ProjectedActivityCompat.create(this@ProjectedInputFocusActivity)
    
            // Register the PendingIntent as the designated input receiver
            projectedActivity.setActivityAsInputReceiver(pendingIntent)
        }

  3. ล้างตัวรับอินพุตเมื่อล้างข้อมูล: เมื่อกิจกรรมถูกทำลายหรือไม่จำเป็นต้องรับอินพุตทางกายภาพอีกต่อไป ให้ล้างตัวรับอินพุตเพื่อป้องกันการส่ง PendingIntent ที่ล้าสมัยและหลีกเลี่ยงหน่วยความจำรั่วไหล

    override fun onDestroy() {
        super.onDestroy()
        lifecycleScope.launch {
            val projectedActivity = ProjectedActivityCompat.create(this@ProjectedInputFocusActivity)
            projectedActivity.clearActivityAsInputReceiver()
        }
    }

ทำความเข้าใจวิธีที่โฟกัสอินพุตเปลี่ยนไปตามสถานะการทำงานพร้อมกัน

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

สถานะการทำงานพร้อมกัน บริบทด้านสิ่งแวดล้อม ลักษณะการทำงานของระบบและโฟกัสการป้อนข้อมูล ตัวอย่าง

Non-concurrent

กิจกรรมที่ฉายแบบสแตนด์อโลนทำงานอยู่ โดยไม่มีเซสชันสื่อที่ทำงานอยู่เบื้องหลัง

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

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

กึ่งพร้อมกัน

กิจกรรมที่ฉายอยู่ทำงานอยู่ แต่เซสชันสื่อในเบื้องหลังอยู่ในสถานะหยุดชั่วคราว

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

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

Concurrent

การเล่นแบบคู่ทำงานอยู่ (เช่น เสียงประกาศของแอปขัดจังหวะหรือลดระดับเสียงเพลงที่เล่นอยู่เบื้องหลัง)

โฟกัสเสียงเท่ากับโฟกัสอินพุต

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

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

การป้องกันเวลาของระบบ

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

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

การเปลี่ยนโฟกัสอินพุตในทางปฏิบัติ

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

สถานการณ์ ก: ไม่พร้อมกัน (สื่อที่ไม่ได้ใช้งาน)

สำหรับสถานการณ์นี้ ระบบจะกำหนดเส้นทางอินพุตไปยังแอปการนำทาง ซึ่งจะรับรู้ถึงผู้ใช้ตลอดการเดินทาง

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

สถานการณ์ ข: การใช้งานแบบกึ่งพร้อมกัน (สื่อที่หยุดชั่วคราว)

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

รูปที่ 2 วิธีที่ระบบจะกำหนดเส้นทางโฟกัสอินพุตสำหรับแอปการนำทางในสถานการณ์ที่ทำงานพร้อมกันแบบกึ่งหนึ่งนี้
  1. ผู้ใช้เปิดการนำทางขณะที่เพลงที่เล่นอยู่เบื้องหลังหยุดชั่วคราว
  2. ในช่วงที่ไม่มีเสียงระหว่างการอ่านออกเสียง โฟกัสอินพุตจะเปลี่ยนไปที่ตัวควบคุมสื่อโดยค่าเริ่มต้น
  3. เมื่อแอปการนำทางพูดว่า "อีก 500 ฟุต เลี้ยวซ้าย" แอปจะได้รับโฟกัสอินพุต
  4. การดำเนินการของผู้ใช้: การแตะระหว่างการอ่านออกเสียงอาจปิดเสียงคำแนะนำ การแตะระหว่างที่ไม่มีเสียงจะทำให้เพลงกลับมาเล่นต่อ

สถานการณ์ ค: พร้อมกัน (สื่อที่ใช้งานอยู่)

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

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