0

我无法显示 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,掷骰子”

谢谢!

4

3 回答 3

2

PublishMode.REVEAL除非您传递给该publish方法以强制显示它,否则实时卡片将在后台发布。但是,更大的问题是实时卡片应该由后台服务而不是活动发布。实时卡需要由长期运行的上下文拥有,以便在用户在时间线中的其他地方导航或沉浸时在时间线中保持活力。

因此,如果您希望活动也发布活动卡片,则应将活动卡片代码放入服务中,并让活动调用该服务(例如,使用活页夹)以发布卡片。

当您希望实时卡立即显示时,您是否有理由使用活动并设置其内容视图?如果这是您想要的行为,您可能会考虑完全删除活动并改用服务,并将语音触发器附加到服务。指南针示例提供了一个示例。

于 2013-12-14T00:24:36.757 回答
1

卡尔文,现场牌的“生命”应该与更“持久”的东西联系在一起,正如之前的海报所指出的那样。如果您查看我的示例代码,它总是使用后台服务来控制实时卡的寿命。您的活动会来来去去(暂停/恢复),而实时卡是“固定”的,它一直存在,直到您明确“取消发布”它。

于 2013-12-14T00:29:32.420 回答
0

我发现另一件事可能会为这个问题节省一些时间!

当使用RemoteViews从服务进行“低频更新”以管理LiveCard(而不是DirectRenderingCallback用于“高频”更新)时,请确保不要在 LiveCard 上调用setDirectRenderingEnabled (true)

这将导致 RemoteView 根本无法工作!使用 RemoteView 管理其视图资源时从 liveCard 中删除 setDirectRenderingEnabled 修复了 livecard 未出现的问题。

于 2014-02-06T18:17:05.067 回答