WebMobile 24
Esse artigo faz parte da revista WebMobile 24. Clique aqui para ler todos os artigos desta edição

Java Mobile

Desenvolvendo uma Aplicação JavaME de Tradução e envio de Mensagem SMS

Parte 1: Desenvolvendo o Editor e Tradutor de Mensagens utilizando Serviços HTTP

 

LEAD: BOX

De que se trata o artigo:

Esta é uma série que trata da utilização de serviços disponíveis na web (HTTP) em aplicações JavaME. Será explicado o passo a passo da montagem de um sistema tradutor e lançador de mensagens de texto (SMS) traduzidas. Neste primeiro artigo veremos a utilização de serviços via HTTP com o propósito de traduzir mensagens de texto a partir de um celular.

Para que serve:

O artigo servirá para ensinar e orientar os desenvolvedores a programar sistemas em JavaME que utilizem diversos serviços web disponíveis na internet. O sistema é simples, porém bastante útil. Utilizando um serviço de tradução disponível na internet, o sistema irá traduzir as mensagens de uma língua para outra (ex: português para italiano, etc).

Em que situação o tema é útil:

O tema é útil para analistas que desejam que suas aplicações JavaME desfrutem de serviços disponíveis na internet. O sistema é útil para comunicação via SMS com textos escritos em diferentes línguas.

 

Nos dias de hoje, a comunicação possui um forte papel nas execuções de tarefas, sejam elas a nível corporativo ou de entretenimento. A tecnologia atual permite que a comunicação fique num patamar extremamente elevado. Com a internet, o conceito de globalização se tornou bem mais visível a todos, possibilitando que a troca de informações entre instituições ocorra de forma ágil e eficiente. Além disso, a diversidade de dispositivos (muitos deles portáteis) que acessam a internet é extremamente grande.

Olhando o cenário atual, percebemos que para nós, brasileiros, uma grande dificuldade em nos comunicar com o restante do mundo ainda é o idioma. Nosso idioma, o português, é pouco falado ao redor do mundo. Além disso, temos ainda uma certa dificuldade em aprender outros idiomas mais falados, como o Inglês. No cenário globalizado, essa situação não pode ser mais tolerada. No dia a dia, estamos cercados por informações nas mais diferentes línguas, seja para entretenimento (ex: vários jogos estão disponíveis apenas no idioma Inglês ou outras línguas diferentes da nossa), pesquisa (ex: livros técnicos ou artigos são normalmente escritos em outras línguas) ou negócio (a língua universal ainda é o inglês, mas conhecer outras línguas nos traz uma vantagem no mercado).

  Sendo assim, neste artigo iremos abordar uma solução alternativa e prática para o problema de comunicação em diferentes idiomas: desenvolveremos um sistema que funcionará em um aparelho celular que é capaz de traduzir mensagens de texto, para que estas mensagens possam ser usadas posteriormente para o envio de mensagens SMS (Short Message Service) para outro aparelho celular. Para isso, vamos utilizar as seguintes tecnologias JavaME: Conexão Genérica (GCF) e a API de mensagens (Wireless Messaging API – WMA) para criação e manipulação de SMS. Essas tecnologias estão disponíveis na grande maioria dos celulares do mercado. Mais adiante detalharemos mais a respeito delas.

Um ponto importante é a reusabilidade: ao invés de desenvolvermos todo um algoritmo de tradução de línguas, podemos utilizar um serviço especializado em traduções já existente na internet: Ferramentas de Idiomas do Google.

  Esta série será dividida em duas partes. Neste primeiro artigo, será abordada a interface (comunicação) da aplicação proposta com o Google Tradutor para tradução de mensagens de texto. O objetivo é simplesmente traduzir um texto de um idioma para outro. No segundo, serão detalhados os conceitos relacionados a SMS, além da construção da funcionalidade responsável pelo da mensagem traduzida via SMS para outros dispositivos.

A Aplicação Proposta

