配置活动

事件会触发状态变化并启动操作。 事件充当信号,从系统界面或进程外部使用 intent 调度。 事件会告知可扩缩界面需要响应的发生情况。

可扩缩界面事件是由硬件或软件更改触发的系统信号,可以改变面板的状态。这些事件会通知框架需要界面响应的发生情况。除了内置的系统事件之外,您还可以定义自定义事件,以便更精确地控制面板状态。

事件的结构

强制性唯一标识符 (ID) 用于标识事件。此 ID 对发生情况的类型进行分类,例如 _System_TaskOpenEvent_System_PanelEmptyEvent

除了此 ID 之外,事件还可以选择携带令牌(键值对),以提供有关事件的背景信息和详细信息。这些令牌允许对事件进行更精细的过滤,从而仅在特定条件下触发转换或操作。

令牌作为以英文分号 (;) 分隔的键值对列表传递给事件。以下是系统支持的键的列表:

说明
panelId 标识与事件关联的特定界面面板。
component 指定组件名称,例如与事件关联的 activity。
package 指示与事件相关的软件包名称。
panelToVariantId 在特定上下文中指定面板的目标变体。使用此 属性,通过监听面板转换来级联动画。例如,当面板 A 转换为打开状态时,触发面板 B 转换为关闭状态。

例如:

"component=com.android.app;panelId=panel1"

事件匹配逻辑

调度事件时,必须根据定义的条件进行匹配,以触发转换或操作。匹配过程分为两个阶段:

  • 严格的事件 id 匹配:调度的事件的 id 必须与转换或操作事件过滤条件中指定的 id 完全匹配。如果 ID 不匹配,则该事件被视为不匹配。

  • 部分事件令牌匹配:当事件 ID 匹配时,系统会使用部分匹配来根据过滤条件中定义的令牌评估事件的令牌。

    如需发生匹配,所有事件属性(令牌)在 转换的事件定义中指定必须严格匹配调度事件中的相应 属性。

    也就是说,调度事件可以包含过滤条件中未明确定义的其他令牌。额外的令牌不会阻止匹配。相反,它们在匹配评估中会被忽略。

    相反,如果过滤条件指定了调度事件中不存在的令牌,或者匹配令牌的值不一致,则不视为匹配。

例如,假设定义了一个转换,当 id="app_open" 发生时触发,该转换在 panelId="panel1" 上发生且 component="com.android.myapp.Activity"

如果调度事件具有 id="app_open"panelId="panel1"component="com.android.myapp.Activity",则会发生匹配。所有过滤 条件都满足,并且更具体的值被视为与 Activity value in the dispatched event is considered a match forcom.android.myapp` 匹配。

但是,当 id="app_open"panelId="panel1"component="com.android.yourapp.Activity" 时,调度事件的匹配失败。 虽然 idpanelId 匹配,但转换中的 component(不等于 componentcom.android.myapp 与调度事件中的 com.android.yourapp 不匹配。

转换触发器

虽然转换可能匹配,但这并不意味着它会被触发。对于每个事件,只能触发一个转换。可扩缩界面旨在仅触发最接近的匹配项。

例如,当两个转换(一个具有组件名称,另一个没有组件名称 -m)匹配时,仅触发具有组件名称的转换。

事件调度和处理

事件是可扩缩界面动态行为的核心。事件可以从系统界面或外部进程使用 intent 调度。

系统事件

框架定义了多个系统事件,以促进这些操作:

属性 说明
_System_OnHomeEvent

(SYSTEM_HOME_EVENT_ID)
表示系统收到了显示 主屏幕 的请求。在 AAOS 中,主屏幕 可以是窗口的灵活配置,例如小部件的组合,甚至是地图。对于依赖于用户查看主界面来触发的转换或操作,此事件至关重要。
_System_TaskOpenEvent

(SYSTEM_TASK_OPEN_EVENT_ID)

在任务或应用打开时调度。此一般事件可以 根据应用的启动触发操作或转换。

此事件包含 panelIdcomponent 等令牌。

_System_TaskCloseEvent

(SYSTEM_TASK_CLOSE_EVENT_ID)
表示任务或应用已关闭,并充当 _System_TaskOpenEvent 的对应项。这允许系统对应用 被关闭做出反应。这可以触发转换,以将面板返回到默认 状态或启动其他清理操作。
_System_TaskPanelEmptyEvent

(SYSTEM_TASK_PANEL_EMPTY_EVENT_ID)

在特定面板变为空时调度,并包含 panelId 作为令牌,以便根据哪个面板为空来过滤触发器。

此事件对于可靠的错误恢复和在关联内容崩溃或意外终止时重新启动应用 以防止显示空界面面板非常重要。

例如,如果 ControlBar 应用崩溃,您可以配置 操作以检测其面板上的此事件,并自动重新启动 ControlBar

_System_EnterSuwEvent

(SYSTEM_ENTER_SUW_EVENT_ID)
表示系统进入设置向导 (SUW)。此事件 表示系统已准备就绪,并且可以配置为在系统初始化后启动应用或显示 指定的面板。进入此类 关键系统状态需要专用事件来触发相应的 界面调整或操作。
_System_ExitSuwEvent

(SYSTEM_EXIT_SUW_EVENT_ID)
表示系统退出设置向导 (SUW)。与 _System_EnterSuwEvent 类似,此事件允许系统响应 通过启动默认应用或 转换为标准界面来完成设置过程。
_System_OnAnimationEndEvent

(SYSTEM_ON_ANIMATION_END_EVENT_ID)
在界面中完成动画时触发。您可以使用此 事件来触发依赖于 视觉转换完成的后续操作或状态更改。

此事件包含 variantId 的令牌,以指示面板在动画结束时最终使用的变体。