我在显示LiveCard时遇到问题。
public class RollTheDiceActivity extends Activity {
private LiveCard mLiveCard;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_roll_the_dice);
// ^^^^^^^^^^^^^^^^^^^^^^
publishCard(this);
}
private void publishCard(Context context) {
// Already published
if (mLiveCard != null)
return;
String cardId = "my_card";
TimelineManager tm = TimelineManager.from(context);
mLiveCard = tm.getLiveCard(cardId);
RemoteViews mRemoteViews = new RemoteViews(context.getPackageName(),
R.layout.livecard_roll_the_dice);
// ^^^^^^^^^^^^^^^^^^^^^^
mLiveCard.setViews(mRemoteViews);
Intent intent = new Intent(context, RollTheDiceActivity.class);
mLiveCard.setAction(PendingIntent.getActivity(context, 0, intent, 0));
mLiveCard.publish();
}
}
我希望看到内容livecard_roll_the_dice
而不是activity_roll_the_dice
,因为发布会立即发布并接管屏幕。
相反,activity_roll_the_dice
内容正在显示。我认为这意味着mLiveCard
要么从未发布或发布,要么不会被推送到屏幕上。
如何在屏幕上显示已发布卡片的内容?
如果有帮助,我会通过主屏幕上的语音触发器启动应用程序:“Ok Google,掷骰子”
谢谢!
答案 0 :(得分:2)
除非您将PublishMode.REVEAL
传递给publish
方法以强制显示,否则活动卡会在后台发布。 然而,更大的问题是,活动卡应该由后台服务而不是活动发布。实时卡需要由长时间运行的上下文拥有,以便在用户在时间轴中的其他地方或沉浸式中导航时在时间线中保持活跃。
因此,如果您希望活动也发布实时卡,则应将实时卡代码放入服务中,并让活动调用该服务(例如,使用活页夹)来发布卡。< / p>
当您希望立即显示实时卡时,您是否有充分使用活动并设置其内容视图的原因?如果这是您想要的行为,您可以考虑完全删除活动并使用服务,而将语音触发器附加到服务。 compass sample提供了一个示例。
答案 1 :(得分:1)
答案 2 :(得分:0)
我发现另外一件事可能会为这个问题节省一些时间!
使用 RemoteViews 进行服务的“低频更新”以管理 LiveCard (而不是 DirectRenderingCallback 用于“高频”更新),确保您不要在LiveCard上调用 setDirectRenderingEnabled(true)。
这将导致RemoteView根本无法工作!使用RemoteView管理其视图资源时从liveCard中删除setDirectRenderingEnabled修复了不会出现问题的实时卡。