LiveCard
借助此类,您可以创建有效的卡片,并将其发布到时间轴上。
如需详细了解如何创建实时卡片,请参阅实时卡片开发者指南。
直播卡片的生命周期
在实时卡片发布期间,需要长期存在的上下文才能拥有这些卡片,因此您应该在后台 Service
中管理它们。然后,您可以在服务启动或响应服务监控的其他事件时立即发布实时卡片。同样,当卡片不再相关或服务已销毁时,您应将其取消发布。
发布实时卡片时,您可以选择这对用户的影响。以静默方式发布时,卡片会插入到时间轴上,而不会产生任何明显的影响:用户必须滑动到卡片才能看到它。您还可以让实时卡片在发布后立即自动显示。当应用的主界面是实时卡片而不是 activity 时,这通常很有用。
在直播卡片上显示内容
实时卡片既可以显示布局资源中的内容,也可以让代码直接呈现在其绘制表面上。根据您更新卡片上内容的频率以及主要渲染微件还是自由格式的图形,选择最适合您的应用的方法。
使用远程视图膨胀布局
如果您的应用只需要标准 widget 并且不经常更新(两次刷新之间大约几秒钟或更长时间),那么可以借助 RemoteViews
类创建卡。RemoteViews
对象可让 Glass 时间轴(在单独的应用代码中运行)在单独的进程中运行,以膨胀您创建的布局。
LiveCard liveCard; // initialized elsewhere RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.my_layout); liveCard.setViews(views);
请注意,使用 RemoteViews
的卡片发布后,通过调用 set*
方法对视图所做的更改将不会显示在时间轴中,除非您再次对实时卡片明确调用 setViews
以强制更新。
直接在直播卡片界面中绘图
如果您的应用需要比标准 widget 支持的更频繁的更新(每秒几次)或渲染更复杂的图形,请启用直接渲染并将 SurfaceHolder.Callback
添加到卡片 Surface。
LiveCard liveCard; // initialized elsewhere liveCard.setDirectRenderingEnabled(true); liveCard.getSurfaceHolder().addCallback(callback);
然后,您可以直接在后台线程内进行绘制,或者响应外部事件(例如传感器或位置更新)。使用 surfaceCreated
和 surfaceDestroyed
方法可在卡片显示或隐藏时启动和停止渲染逻辑。
请注意,Surface 容器的回调方法不会在主界面线程上调用。
处理实时卡片选择
实时卡片必须提供一项操作(用于启动 activity、服务或执行广播的 PendingIntent
),当用户点按选择该卡片时,系统就会执行该操作。
通常,您将使用该操作启动一个 activity,该 activity 会显示选项菜单或会将用户转到应用的其他部分。您至少应该提供一个选项,让用户可以从时间轴中移除实时卡片。
LiveCard liveCard; // initialized elsewhere Intent intent = new Intent(context, MyActivity.class); liveCard.setAction(PendingIntent.getActivity(context, 0, intent, 0));
系统不会显示未包含操作的直播卡片。
嵌套类 | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
枚举 | LiveCard.PublishMode | 确定在发布后向用户呈现卡片的方式。 |
常量 | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
String | EXTRA_FROM_LIVECARD_VOICE | 布尔值 extra,表示Intent 通过实时卡中的语音激活。 |
公共构造函数 | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
公共方法 | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
LiveCard | |||||||||||
SurfaceHolder | |||||||||||
布尔值 | |||||||||||
无效 | |||||||||||
无效 | |||||||||||
LiveCard |
setAction(PendingIntent intent)
|
||||||||||
LiveCard |
setDirectRenderingEnabled(布尔值启用)
|
||||||||||
LiveCard |
setRenderer(GlRenderer 渲染程序)
|
||||||||||
LiveCard |
setViews(RemoteViews 视图)
|
||||||||||
LiveCard |
setVoiceActionEnabled(布尔值启用)
|
||||||||||
无效 |
取消发布()
|
继承的方法 | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
常量
公共构造函数
公共方法
public SurfaceHolder getSurfaceHolder ()
启用直接渲染后,授予对要在其上绘制的 Surface
的访问权限。
请注意,返回的 SurfaceHolder
应仅用作访问受管理 Surface 的一种方式。用于更改表面的形状和类型的方法是空操作。
另请注意,此对象的回调不是在界面线程中进行的。
public 布尔值 is 已发布 ()
如果卡片当前已发布,则返回 true
。
public void publish (LiveCard.PublishMode 模式)
将此卡片发布到时间轴。
仅当有操作且启用了直接呈现或设置了远程视图时,该卡片才会显示。
参数
模式 | 确定如何向用户展示卡片 |
---|
public LiveCard setAction (PendingIntent intent)
更改选择卡片时执行的操作。
参数
intent | 在用户选择信用卡时触发 |
---|
返回
- 此对象用于调用链
public LiveCard setDirectRenderingEnabled (布尔值启用)
参数
启用 | 是否应启用直接呈现 |
---|
返回
- 此对象用于调用链
另请参阅
public LiveCard setRenderer (GlRenderer 渲染程序)
添加了基于 OpenGL 的渲染程序。
渲染程序将用于绘制到(自动)请求进行直接渲染的 Surface。
返回
- 此对象用于调用链
public LiveCard setViews (RemoteViews views)
更改用于显示此卡片界面的 RemoteViews
。
在直接对已发布卡片的远程视图进行任何更改后,也应调用此方法,否则这些更改不会反映在时间轴上。
如果启用了直接呈现,此方法不会产生任何影响。
参数
观看次数 | 卡片的界面 |
---|
返回
- 此对象用于调用链
public LiveCard setVoiceActionEnabled (布尔值启用)
在时间轴上显示卡片时启用语音操作。
设置后,该卡片会在时间轴上显示时监听“ok glass”,并在说出此保护短语时触发已由 setAction(PendingIntent)
方法设置的 intent。如果 intent 启动实现上下文语音菜单的 activity,则该 activity 将在第一个菜单项上自动打开(即,就像在 activity 本身内还说“ok glass”)。此功能支持在实时卡片上实现上下文菜单语音菜单。
参数
启用 | 是否应启用语音操作 |
---|
返回
- 此对象用于调用链
public void unpublish ()
从时间轴中取消发布此卡片。