Cartão ao vivo

Adicionado no nível XE12 da API
aula pública

Cartão ao vivo

Essa classe permite criar cards ativos e publicá-los na linha do tempo.

Para mais informações sobre como criar cards dinâmicos, consulte o guia do desenvolvedor Cards dinâmicos.

Vida útil de um cartão ativo

Os cards dinâmicos exigem um contexto de longa duração para serem publicados durante todo o período de publicação deles. Portanto, eles precisam ser gerenciados em uma Service em segundo plano. Em seguida, será possível publicar um cartão ativo assim que o serviço for iniciado ou em resposta a outros eventos monitorados. Da mesma forma, cancele a publicação de cartões quando eles não forem mais relevantes ou quando o serviço for destruído.

Ao publicar um card ativo, você escolhe como isso afeta os usuários. Ao publicar silenciosamente, o cartão vai ser inserido na linha do tempo sem qualquer efeito visível: os usuários precisam deslizar até o cartão para vê-lo. O cartão ativo também pode ser exibido automaticamente logo após a publicação. Isso geralmente é útil quando a interface do usuário principal do aplicativo é um cartão ativo, e não uma atividade.

Como mostrar conteúdo em um card ativo

Um cartão ativo pode exibir conteúdo de um recurso de layout ou permitindo que o código seja renderizado diretamente na superfície de desenho. Escolha o método mais apropriado para seu app com base na frequência com que você precisa atualizar o conteúdo do card e se estiver renderizando widgets ou gráficos de formato livre.

Inflar um layout usando visualizações remotas

Se o aplicativo exigir apenas widgets padrão e atualizações não frequentes (cerca de alguns segundos ou mais entre as atualizações), crie o cartão com a ajuda da classe RemoteViews. O objeto RemoteViews permite que a linha do tempo do Glass, que é executada em um processo separado do seu próprio código de aplicativo, infle um layout que você criou.

     LiveCard liveCard; // initialized elsewhere
     RemoteViews views = new RemoteViews(context.getPackageName(),
             R.layout.my_layout);
     liveCard.setViews(views);
 

Depois que um cartão usando RemoteViews é publicado, as mudanças feitas nas visualizações chamando métodos set* não ficarão visíveis na linha do tempo, a menos que você chame setViews explicitamente no cartão ativo novamente para forçar uma atualização.

Como desenhar diretamente na superfície do cartão ao vivo

Se o app exigir atualizações mais frequentes (várias vezes por segundo) ou renderizar gráficos mais elaborados do que os widgets padrão compatíveis, ative a renderização direta e adicione um SurfaceHolder.Callback à plataforma do cartão.

     LiveCard liveCard; // initialized elsewhere
     liveCard.setDirectRenderingEnabled(true);
     liveCard.getSurfaceHolder().addCallback(callback);
 

Você pode desenhar diretamente na superfície dentro de uma linha de execução em segundo plano ou em resposta a eventos externos (por exemplo, atualizações de sensor ou localização). Use os métodos surfaceCreated e surfaceDestroyed para iniciar e interromper a lógica de renderização quando o cartão for exibido ou oculto.

Observe que os métodos de callback do detentor da superfície não são invocados na linha de execução de IU principal.

Como processar a seleção do cartão em tempo real

Um cartão ativo precisa fornecer uma ação (uma PendingIntent para iniciar uma atividade, um serviço ou uma transmissão) que será executada quando o usuário tocar para selecionar o cartão. Normalmente, essa ação é usada para iniciar uma atividade que exibe um menu de opções ou leva o usuário a outra parte do seu aplicativo. No mínimo, forneça uma opção que permita ao usuário remover o cartão ativo da linha do tempo.

     LiveCard liveCard; // initialized elsewhere
     Intent intent = new Intent(context, MyActivity.class);
     liveCard.setAction(PendingIntent.getActivity(context, 0, intent, 0));
 

Os cards dinâmicos que não têm uma ação não serão exibidos.

Classes aninhadas
tipo enumerado LiveCard.PublishMode Determina como o cartão é apresentado ao usuário quando publicado. 
Constantes
String EXTRA_FROM_LIVECARD_VOICE (em inglês) Booleano extra que indica que um Intent foi ativado por voz de um cartão ativo.
Construtores públicos
LiveCard(contexto context, tag String)
Métodos públicos
Card em tempo real
attach(serviço Serviço)
SurfaceHolder (em inglês)
boolean
void
void
Card em tempo real
Card em tempo real
setDirectRenderEnabled(ativado por booleano)
Card em tempo real
setRenderer(renderizador GlRenderer)
Card em tempo real
setViews(RemoteViews visualizações)
Card em tempo real
setVoiceActionEnabled(ativar booleano)
void
Métodos herdados

