LiveCard

此项为 API 级别 XE12 中的新增配置
公共类

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);
 

然后,您可以直接在后台线程内进行绘制,或者响应外部事件(例如传感器或位置更新)。使用 surfaceCreatedsurfaceDestroyed 方法可在卡片显示或隐藏时启动和停止渲染逻辑。

请注意,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上下文上下文、字符串标记)
公共方法
LiveCard
attach服务服务)
SurfaceHolder
布尔值
无效
无效
LiveCard
LiveCard
setDirectRenderingEnabled(布尔值启用)
LiveCard
setRenderer(GlRenderer 渲染程序)
LiveCard
setViewsRemoteViews 视图)
LiveCard
setVoiceActionEnabled(布尔值启用)
无效
继承的方法

常量

此项为 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 标记)

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

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

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

公共方法

在 API 级别 XE16 中添加

public LiveCard attach (Service service)

请附加背景 Service,以便在此卡片发布时,系统会将给定服务设置为在前台运行。

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

参数
服务 将设置为在前台运行
返回
  • 此对象用于调用链
在 API 级别 XE12 中添加

public SurfaceHolder getSurfaceHolder ()

启用直接渲染后,授予对要在其上绘制的 Surface 的访问权限。

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

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

在 API 级别 XE12 中添加

public 布尔值 is 已发布 ()

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

在 API 级别 XE16 中添加

public void navigation ()

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

抛出
IllegalStateException如果银行卡未发布
在 API 级别 XE12 中添加

public void publish LiveCard.PublishMode 模式)

将此卡片发布到时间轴。

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

参数
模式 确定如何向用户展示卡片
在 API 级别 XE12 中添加

public LiveCard setAction (PendingIntent intent)

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

参数
intent 在用户选择信用卡时触发
返回
  • 此对象用于调用链
在 API 级别 XE12 中添加

public LiveCard setDirectRenderingEnabled (布尔值启用)

启用直接呈现。

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

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

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

public LiveCard setRenderer (GlRenderer 渲染程序)

添加了基于 OpenGL 的渲染程序。

渲染程序将用于绘制到(自动)请求进行直接渲染的 Surface。

返回
  • 此对象用于调用链
在 API 级别 XE12 中添加

public LiveCard setViews (RemoteViews views)

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

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

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

参数
观看次数 卡片的界面
返回
  • 此对象用于调用链
在 API 级别 XE21 中添加

public LiveCard setVoiceActionEnabled (布尔值启用)

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

设置后,该卡片会在时间轴上显示时监听“ok glass”,并在说出此保护短语时触发已由 setAction(PendingIntent) 方法设置的 intent。如果 intent 启动实现上下文语音菜单的 activity,则该 activity 将在第一个菜单项上自动打开(即,就像在 activity 本身内还说“ok glass”)。此功能支持在实时卡片上实现上下文菜单语音菜单。

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

public void unpublish ()

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