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 | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
Métodos públicos | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
Card em tempo real | |||||||||||
SurfaceHolder (em inglês) | |||||||||||
boolean | |||||||||||
void | |||||||||||
void |
publish(modo LiveCard.PublishMode)
|
||||||||||
Card em tempo real |
setAction(intent PendingIntent)
|
||||||||||
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
Construtores públicos
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
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
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.
Ver também
booleano booleano isPublish ()
Retornará true
se o cartão estiver publicado.
vazio vazio navegar ()
Direciona o usuário para este card na linha do tempo.
Gera
IllegalStateException | se o cartão não for publicado |
---|
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 |
---|
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
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
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
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
Ver também
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
Ver também
público vazio cancelar publicação ()
Cancela a publicação deste card na linha do tempo.