LiveCard

在 API 级别 XE12 中引入
公共类

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 上绘制,或者响应外部事件(例如传感器或位置信息更新)。您可以使用 surfaceCreatedsurfaceDestroyed 方法在卡片显示或隐藏时启动和停止渲染逻辑。

请注意,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
公共构造函数
LiveCardContext 上下文,String 标记)
公共方法
LiveCard
attach服务服务)
SurfaceHolder
布尔值
void
void
LiveCard
LiveCard
setDirectRenderingEnabledsetDirectRenderingEnabled(布尔值启用)
LiveCard
setRendererGlRenderer 渲染程序)
LiveCard
setViews(RemoteViews 视图)RemoteViews
LiveCard
setVoiceActionEnabled(布尔值启用)setVoiceActionEnabled
void
继承的方法

常量

在 API 级别 XE21 中引入

public static final String EXTRA_FROM_LIVECARD_VOICE

布尔值 extra,表示 Intent 是通过语音从实时卡中激活的。

常量值: "android.intent.extra.EXTRA_FROM_LIVECARD"

公共构造函数

在 API 级别 XE16 中引入

public LiveCard (Context context, String tag)

创建具有指定标记的有效卡片。

请注意,只有在明确发布卡片后,卡片才会显示。

参数
上下文 应用的上下文
标记 非 null 标记;用于调试目的

公共方法

在 API 级别 XE16 中引入

public LiveCard attach Service 服务)

附加后台 Service,以便在此卡片发布后,指定服务将设置为在前台运行。

取消发布此实时卡片后,该服务会自动从前台移除。

参数
服务 将被设置为
返回
  • 此对象(用于调用链)
在 API 级别 XE12 中引入

public SurfaceHolder getSurfaceHolder ()

启用直接渲染后,可提供对要在上面进行绘制的 Surface 的访问权限。

请注意,返回的 SurfaceHolder 应仅用作访问托管 Surface 的一种方式。用于更改 Surface 形状和类型的方法是空操作。

另请注意,此对象的回调不是在界面线程中进行。

在 API 级别 XE12 中引入

public 布尔值 isPublished ()

如果卡片当前已发布,则返回 true

在 API 级别 XE16 中引入

public void Navigate ()

将用户引导至时间轴中的此卡片。

抛出
IllegalStateException 如果卡片未发布
在 API 级别 XE12 中引入

public void publish LiveCard.PublishMode 模式)

将此卡片发布到时间轴。

仅当卡片包含操作,且已启用直接呈现或已设置远程视图时,系统才会显示该卡片。

参数
模式 决定如何向用户显示卡片
在 API 级别 XE12 中引入

public LiveCard setAction (PendingIntent intent)

更改选择卡片时执行的操作。

参数
intent 在选择卡片时触发
返回
  • 此对象(用于调用链)
在 API 级别 XE12 中引入

public LiveCard setDirectRenderingEnabled (boolean enable)

支持直接呈现。

在此模式下,卡片内容必须直接渲染到 Surface 中。

请注意,只有在卡片未发布时才能调用此方法,否则会抛出异常。

参数
启用 是否应启用直接呈现
返回
  • 此对象(用于调用链)
另请参阅
在 API 级别 XE16 中引入

public LiveCard setRenderer (GlRenderer 渲染程序)

添加基于 OpenGL 的渲染程序。

渲染程序将用于在请求(自动)直接渲染的 Surface 上绘制图像。

返回
  • 此对象(用于调用链)
在 API 级别 XE12 中引入

public LiveCard setViews RemoteViews 视图)

更改用于显示此卡片界面的 RemoteViews

此外,在直接对已发布卡片的远程视图进行任何更改后,也应调用此方法,否则这些更改不会反映在时间轴上。

如果已启用直接呈现,此方法不会产生任何影响。

参数
视图 卡片界面
返回
  • 此对象(用于调用链)
在 API 级别 XE21 中添加

public LiveCard setVoiceActionEnabled (boolean enable)

当卡片显示在时间轴上时启用语音操作。

设置后,该卡片会监听时间轴上显示的“Ok glass”,并在用户说出该守护短语时触发 setAction(PendingIntent) 方法设置的 intent。如果该 intent 启动一个实现上下文语音菜单的 activity,该 activity 将在第一个菜单项上自动打开(就像在 activity 本身内说出“Ok glass”)。借助此功能,您可以在实时卡片上实现上下文语音菜单。

参数
启用 是否应启用语音操作
返回
  • 此对象(用于调用链)
在 API 级别 XE12 中引入

public void unpublish ()

从时间轴中取消发布此卡片。