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