Constantes

Adicionado no nível XE21 da API

pública estática final String EXTRA_FROM_LIVECARD_VOICE

Booleano extra que indica que um Intent foi ativado por voz de um cartão ativo.

Valor da constante: "android.intent.extra.EXTRA_FROM_LIVECARD"

Construtores públicos

Adicionado no nível XE16 da API

público LiveCard (contexto context, tag String)

Cria um card ativo com a tag fornecida.

Observe que um cartão não aparecerá até que seja explicitamente publicado.

Parâmetros
contexto o contexto do aplicativo
tag tag não nula para o cartão. Isso serve para fins de depuração

Métodos públicos

Adicionado no nível XE16 da API

público LiveCard anexar (serviço Service)

Anexe um segundo plano Service para que, quando o cartão for publicado, o serviço em questão seja definido para ser executado em primeiro plano.

O serviço será automaticamente removido do primeiro plano quando a publicação deste cartão for cancelada.

Parâmetros
serviço será definido para ser executado em primeiro plano
Retorna
  • esse objeto para encadeamento de chamadas
Adicionado no nível XE12 da API

público SurfaceHolder getSurfaceHolder ()

Quando a renderização direta está ativada, dá acesso ao Surface em que o desenho será realizado.

O SurfaceHolder retornado precisa ser usado apenas como um meio de acessar a plataforma gerenciada. Os métodos para mudar a forma e o tipo da superfície não são operacionais.

Os callbacks para esse objeto não são feitos na linha de execução de IU.

Adicionado no nível XE12 da API

booleano booleano isPublish ()

Retornará true se o cartão estiver publicado.

Adicionado no nível XE16 da API

vazio vazio navegar ()

Direciona o usuário para este card na linha do tempo.

Gera
IllegalStateException se o cartão não for publicado
Adicionado no nível XE12 da API

public void publish (modo LiveCard.PublishMode)

Publica o card na linha do tempo.

O card só será exibido se tiver uma ação e se a renderização direta estiver ativada ou as visualizações remotas tiverem sido definidas.

Parâmetros
modo determina como o cartão é apresentado ao usuário
Adicionado no nível XE12 da API

público LiveCard setAction (intent)

Altera a ação realizada quando o cartão é selecionado.

Parâmetros
intent será acionado quando o cartão for selecionado
Retorna
  • esse objeto para encadeamento de chamadas
Adicionado no nível XE12 da API

público LiveCard setDirectRenderEnabled (ativar booleano)

Ativa a renderização direta.

Nesse modo, o conteúdo do cartão precisará ser renderizado diretamente em um Surface.

Esse método só pode ser chamado quando o cartão não é publicado e gera uma exceção.

Parâmetros
ativar se a renderização direta deve ser ativada
Retorna
  • esse objeto para encadeamento de chamadas
Ver também
Adicionado no nível XE16 da API

público LiveCard setRenderer (renderizador GlRenderer)

Adiciona um renderizador baseado em OpenGL.

O renderizador será usado para desenhar em uma superfície solicitada (automaticamente) para renderização direta.

Retorna
  • esse objeto para encadeamento de chamadas
Adicionado no nível XE12 da API

público LiveCard setViews (visualizações do RemoteViews)

Muda o RemoteViews usado para exibir a IU desse card.

Esse método também precisa ser chamado depois de qualquer mudança diretamente nas visualizações remotas de um cartão publicado, ou essas mudanças não vão ser refletidas no cronograma.

Esse método não terá efeito se a renderização direta estiver ativada.

Parâmetros
de visualizações a IU do cartão
Retorna
  • esse objeto para encadeamento de chamadas
Adicionado no nível XE21 da API

público LiveCard setVoiceActionEnabled (ativar booleano)

Ativa uma ação de voz quando o card é exibido na linha do tempo.

Quando definido, o card detecta "Ok Glass" quando é exibido na linha do tempo e, quando essa frase de segurança é falada, dispara a intent que foi definida pelo método setAction(PendingIntent). Se a intent iniciar uma atividade que implemente menus de voz contextuais, a atividade será aberta automaticamente nos primeiros itens do menu (como se "ok Glass" fosse dito dentro da própria atividade). Esse recurso permite implementar menus de voz contextuais em cards ao vivo.

Parâmetros
ativar se a ação de voz deve ser ativada
Retorna
  • esse objeto para encadeamento de chamadas
Adicionado no nível XE12 da API

público vazio cancelar publicação ()

Cancela a publicação deste card na linha do tempo.