Trên kính phát âm thanh, hệ thống sẽ định tuyến hoạt động đầu vào thực tế (chẳng hạn như cử chỉ qua bàn di chuột hoặc thao tác nhấn nút) dựa trên nhận thức của người dùng thay vì tiêu điểm hiển thị hình ảnh. Vì người dùng không thể nhìn thấy giao diện người dùng, nên hệ thống sẽ định tuyến hoạt động đầu vào thực tế đến hoạt động được chiếu của bất kỳ trải nghiệm trong ứng dụng nào mà người dùng đang cảm nhận hoặc tương tác tích cực.
Cách hệ thống xác định mức độ nhận biết của người dùng
Hệ thống xác định mức độ nhận biết của người dùng bằng cách theo dõi xem luồng dữ liệu nào sau đây đang hoạt động:
- Luồng đầu ra âm thanh: Đọc bằng giọng nói, tín hiệu âm thanh hoặc phát nội dung nghe nhìn.
- Luồng ghi âm qua micrô: Các lệnh thoại hoặc bản ghi âm đang diễn ra từ môi trường xung quanh của người dùng.
- Luồng chụp ảnh/quay video bằng máy ảnh: Luồng video hoặc ảnh.
Một số luồng dữ liệu chỉ tồn tại tạm thời và chỉ thu hút sự chú ý của người dùng trong một thời gian ngắn. Ví dụ: âm thanh đọc hướng rẽ tiếp theo mà người dùng nên thực hiện khi di chuyển theo một tuyến đường. Các luồng dữ liệu khác là vô thời hạn và giữ cho người dùng nhận biết được trong suốt thời gian tiếp tục. Ví dụ: phát nội dung nghe nhìn bằng một danh sách phát ngẫu nhiên, vô tận. Khi một luồng dữ liệu tạm thời làm gián đoạn một luồng dữ liệu không xác định, luồng dữ liệu tạm thời sẽ tạm thời thu hút sự chú ý của người dùng.
Tính đồng thời và tiêu điểm đầu vào
Người dùng thường chạy nhiều trải nghiệm ứng dụng cùng lúc trên kính phát âm thanh. Ví dụ: người dùng có thể nghe nhạc trong khi đi theo đường đi từng chặng. Trong những trường hợp này, hệ thống sẽ chỉ định một trạng thái đồng thời và chuyển tiêu điểm đầu vào cho khớp với tiêu điểm âm thanh bằng cách làm như sau:
- Tiếp tục hoặc dừng hoạt động dự kiến của ứng dụng.
- Định tuyến dữ liệu đầu vào thực tế đến hoạt động được chiếu trên nền trước.
Phương pháp này giúp duy trì trải nghiệm nhất quán cho người dùng.
Cho phép hệ thống chạy lại hoạt động dự kiến của bạn
Khi ứng dụng của bạn thu hút được sự chú ý của người dùng, đặc biệt là nếu hoạt động dự kiến của ứng dụng diễn ra ở chế độ nền, thì hệ thống phải có thể tiếp tục hoạt động và định tuyến hoạt động đầu vào thực tế đến hoạt động đó.
Để đảm bảo hệ thống có thể chạy lại hoạt động của bạn, hãy làm như sau:
Tạo ý định đang chờ xử lý: Tạo một
Intentrõ ràng trỏ đến hoạt động dự kiến mục tiêu của bạn. Gói ý định trongPendingIntentvà đặtFLAG_UPDATE_CURRENThoặcFLAG_IMMUTABLEđể duy trì hành vi khởi chạy an toàn và có thể dự đoán:// 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 ) }
Đăng ký bộ nhận dữ liệu đầu vào: Lấy một thực thể của
ProjectedActivityCompatvà đăng kýPendingIntentlàm bộ nhận dữ liệu đầu vào được chỉ định bằng cách truyền thực thể đó vàosetActivityAsInputReceiver.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) }
Xoá trình nhận dữ liệu đầu vào khi dọn dẹp: Khi hoạt động của bạn bị huỷ hoặc không cần nhận dữ liệu đầu vào thực tế nữa, hãy xoá trình nhận dữ liệu đầu vào để ngăn chặn việc gửi
PendingIntentcũ và tránh rò rỉ bộ nhớ.override fun onDestroy() { super.onDestroy() lifecycleScope.launch { val projectedActivity = ProjectedActivityCompat.create(this@ProjectedInputFocusActivity) projectedActivity.clearActivityAsInputReceiver() } }
Tìm hiểu cách tiêu điểm đầu vào thay đổi giữa các trạng thái đồng thời
Để xác định ứng dụng nào nhận được tiêu điểm đầu vào, hệ thống sẽ đánh giá các luồng dữ liệu đang hoạt động và định tuyến dữ liệu đầu vào dựa trên các trạng thái đồng thời sau:
| Trạng thái đồng thời | Bối cảnh môi trường | Hành vi của hệ thống và tiêu điểm nhập liệu | Ví dụ |
|---|---|---|---|
Không đồng thời |
Một hoạt động được chiếu độc lập đang hoạt động; không có phiên phát nội dung nghe nhìn nào đang chạy ở chế độ nền. |
Tiêu điểm đầu vào được định tuyến hoàn toàn đến hoạt động được chiếu của bạn, ngay cả trong khoảng thời gian im lặng giữa các lần đọc. |
Người dùng chạy một ứng dụng theo dõi thể chất. Ngay cả trong những khoảnh khắc im lặng, dữ liệu đầu vào từ bàn di chuột vẫn được chuyển thẳng đến ứng dụng theo dõi thể chất. |
Bán đồng thời |
Một hoạt động được chiếu đang hoạt động, nhưng phiên phát nội dung nghe nhìn ở chế độ nền đang ở trạng thái tạm dừng. |
Tiêu điểm đầu vào mặc định là các nút điều khiển nội dung nghe nhìn bị tạm dừng trong khoảng thời gian im lặng giữa các lần đọc đang hoạt động của ứng dụng. |
Người dùng chạy một ứng dụng theo dõi bài tập thể dục trong khi nhạc đang tạm dừng. Giữa các lần cập nhật của huấn luyện viên thể dục, thao tác nhấn vào bàn di chuột sẽ tiếp tục phát nhạc thay vì kích hoạt chức năng tập luyện. |
Concurrent |
Tính năng phát kép đang hoạt động (ví dụ: thông báo âm thanh của ứng dụng làm gián đoạn hoặc giảm âm lượng nhạc nền). |
Tiêu điểm âm thanh bằng tiêu điểm nhập. Tiêu điểm đầu vào sẽ chuyển đến hoạt động được chiếu trong khi đọc và quay lại các nút điều khiển nội dung nghe nhìn khi luồng âm thanh kết thúc. |
Người dùng nghe nhạc khi ứng dụng chỉ đường phát ra thông báo hướng dẫn. Trong khi đọc, ứng dụng chỉ đường sẽ nhận được tiêu điểm nhập. Sau khi đọc xong, tiêu điểm nhập sẽ chuyển về các nút điều khiển nội dung nghe nhìn. |
Các biện pháp bảo vệ thời gian hệ thống
Hệ thống cung cấp các biện pháp bảo vệ sau đây để giúp ngăn chặn hành vi nhập dữ liệu vô tình hoặc hành vi không mong muốn cho người dùng:
- Thời gian ân hạn cho các hoạt động được chiếu mới ra mắt: Để phù hợp với việc tải tài sản khởi động nguội hoặc độ trễ mạng, các hoạt động được chiếu mới ra mắt sẽ có một khoảng thời gian ân hạn ngắn để thiết lập luồng dữ liệu và thu hút sự chú ý của người dùng trước khi hệ thống dừng hoạt động được chiếu và chuyển hoạt động đó sang chế độ nền.
- Tiêu điểm được định tuyến dựa trên nhận thức của người dùng: Nếu nhận thức của người dùng thay đổi từ một luồng dữ liệu mới, đang hoạt động, chẳng hạn như bản đọc âm thanh, thì hệ thống sẽ ngay lập tức tiếp tục hoạt động dự kiến của bạn và định tuyến tiêu điểm đầu vào đến hoạt động đó.
- Bộ đệm chuyển đổi trong khi phát nội dung nghe nhìn: Khi quá trình đọc tạm thời hoàn tất trong khi phát nội dung nghe nhìn ở chế độ nền, tiêu điểm đầu vào sẽ tạm thời duy trì ở hoạt động được chiếu. Khoảng thời gian đệm giúp ngăn chặn các thao tác nhập vô tình, chẳng hạn như người dùng cố gắng tắt tiếng bản đọc nhưng thay vào đó lại bỏ qua một bản nhạc. Sau vùng đệm chuyển đổi, hệ thống sẽ dừng hoạt động được chiếu của ứng dụng và chuyển tiêu điểm đầu vào đến các nút điều khiển nội dung nghe nhìn.
- Các hoạt động được chiếu ở trạng thái rảnh sẽ bị dừng hoặc tạm dừng: Hệ thống sẽ dừng mọi hoạt động được chiếu ở trạng thái rảnh mà không có luồng dữ liệu đang hoạt động sau vài phút (hoặc tạm dừng trong giây lát đối với đầu ra nội dung nghe nhìn đang diễn ra khi bị tạm dừng).
Chuyển đổi tiêu điểm đầu vào trong thực tế
Để hiểu cách chuyển đổi tiêu điểm đầu vào giữa các trạng thái đồng thời, hãy xem xét các trường hợp ví dụ sau đây cho một ứng dụng chỉ đường cung cấp hướng dẫn từng chặng:
Trường hợp A: Không đồng thời (nội dung nghe nhìn không hoạt động)
Trong trường hợp này, hệ thống sẽ định tuyến dữ liệu đầu vào đến ứng dụng chỉ đường, ứng dụng này có nhận thức của người dùng trong toàn bộ hành trình.
- Người dùng khởi chạy ứng dụng chỉ đường mà không phát nhạc nền.
- Ứng dụng chỉ đường sẽ chạy hoạt động được chiếu trên kính phát âm thanh.
- Vì không có phiên phát nội dung nghe nhìn nào đang hoạt động, nên ứng dụng chỉ đường sẽ duy trì tiêu điểm nhập bằng bàn di chuột trong suốt hành trình.
- Thao tác của người dùng: Nhấn trong khi đọc có thể tắt tiếng hướng dẫn. Nếu bạn nhấn vào màn hình khi Gemini đang im lặng, Gemini có thể lặp lại chỉ dẫn gần nhất.
Tình huống B: Bán đồng thời (nội dung nghe nhìn bị tạm dừng)
Trong trường hợp này, hệ thống sẽ định tuyến dữ liệu đầu vào đến các nút điều khiển nội dung nghe nhìn của hệ thống bất cứ khi nào ứng dụng điều hướng không có nhận thức của người dùng.
- Người dùng bắt đầu quy trình chỉ đường trong khi nhạc nền đang tạm dừng.
- Trong khoảng thời gian im lặng giữa các lần đọc, tiêu điểm đầu vào sẽ mặc định là các nút điều khiển nội dung nghe nhìn.
- Khi ứng dụng chỉ đường nói "Sau 500 feet, hãy rẽ trái", ứng dụng này sẽ nhận được tiêu điểm đầu vào.
- Thao tác của người dùng: Việc nhấn trong khi đọc có thể tắt tiếng hướng dẫn. Nhấn vào nút này trong khoảng lặng để tiếp tục phát nhạc.
Tình huống C: Đồng thời (nội dung nghe nhìn đang hoạt động)
Trong trường hợp này, hệ thống sẽ định tuyến dữ liệu đầu vào đến các nút điều khiển nội dung nghe nhìn của hệ thống bất cứ khi nào ứng dụng chỉ đường không có nhận thức của người dùng và âm thanh từ nội dung nghe nhìn đang phát sẽ bị giảm âm lượng trong mỗi lần đọc từ ứng dụng chỉ đường.
- Người dùng bắt đầu tính năng chỉ đường trong khi nhạc đang phát.
- Trong khi đọc hướng dẫn, hệ thống sẽ giảm âm thanh nền và chuyển tiêu điểm đầu vào sang ứng dụng chỉ đường.
- Thao tác của người dùng: Việc nhấn vào màn hình trong khi đọc có thể tắt tiếng hướng dẫn. Khi bạn nhấn vào nút này trong khoảng thời gian im lặng, hệ thống sẽ điều khiển việc phát nội dung nghe nhìn (để tạm dừng hoặc tiếp tục).