Aplicações para TV Digital em Java Como começar a desenvolver?

Documentos relacionados
Aplicações para TV Digital com Ginga-J do ambiente à execução

Aplicativo para TV Digital Interativa de acesso ao Twitter

Tutorial sobre o uso da ferramenta de autoria A Ferramenta de Autoria - Célula

TV Digital Estamos preparados?

Comparação entre o Desenvolvimento de Aplicações MHP e OpenTV

Sistema de acesso a dispositivos eletrônicos através da TV Digital interativa. Aluno: Rodrigo Brüning Wessler Orientador: Francisco Adell Péricas

Ferramenta de Autoria Gráfica para a Construção de Aplicações Utilizando o Framework AppTV

Desenvolvimento de Sistemas para TV Digital. Prof. Fabrício J. Barth Faculdades Tancredo Neves

Instalação JDK. Joyce França. Professora de Ciência da Computação - IFNMG

3 Trabalhos Relacionados

INTERFACES DE DESENVOLVIMENTO DE APLICAÇÕES PARA TV DIGITAL BASEADO NO MIDDLEWARE MHP. Aluno: Joel Alexandre Darós Orientador: Mauro Marcelo Mattos

Middleware Ginga. Jean Ribeiro Damasceno. Escola de Engenharia Universidade Federal Fluminense (UFF) RuaPassoda Pátria, 156 Niterói RJ Brasil

