计划支持不同类型的音频眼镜和显示眼镜

适用的 XR 设备
本指南可帮助您为以下类型的 XR 设备打造优质体验。
音频和
显示眼镜

不同类型的音频眼镜和显示眼镜具有不同的功能。例如,虽然所有音频眼镜和显示眼镜都通过语音提供音频体验,但只有显示眼镜具有显示屏,您的应用可以在该显示屏上显示使用 Jetpack Compose Glimmer 构建的界面

为了在各种设备上打造顺畅无缝的用户体验,请规划眼镜的 Activity,以检查不同的设备功能。这种方法可让您构建一个能够调整自身行为的 activity,而不是构建多个针对特定设备的 activity,从而简化开发流程。

了解投影活动的生命周期

您为音频眼镜和显示眼镜构建的 activity 不会直接在设备上运行,而是从主机设备(例如用户的手机)投影到设备上。您为此目的而构建的专用 activity 称为预测 activity。投影 activity 的生命周期基于标准 activity 生命周期构建,但它也包含一些关键差异,以支持不同类型的音频眼镜和显示眼镜的功能。

图 1. 投影 activity 生命周期中的关键事件。

以下是关键事件的细分,其中标注了仅适用于投影到音频眼镜和显示眼镜的活动的互动:

  • onCreate()
    • 在创建投影 activity 时调用。
    • 在此处初始化应用的 Jetpack Compose Glimmer 界面和其他组件。
  • onStart()
    • 在投影的 activity 开始且用户知道应用时调用。
  • onResume()
    • 当投影的 activity 重新获得焦点时调用。当 activity 处于焦点状态时,它是可互动的,并且可以接收触控板或按钮输入。
    • 在眼镜之前从头上取下(脱下)后,重新戴上(戴上)时调用。
  • onPause()
    • 当投影的 activity 失去焦点,但用户仍然知道您的应用时,系统会调用此方法。当 activity 失去焦点时,它无法互动,并且停止消耗输入。
  • onStop()
    • 当系统认为用户不再感知您的应用时调用。
    • 在眼镜从头部摘下时(脱下)调用。
  • onDestroy()
    • 在即将销毁投影 activity 时调用。调用此方法时,系统会释放与 activity 关联的所有资源。

了解显示状态如何影响预计的 activity 生命周期

在标准 Activity 中,当设备的屏幕关闭时,生命周期状态会发生变化,通常会变为 onPause()onStop()。相比之下,当眼镜的显示屏开启或关闭时,投影 activity 的生命周期不会发生变化。此行为意味着,即使显示屏处于关闭状态,投影 activity 也会继续以“已启动”或“已恢复”状态运行,从而让应用的音频体验不会中断。

由不同系统和用户事件触发的其他activity 状态变化会以常规方式运行。

了解用户认知度如何影响您的预期活动

即使投影的 activity 不可见,用户也可以感知到。 感知是指用户感知和互动应用体验的所有方式,包括:

  • 聆听音频、声音反馈或其他声音提示。
  • 触发面向用户的 LED 的应用操作,例如当应用访问摄像头或麦克风时,触发隐私指示标志。

在这些情况下,用户知道音频眼镜和显示眼镜处于活动状态并正在响应,即使他们没有看显示屏:

  • 对于投影的 activity,onStart() 状态表示 activity 处于活跃状态。
  • onResume() 状态表示 activity 可互动,可以接收触控板输入,或者正在接收主要输入调度。

只要用户知道您的应用,您的 activity 就会保持活跃状态并位于前台。如果系统在短时间内未检测到任何感知信号,则会将相应 activity 从前台移除,并最终触发 onStop()

了解预测的活动和预测的情境

音频眼镜和显示眼镜被视为可扩展用户手机功能的已连接的设备。投影上下文是一种设备感知型 Context,可让应用与已连接的眼镜设备上的硬件(例如传感器、摄像头或麦克风)进行互动,而不是与手机的硬件进行互动。在为音频眼镜和显示眼镜开发体验时,您的应用必须使用投影上下文来访问眼镜的硬件。

系统可能会根据调用 activity 的上下文自动向您的应用授予投影上下文:

  • 对于投影的 activity:如果您的应用代码是从投影的 activity 内部运行的,则其自身的 activity 上下文已是投影的上下文。在此场景中,在该 activity 内进行的调用已可访问眼镜的硬件。

  • 对于手机应用或服务:如果应用的某个部分(例如手机 activity 或服务)需要访问眼镜的硬件,则必须明确获取投影的 context。为此,请使用 createProjectedDeviceContext() 方法。

如需了解详情,请参阅使用投影的上下文来访问音频眼镜和显示眼镜上的硬件

了解设备感知型 API

某些标准 Android API 会根据调用 activity 的 Context 更改其访问的设备硬件。当这些 API 接收到投影的上下文时,它们会访问眼镜的硬件,而不是主机手机设备上的硬件:

  • CameraManager:访问眼镜上的摄像头。
  • SensorManager:从眼镜中检索传感器数据(例如,陀螺仪或加速度计数据)。
  • AudioManager:管理眼镜上的音频流、音量和路由。
  • AudioRecord:使用眼镜的麦克风捕获音频。