Google Glass:显示已发布的LiveCard

时间:2013-12-14 00:10:32

标签: google-glass google-gdk

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

谢谢!

3 个答案:

答案 0 :(得分:2)

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

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

当您希望立即显示实时卡时,您是否有充分使用活动并设置其内容视图的原因?如果这是您想要的行为,您可以考虑完全删除活动并使用服务,而将语音触发器附加到服务。 compass sample提供了一个示例。

答案 1 :(得分:1)

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

答案 2 :(得分:0)

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

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

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