1) DADOS DA OBRA: Programando em Java 2 Teoria e Aplicações Rui Rossi dos Santos 2004 Axcel Books (

Curso online de. Formação em Front-End. Plano de Estudo

AppTV: Um framework de auxílio ao desenvolvimento de aplicações para TV Digital

Instalação JDK 10/03/2017

Informática para Concursos

DESENVOLVIMENTO DE APLICAÇÕES PARA TV DIGITAL COM GINGA E JAVA

ApowerEdit software GPETEC. Guia Instrucional para utilização do. Grupo de Pesquisa em Educação, Tecnologia e Ciências

Obs.: para realizar estas atividades tenha certeza de que já tenha instalado no sistema operacional o Java JDK e o NetBeans.

Ferramenta 1 -NetBeans 8.0

Executar uma macro clicando em um botão da Barra de Ferramentas de Acesso Rápido

Curso online de Fundamentos em Android. Plano de Estudo

PROGRAMACAO E INTEGRACAO DE JOGOS I

Tutorial rápido CMAP TOOLS

Manual SIGOSMS Aplicação de Gerenciamento e Envio SMS

Procedimento Instalação Impressora Servidor de impressão/quota

Tutorial de instalação e configuração do Software Giga VMS

Manual do Utilizador. Share Point One Drive

Desenvolvendo aplicações para TV Digital e Interativa utilizando JAVA TV

A CASA DO SIMULADO DESAFIO QUESTÕES MINISSIMULADO 30/360

Roteiro. Módulo IV 3 horas. A arquitetura de um sistema digital de televisão Padrões de Middleware DASE MHP ARIB GINGA

DISTRIBUINDO SUA APLICAÇÃO

Fábrica de Noobs Reloaded Sistemas Operacionais Kali Linux

Ubiratam Carvalho de Paula Junior Rafaelli de Carvalho Coutinho

Linguagem de Programação II Programação Orientada a Objetos. Ambientes de Programação

Modem MIN-410 Criando o aplicativo Hello World, executando com debug, subindo para o modem e habilitando comandos AT dentro do aplicativo

O manual do Kaffeine. Jürgen Kofler Christophe Thommeret Mauro Carvalho Chehab

Como acessar as imagens via Navegador Google Chrome

5 O Fomatador NCL Xlet

Java TV: Visão Geral

IDES E PROGRAMAÇÃO. Prof. Dr. Cláudio Fabiano Motta Toledo PAE: Maurício A Dias

POO Documentation. Release 1.0. Felipe Dau e Francisco Pereira Junior

Agenda da Aula. Reuso de Software. Tipos de Reuso. Potenciais Problemas. Vantagens de Reuso. Introdução a Reuso de Software

3 Ferramenta Proposta 3.1. Objetivos

comum apresentando, em caráter informativo, os três padrões anteriormente mencionados.

Como acessar as imagens via Navegador Mozilla Firefox

Aula 2 Introdução a Linguagem Java

UMA INTERFACE DE GERENCIAMENTO DE REDES DEFINIDAS POR SOFTWARE

Tutorial de Instalação Plataforma de Mídia Digital Interativa

INTRODUÇÃO AO USO DO DEV C++ Disciplina: Introdução à Ciência da Computação Prof. Modesto Antonio Chaves Universidade estadual do Sudoeste da Bahia

Lojamundi Tecnologia Sem Limites br

Fábrica de Noobs Reloaded Sistemas Operacionais Instalando e Utilizando o VirtualBox

Desenvolvendo aplicações Java

Sobre o Visual C

Java Standard Edition (JSE)

PROGRAMAÇÃO PARA DISPOSITIVOS MÓVEIS

Classes e Objetos. Prof. Fernando V. Paulovich 9 de agosto de 2010

Administração Central 2019 São Paulo

Acesso através do Navegador Mozilla Firefox

Uso do Easy Interactive Tools

Laboratório 01 NetBeans

Personalizando o seu PC

Como acessar as imagens via Navegador Internet Explorer

Linguagem de Programação IV Implementação 01

Como acessar as imagens via Navegador Safari

INFORMÁTICA APLICADA AULA 05 WINDOWS XP

Tutorial 1 Configuração Apache Tomcat no NetBeans 8.0 (passo a passo)

Capítulo 02: Cadastro de Alunos

O Java em Sistemas Embarcados

Procedimentos para Instalação do Sisloc (Estação de Trabalho) versão

SERVIÇO DE LOCALIZAÇÃO INFORMAÇÕES GERAIS

Manual do Usuário Linux Educacional 6.0 C3SL

Interfaces Gráficas com Swing. Professor Leonardo Larback

Como adicionar câmera IP ao Gravador Digital de Vídeo

MANUAL DO USUÁRIO - APP MONIVOX ROIP

Procedimento Operacional Padrão nº 16 Anexo I 1. CONFIGURAÇÕES DO SISTEMA PARA IMPORTAÇÃO DE ARQUIVOS MULTIMÍDIA

Caros Usuários Siga Brasil,

Manual de Compilação/Execução da Aplicação SmartHome

5 Trabalhos Relacionados

Interfaces Gráficas (GUIs) em Java usando Swing Parte I - O básico

PROGRAMAÇÃO PARA DISPOSITIVOS MÓVEIS

WINTHOR UPGRADE VERSÃO 2

Tutorial da ferramenta de modelagem ASTAH (Versão resumida) Prof. Moacyr Franco Neto

MANIPULAÇÃO DE EVENTOS

Figura 1: Eclipse criação de um Dynamic Web Project

Universidade Federal da Bahia Instituto de Matemática Departamento de Ciência da Computação

AULA 2 VISÃO BÁSICA DE CLASSES EM PHP

Programação Orientada a Objetos (utilizando C#) Professor Emiliano S. Monteiro Versão 12 Out/2016.

As principais contribuições do presente trabalho são as seguintes:

Termostato Web CTR-10X. Termostato Web. Controlador de Temperatura com Acesso Remoto. Modelos CTR-101 e CTR-102. Tutorial ThingSpeak

Manual de instalação, configuração e utilização do Enviador XML

Esse tutorial auxiliará o usuário a estabelecer conexão via SFTP com o servidor da Inflexion, e assim enviar ou receber arquivos.

NOÇÕES DE INFORMÁTICA ALISSON CLEITON MÓDULO III

PROGRAMAÇÃO ESTRUTURADA E ORIENTADA A OBJETOS

5 Integração da Ferramenta de Ajuste com Exibidores de Conteúdo

MANUAL DE INSTALAÇÃO. LSoft Gestão Empresarial

Como configurar cópia de segurança automática do banco de dados usando a ferramenta SQL Backup and FTP?

Transcrição:

Aplicações para TV Digital em Java Como começar a desenvolver? Manoel Marques Neto, Lile Palma Hattori e Sylvio Siqueira Silva Uma das principais vantagens da chegada da TV Digital no país é a possibilidade do aumento da interatividade entre o telespectador e a televisão através do fornecimento de serviços como jogos, vídeo sob demanda, compras através da TV, acesso à internet, canais interativos, dentre outros. Todos esses novos serviços geram uma demanda por desenvolvimento de aplicações específicas para a TV Digital. Esse é um novo mercado de software que surge com características particulares do ambiente de TV e pode ser uma grande oportunidade aos desenvolvedores que se interessam por novas tecnologias. Os aplicativos interativos devem ser construídos com a preocupação de funcionar de forma eficiente no ambiente de TV Digital. Assim como outros sistemas multimídia, esses aplicativos precisam atender a determinados requisitos, como portabilidade, reuso de componentes, adaptabilidade das interfaces às diversas plataformas e confiabilidade. Este artigo tem como objetivo apresentar os primeiros passos para construir aplicações em Java para o ambiente de TV Digital, chamadas de Xlets. Para isso, serão apresentados alguns conceitos sobre o tema, algumas APIs de desenvolvimento e exemplos ilustrativos. Infra-estrutura O primeiro passo para desenvolver uma aplicação para TV Digital é a escolha da infra-estrutura de apoio. É preciso determinar o ambiente em que as aplicações serão executadas, que implica na adoção de um padrão de transmissão e de um middleware que oferecerá suporte às aplicações. Como o Brasil ainda não determinou qual será o seu ambiente, é possível escolher dentre os já existentes para iniciar o desenvolvimento. Para o padrão de transmissão americano, o ATSC, existem os middlewares DASE e ACAP (em desenvolvimento), porém, nenhum deles ainda foi adotado oficialmente pela ATSC. Uma implementação parcial do DASE encontra-se disponível para download no site http://www.dase.nist.gov, que pode ser usada para testar a maior parte das funcionalidades de um Xlet. O padrão europeu DVB adotou oficialmente o middleware MHP. Sua especificação, que atualmente está na versão 1.1.1, encontra-se disponível no site http://www.mhp.org. Existem algumas implementações parciais do MHP disponíveis para download, como o Xletview (http://xletview.sourceforge.net) e o OpenMHP (http://www.openmhp.org). Para testar a execução das nossas aplicações, adotaremos o Xletview que, atualmente, é o mais completo, com cerca de 65% da especificação do MHP já implementada. Frameworks de apoio às aplicações Além da definição de uma infra-estrutura, a construção de aplicações para TV Digital também requer a adoção de alguns frameworks de suporte à implementação. Para esse tutorial, especificamente, utilizamos dois: o JavaTV e o HAVi Level 2 UI. JavaTV É uma API desenvolvida pela Sun para dar suporte ao desenvolvimento de aplicações para TV Digital e encontra-se disponível em http://java.sun.com. Foi desenvolvida para prover acesso em receptores de televisão digital às seguintes funcionalidades: fluxo de áudio e vídeo, acesso condicional, acesso a dados nos canais de transmissão, acesso aos dados do serviço de informações, controle de sincronizador de canais e gerenciamento do ciclo de vida das aplicações. Na Tabela 1 encontram-se os principais pacotes desta API e suas respectivas funções. Pacote javax.tv.carousel Javax.tv.locator javax.tv.media Função Provê acesso a arquivos de broadcast e diretórios de dados. Provê forma de acesso a dados e recursos. Provê controles e eventos para manipulação de mídia no ambiente

de tempo real da televisão. javax.tv.net Provê acesso a datagramas do protocolo IP. Java.xtv.service Provê mecanismos para acesso à base de dados do serviço de informações (SI). javax.tv.útil Provê APIs para criar e manipular eventos temporizados. javax.tv.xlet Provê a interface usada pelas aplicações para comunicação. Tabela1. Principais pacotes do JavaTV e suas respectivas funções. Para executar as aplicações que serão mostradas a seguir não é necessário o download dessa API, pois ela já está incorporada no pacote do Xletview. HAVi UI O JavaTV oferece pouco suporte à construção de interfaces para aplicações. Por isso, o HAVi UI é utilizado para dar suporte à implementação de uma interface amigável ao telespectador, mas com a preocupação de mantê-la compatível com a capacidade de armazenamento de um set-top box. A HAVi Level 2 User Interface permite que aplicações escritas em Java determinem a capacidade e as limitações de um dispositivo para prover uma interface, exibir componentes e manipular o áudio. É formada por parte da biblioteca gráfica AWT (Abstraction Windows Toolkit), definida na API Java 1.1, e algumas extensões compostas por pacotes e classes próprias. A biblioteca AWT do Java, que permite às aplicações gerar saídas gráficas e receber eventos como entrada, possui diversas classes que não são amigáveis ao ambiente de TV. Por isso HAVi UI não a incorpora por completo, o que não impede o programador de utilizá-la em sua totalidade. Porém, é preciso estar claro que, nesses casos, os sistemas que dão suporte à HAVi podem apresentar comportamentos inesperados no momento da execução por não estarem previamente determinados. Este é um framework parcialmente disponibilizado pelo Xletview, pois é proprietário e para tê-lo em sua versão completa é necessário comprá-lo. A versão incompleta é bastante limitada, mas oferece as principais funções para o desenvolvimento de uma aplicação simples para TV como suporte ao uso do controle remoto, à manipulação de pixels com formatos variados e à construção de componentes amigáveis. Aplicação para TV Digital No ambiente da televisão digital, o componente que representa a interface da aplicação é chamado de Xlet. Esse aplicativo tem seu ciclo de vida monitorado e controlado pelo sistema em que se encontra. O trecho de Listagem 1 exibe a interface Xlet. Listagem 1. Interface Xlet.java public interface Xlet { void destroyxlet( boolean unconditional ) throws void initxlet( XletContext context ) throws void pausexlet(); void startxlet() throws XletStateChangeException; XletStateChangeException; XletStateChangeException; Para que o funcionamento do ciclo de vida de um Xlet seja facilmente compreendido, pode-se fazer um comparativo entre ele e um Applet. Ambos apresentam semelhanças em seus ciclos de vida. As transições de um Applet são representadas pelos métodos init(), start(), stop() e destroy(). Os métodos que representam as transições possíveis em um Xlet são initxlet(), startxlet(), pausexlet() e destroyxlet(). O que diferencia um Applet de um Xlet são os estados pausado e parado. O primeiro espera que o Xlet libere a máxima quantidade de recursos que esteja utilizando. O segundo apenas é atingido se o usuário sair da página em que o Applet está sendo executado, sem manter preocupações quanto à utilização de recursos. A Figura 1 mostra o diagrama de estados de um Xlet e de um Applet. initxle Inicializad pausexlet() Pausad init( Inicializa stop () Parad destroyxle Destruíd destroyxlet startxlet () Ativo destroyxlet( pausexlet () start() Ativo start stop( ) Destruído destroy()

Figura 1. Ciclo de vida de um Xlet e de um Applet Construindo um Hello World Para construir uma aplicação para TV Digital, é preciso implementar a interface Xlet, como mostrado na Listagem 2. Como o padrão de middleware que escolhemos foi o MHP, é preciso, também, criar uma cena, um contexto e, pelo menos, um componente visual para que algo seja mostrado na tela. A cena, uma instância do objeto HScene, é o container principal que agrega todos os objetos mostrados na tela. O contexto representa uma interface que permite ao Xlet saber informações sobre o ambiente em que está inserido. O componente visual é um objeto que está presente em uma cena e pode ser um botão, uma caixa de texto, um container, uma lista, dentre outros. No método initxlet() é inicializado o contexto da aplicação e criada a cena. Essa cena é obtida através do HSceneFactory e pode ter seu tamanho ajustado conforme a necessidade do desenvolvedor. Os componentes que farão parte da cena também são inicializados e têm suas propriedades configuradas. Por fim, os componentes são adicionados à cena. O startxlet() é o método chamado, após o initxlet(), para mostrar a aplicação na tela. Não há necessidade de implementar o pausexlet() para o Hello World. Por fim, o destroyxlet() deve notificar o fim da execução ao contexto. É importante manter o construtor de uma aplicação que implemente a interface Xlet sempre vazio como boa prática de programação. Caso contrário, o código que estiver no construtor será executado quando a aplicação for instanciada pelo gerente de aplicações do middleware, ferindo a idéia do método initxlet(). Listagem 2. Construindo um Hello World. import java.awt.color; import java.awt.font; import org.havi.ui.hscene; import org.havi.ui.hscenefactory; import org.havi.ui.hscreen; import org.havi.ui.hstatictext; import xjavax.tv.xlet.xlet; import xjavax.tv.xlet.xletcontext; import xjavax.tv.xlet.xletstatechangeexception; public class HelloWorldXlet implements Xlet { XletContext contexto; HStaticText labelhello; HScene scene; * O construtor de um Xlet deve permanecer vazio. public HelloWorldXlet() { * Método de inicialização. * Aqui deve estar a inicialização de todos os componentes * que serão usados no Xlet. public void initxlet(xletcontext contexto) throws XletStateChangeException { this.contexto = contexto; scene = HSceneFactory.getInstance().getFullScreenScene( HScreen.getDefaultHScreen().getDefaultHGraphicsDevice()); labelhello = new HStaticText("Olá Mundo!"); labelhello.setfont(new Font("Tiresias", Font.BOLD, 30)); labelhello.setbounds(150, 150, 400, 100); labelhello.setforeground(color.white); labelhello.setbackground(new Color(255, 0, 0, 150)); scene.add(labelhello); * Após inicializado, o Xlet começa a executar * quando este método é chamado. public void startxlet() throws XletStateChangeException { scene.setvisible(true);

* Caso a aplicação possa ser pausada, todos os recursos * que ela usa deverão ser liberados neste método. public void pausexlet() { * Método chamado para finalizar um Xlet. * Antes de ser finalizado, é importante liberar todos os * recursos que a aplicação esteja usando. public void destroyxlet(boolean condicao) throws XletStateChangeException { contexto.notifydestroyed(); Para executar o HelloWorld, basta inicializar o Xletview com um duplo clique no arquivo Xletview.jar ou através do command com a linha de comando java jar Xletview.jar (pressupondo-se que está no diretório em que o arquivo xletview.jar se encontra) e seguir os passos: 1 Clique em Applications e depois em Manage Applications... (ver Figura 2); Figura 2. Passo 1. 2 Clique em New Application e preencha os campos Name com o nome que deseja dar à aplicação, Path com o caminho para o.class do seu código e Xlet com o nome do.class (ver Figura 3); Figura 3. Passo 2. 3 Deverá aparecer o nome da sua aplicação no menu Applications. Para executá-la, basta clicar nela (ver Figura 4).

Figura 4. Passo 3. O resultado do código apresente na Listagem 2 está ilustrado na Figura 5. Pode-se ver apenas uma caixa de texto estática com o conteúdo Olá Mundo!, mas nenhum vídeo ou áudio como plano fundo. Figura 5. Aplicação que representa a classe HelloWorldXlet. Para adicionar algum vídeo é preciso editar o arquivo channels.xml localizado na pasta config do Xletview. Dentro da tag <channel>, edita-se o <name> com o nome que desejar e o <media> com o caminho físico completo do vídeo, que deve ter o formato.avi. Isso permite que o vídeo seja exibido como plano de fundo enquanto a aplicação é mostrada. Aprendendo a associar o controle remoto à aplicação Agora que já foi explicado o básico para construir uma aplicação, é importante que seja mostrado como associar os eventos dos botões do controle remoto à aplicação, afinal este é o único meio de interação entre o telespectador e a TV. É preciso lembrar que não é comum existir mouse ou teclado para interagir com a televisão, portanto todo o funcionamento da aplicação deve estar associado a um controle remoto no modelo universal. Este modelo apresenta algumas diferenças em relação aos modelos das TVs analógicas e a mais interessante delas é a existência de quatro botões coloridos, como se pode observar na Figura 5. Esses quatro botões coloridos são bastante explorados para permitir a interatividade entre o telespectador e a aplicação. Por isso, foi elaborado, na Listagem 3, um exemplo que associa esses quatro botões a mudanças no estado

da aplicação. Assim como no exemplo do Hello World, no initxlet() da aplicação obtém o contexto. Todas os componentes envolvidos na aplicação são inicializados e configurados com as preferências, além de adicionado um keylistener para cada botão. Os componentes de botão e texto já configurados são adicionados ao HContainer, que por sua vez é adicionado a HScene. No método starxlet() a cena é configurada como visível através do método setvisible(true). Em seguida um dos componentes da tela chama o requestfocus() para que a o foco fique na aplicação. No método keypressed() são tratados os eventos de quando os botões do controle remoto são pressionados. No nosso exemplo serão tratados apenas os botões coloridos. Através do código do evento é possível saber qual o botão pressionado no controle remoto e então efetuar as mudanças na cena. Para que essas mudanças surjam efeito, é chamado o método repaint() do HScene correspondente. Listagem 3. Associando eventos do controle remoto à aplicação. import java.awt.color; import java.awt.font; import java.awt.event.keyevent; import java.awt.event.keylistener; import org.havi.ui.hcontainer; import org.havi.ui.hscene; import org.havi.ui.hscenefactory; import org.havi.ui.hscenetemplate; import org.havi.ui.htext; import org.havi.ui.htextbutton; import xjavax.tv.xlet.xlet; import xjavax.tv.xlet.xletcontext; import xjavax.tv.xlet.xletstatechangeexception; public class Exemplo implements Xlet, KeyListener { XletContext contexto; HScene cena = null; HContainer container = null; HTextButton botaovermelho = null; HTextButton botaoverde = null; HTextButton botaoamarelo = null; HTextButton botaoazul = null; HText texto = null; * Método de inicialização. * Aqui deve estar a inicialização de todos os componentes * que serão usados no Xlet. public void initxlet(xletcontext contexto) throws XletStateChangeException { // guarda o contexto this.contexto = contexto; // cria um template para requerer uma cena HSceneTemplate template = new HSceneTemplate(); template.setpreference(hscenetemplate.scene_screen_dimension, new org.havi.ui.hscreendimension(1, 1), HSceneTemplate.REQUIRED); template.setpreference(hscenetemplate.scene_screen_location, new org.havi.ui.hscreenpoint(0, 0), HSceneTemplate.REQUIRED); // requere uma cena com o template determinado acima cena = HSceneFactory.getInstance().getBestScene(template); // configura as propriedades do botaovermelho botaovermelho = new HTextButton("Vermelho"); botaovermelho.setbackground(color.red); botaovermelho.addkeylistener(this); botaovermelho.setbounds(20,100,150,50); botaovermelho.requestfocus(); // configura as propriedades do botaoverde botaoverde = new HTextButton("Verde"); botaoverde.setbackground(color.green); botaoverde.addkeylistener(this); botaoverde.setbounds(180,100,150,50); // configura as propriedades do botaoamarelo botaoamarelo = new HTextButton("Amarelo"); botaoamarelo.setbackground(color.yellow);

botaoamarelo.addkeylistener(this); botaoamarelo.setbounds(340,100,150,50); // configura as propriedades do botaoazul botaoazul = new HTextButton("Azul"); botaoazul.setbackground(color.blue); botaoazul.addkeylistener(this); botaoazul.setbounds(500,100,150,50); // configura as propriedades do texto texto = new HText("Exemplo de Xlet"); texto.setfont(new Font("Tiresias", Font.BOLD, 20)); texto.setbackground(color.white); texto.setbounds(170,170,400,200); // adiciona os componentes ao container container = new HContainer(0,0,800,600); container.add(botaovermelho); container.add(botaoverde); container.add(botaoamarelo); container.add(botaoazul); container.add(texto); //adiciona o container à cena cena.add(container); * Após inicializado, o Xlet começa a executar * quando este método é chamado. public void startxlet() throws XletStateChangeException { cena.setvisible(true); botaovermelho.requestfocus(); * Caso a aplicação possa ser pausada, todos os recursos * que ela usa deverão ser liberados neste método. public void pausexlet() { * Método chamado para finalizar um Xlet. * Antes de ser finalizado, é importante liberar todos os * recursos que a aplicação esteja usando. public void destroyxlet(boolean condicao) throws XletStateChangeException { HSceneFactory.getInstance().dispose(cena); contexto.notifydestroyed(); * Método no qual é tratado o evento gerado por um botão. * Neste exemplo apenas os botões coloridos do controle * universal são usados. public void keypressed(keyevent evento) { if (evento.getkeycode() == 403){ texto.setbackground(color.red); botaovermelho.requestfocus(); else if (evento.getkeycode() == 404){ texto.setbackground(color.green); botaoverde.requestfocus(); else if (evento.getkeycode() == 405){ texto.setbackground(color.yellow); botaoamarelo.requestfocus(); else if (evento.getkeycode() == 406){ texto.setbackground(color.blue); botaoazul.requestfocus(); cena.repaint(); * Deve permanecer vazio. public void keyreleased(keyevent evento) {

* Deve permanecer vazio. public void keytyped(keyevent evento) { O resultado do código elaborado na Listagem 3 pode ser observado na Figura 6. Essa aplicação possui cinco estados possíveis: o inicial (a), em que nenhum botão foi pressionado, portanto a caixa de texto central está com a cor branca; e os estados (b), (c), (d) e (e), em que os botões amarelo, vermelho, azul e verde do controle remoto foram pressionados respectivamente. É importante salientar que os botões coloridos que aparecem na tela existem apenas para ilustrar qual dos botões do controle remoto foi pressionado. Eles não podem ser acionados diretamente. (a) (c) (b) (d) (e) Figura 6. Estados da aplicação associados aos botões coloridos do controle remoto.

Conclusão Neste tutorial foi apresentado um exemplo de aplicação de forma a ajudar um iniciante a explorar esse novo paradigma tecnológico, que é a TV Digital. É importante lembrar que programar para a TV é bastante diferente de programar para PC e que existem regras no ambiente de TV que precisam ser seguidas. Um exemplo é que uma aplicação para TV deve ser o mais confiável possível, pois o telespectador não está acostumado com erros de execução, que são comuns nas aplicações para PC. Uma dica para quem deseja aprender mais sobre aplicações para TV Digital é o site www.interactivetvweb.org. Lá estão disponíveis tutoriais que abordam os aspectos mais importantes dessa nova tecnologia. Referências ATSC - http://www.atsc.org/ DASE - http://www.ncsl.nist.gov/dase/ DVB - http://www.dvb.org HAVi - http://www.havi.org MHP - http://www.mhp.org Java TV API - http://java.sun.com/products/javatv/ XletView - http://xletview.sourceforge.net/ Interactive TV Web - http://www.interactivetvweb.org Manoel Carvalho Marques Neto (manoelnetom@bol.com.br) é mestre em Redes de Computadores pela Universidade Salvador UNIFACS. Trabalha com desenvolvimento de aplicações em para dispositivos móveis. É professor da Faculdade Ruy Barbosa e Universidade Salvador - UNIFACS. É também pesquisador do CEPERC Centro de Pesquisas em Redes de Computadores UNIFACS. Lile Palma Hattori (lhattori@gmail.com) é estudante de Ciência da Computação pela Faculdade Ruy Barbosa em Salvador-BA. Trabalha com desenvolvimento de aplicações em Java na Fábrica de Software da Unitech Tecnologia de Informação Ltda. Sylvio Siqueira Silva (sylvio@frb.br) é estudante de Ciência da Computação pela Faculdade Ruy Barbosa em Salvador- BA. Trabalha com desenvolvimento de aplicações em Java na Fábrica de Software da Unitech Tecnologia de Informação Ltda.