A aplicação que iremos desenvolver trata-se de um sistema que permite que os usuários escrevam textos numa determinada língua (português, espanhol, inglês, etc) e em seguida optem por traduzir este texto para outra língua (português, espanhol, inglês, etc). Neste momento, o sistema irá acessar o sistema de tradução do Google (http://translate.google.com.br/translate_t#) que irá retornar o texto traduzido para o aplicativo, que o exibirá ainda em forma editável (isso é interessante, pois o usuário pode querer ajustar algumas palavras ou nomes que o Google tenha se equivocado). Por fim, o usuário pode optar por enviar o texto traduzido para outro dispositivo celular.

Conforme mencionado, tanto na tradução quanto no envio do SMS, será utilizada a API de Conexão Genérica do JavaME (GCF). Para o acesso ao serviço de tradução, utilizaremos a interface HttpConnection. Para o envio do SMS, utilizaremos a interface MessageConnection. A criação e manipulação dos SMS’s serão realizadas pela API de mensagem WMA (JSR-120). A Figura 1 demonstra o fluxo e uso das APIs no sistema.

 

imagem

Figura 1. Fluxo de uso das APIs no sistema

Seleção de Tecnologias

Antes da construção da aplicação proposta, precisamos verificar se é possível e viável a criação de um sistema deste tipo para aparelhos celulares. Além disso, deve ser analisada qual a melhor maneira de se implementar esta solução. São dois pontos a serem analisados: a tradução e o envio da mensagem.

Em relação ao primeiro ponto, a tradução, existe a possibilidade de o próprio sistema traduzir internamente o texto a ser enviado, mas isto pode ser inviável devido a limitações de armazenamento e processamento dos celulares. Este é outro grande motivo para reutilizar um serviço que já existe, ou seja, a Ferramenta de Idiomas do Google. Para isto, os dispositivos (celulares) devem possuir a API de conexão a HTTP (HttpConnection). Caso o dispositivo não possua esta conexão, o dispositivo não deve permitir a instalação da aplicação (uma mensagem deve ser exibida para o usuário informando do problema).

Para o segundo ponto, criação e envio de SMS, diversos modelos de celulares (talvez a maioria) possuem a API de criação/manipulação de SMS (WMA) e a API de conexão de mensagens (MessageConnection). Estas APIS’s são requeridas para o funcionamento do sistema. Caso o dispositivo (celular) não possua esta API, o sistema pode ser instalado somente para o uso do tradutor. Envios de mensagens não serão possíveis neste caso. No momento da instalação, dispositivo deve notificar o usuário sobre a ausência desta API, informando que a aplicação não funcionará corretamente, visto que somente parte da aplicação funcionará (tradução).

Vale ressaltar que a grande maioria dos celulares possui implementação das APIs necessárias para o funcionamento deste sistema. Isto torna a aplicação bem aplicável ao mercado atual.

Muitos leitores já devem estar se questionando “como fazer para não permitir a instalação do aplicativo caso o celular não tenha tais APIs”? Veremos mais adiante como configurar o aplicativo para certas validações antes da instalação.

  A partir de agora, iremos abordar toda a parte de tradução, ou seja, a comunicação da aplicação com o serviço HTTP do Google. Como dito anteriormente, a parte de envio de SMS será abordade na segunda parte do artigo.

Ferramentas de Tradução do Google

Trata-se de um conjunto de aplicativos mantido pelo Google que auxiliam usuários a traduzir textos e sites para diferentes línguas. Estes aplicativos ficam disponibilizados na Web no endereço http://www.google.com.br/language_tools?hl=pt-BR. As principais aplicações são o tradutor de Web Sites e o Tradutor de Textos.

O Google atua fortemente em melhorias desses serviços. Isto o torna um serviço de grande confiabilidade. Mesmo assim, como todo tradutor automático, é sempre necessário dar uma validada no texto traduzido, visto que o Google pode se equivocar em certas palavras ou trechos. Por esse motivo a aplicação não enviará diretamente o texto traduzido. Antes, o usuário ainda poderá editá-lo com objetivo de ajustar qualquer erro de tradução.

API de Conexão Genérica (GCF) e a HttpConnection

O leitor já deve ter percebido que o serviço de tradução que referimos (ferramentas de idiomas do Google) é um sistema voltado para usuários “humanos”, ou seja, existe toda uma interface “Homem – Máquina” implementada. A pagina é voltada para pessoas. Mas isso não impede de criarmos sistemas que utilizam esse serviço. Basta utilizarmos o protocolo HTTP.

  Alguns sites, a fim de evitar acesso por máquinas e por conseqüência a sobrecarga dos servidores, forçam que o usuário informe um conjunto de letras em uma imagem qual um computador não consegue ler. Isto restringe o acesso a tais sistemas por meio automático e somente pessoas conseguem acessá-los. No caso das ferramentas de idiomas do Google ainda não existe esta restrição. Caso passe a existir, o sistema teria que ser modificado para que o usuário informe o texto disponibilizado na imagem a cada chamada do serviço.

Os acessos de aplicações para serviços de http necessitam que essas aplicações conheçam o protocolo HTTP. Não é foco deste artigo explicar este protocolo a fundo. Mas é necessário que o leitor saiba algumas informações para um melhor entendimento. Este protocolo baseia-se em pedidos e respostas entre aplicações cliente/servidor. O exemplo mais comum é a interação entre um navegador web (cliente) e um servidor.

O pedido resume-se a três seções: método (não confundir com método de uma classe Java), cabeçalho e corpo.

Existem três métodos de pedido:

·         GET – o corpo do pedido se mescla na URL, ou seja, os valores das variáveis (que o servidor aguarda) são enviadas junto do endereço (URL). Normalmente pode haver limite de tamanho, o que pode ocasionar perda de dados do pedido.

·         POST – os dados são enviados para o servidor separadamente da URL. Este método não possui limite de tamanho. Além disso, é um meio mais seguro se comparável com o GET.

·         HEAD – solicita somente meta-informações de um recurso.

 

O cabeçalho é utilizado para mandar informações extras do pedido, como configuração do cliente, requisição, etc. Existem diversos cabeçalhos possíveis que podem ser configurados. A lista de cabeçalhos e suas especificações podem ser obtidas no endereço http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html . Alguns cabeçalhos são:

·         Accept – Pode ser usado para especificar certos tipos de mídias que podem ser utilizados pela Resposta (response), como por exemplo, imagens.

·         Authorization – utilizado para autenticação (BASIC e DIGEST)

·         Content-Type – Indica o tipo de mídia (texto, binário, etc) utilizado no corpo das mensagens.

 

Finalmente o corpo do pedido. Como já era de se esperar, o corpo consiste nas informações enviadas pelo pedido. Dependendo do método utilizado, as informações do corpo são enviadas pela URL (GET) ou por fluxo separado (POST).

A resposta também consiste em três partes: status, cabeçalho e corpo. Não é foco do artigo explicar a resposta, visto que basicamente o que interessa para a aplicação cliente é o status e o corpo.  O status indica a situação da resposta (HTTP_OK, BAD_REQUEST, ...). Com o status poderemos saber se ocorreu erro ou não na resposta antes de processar todo o corpo da mensagem. O corpo é a informação desejada (pagina web, imagem, etc).

O protocolo HTTP possui vastas informações a ser detalhada. Mais informações podem ser obtidas no endereço http://pt.wikipedia.org/wiki/HTTP.

  O acesso a Http e outras conexões pelo JavaME é realizada pela API de Conexão Genérica ou Generic Connection Framework (no inglês). Ela é conhecida como GCF. A GCF é um conjunto de classes (API) que permite aos desenvolvedores criar sistemas JavaME com diversos tipos de conexão. Em outras palavras, é ela que possui as classes (na verdade são uma interfaces) de conexão HTTP, HTTPS, Socket, ServerSocket, Comm, Datagram, etc.

Mas isto não significa que qualquer celular que possua a GCF possa utilizar qualquer conexão. Isto porque a especificação diz que algumas conexões são obrigatórias e outras são opcionais. Na prática, isto significa que um modelo de celular pode ter somente a conexão de Http, enquanto outros modelos podem ter diversas outras conexões (Http, Socket, ...).

As conexões obrigatórias são:

·         Http (HttpConnection)

·         Https (HttpsConnection)

 

Algumas conexões opcionais:

·         UDP (UDPDatagramConnection)

·         Socket (SocketConnection)

·         Comm (CommConnection)

 

A criação de uma conexão com a GCF é realmente simples: basta informar qual o protocolo desejado e obter a interface correta para uso. A sintaxe e alguns exemplos de criação (com os protocolos em negrito) estão descritos na ...

Quer ler esse conteúdo completo? Tenha acesso completo