Buscar

Programação Para Dispositivos Móveis-Aula_10

Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original

PROGRAMAÇÃO PARA DISPOSITIVOS MÓVEIS
Aula 10- Comunicação Remota
Tema da Apresentação
CONSTRUÇÃO DE UM JOGO SIMPLES – AULA7
PROGRAMAÇÃO PARA DISPOSITIVOS MÓVEIS
*
Conteúdo Programático desta aula
Aprender como realizar a comunicação remota com servidores via HTTP;
Tema da Apresentação
CONSTRUÇÃO DE UM JOGO SIMPLES – AULA7
PROGRAMAÇÃO PARA DISPOSITIVOS MÓVEIS
*
O FRAMEWORK GENÉRICO DE CONEXÃO
Apesar das bibliotecas da plataforma Java Standard Edition para conectividade a rede possuírem recursos eficientes, devido as características limitadas de hardware, um dispositivo móvel poderia não suportar a quantidade de classes e interfaces presentes nos pacotes java.net e java.io e, por este motivo, esses pacotes foram simplificados e um framework genérico de conexão, também conhecido por GCF (Generic Connection Framework), foi desenvolvido para tratar assuntos de i/o (entrada e saída de dados) e conectividade. 
Tema da Apresentação
CONSTRUÇÃO DE UM JOGO SIMPLES – AULA7
PROGRAMAÇÃO PARA DISPOSITIVOS MÓVEIS
*
O FRAMEWORK GENÉRICO DE CONEXÃO
O GCF não tinha por objeto ser um novo conjunto de classes, mas sim proporcionar um subconjunto do JSE (Java Standard Edition) que estivesse em sintonia com as limitações e as variações que possam ser encontradas em dispositivos de aplicação MIDP, todavia, atualmente, você encontra o GCF não somente em dispositivos baseados em CLDC, como os que utilizam MIDP (Mobile Information Device Profile) e IMP (Information Module Profile), mas também em dispositivos que usam CDC (Connected Device Configuration). 
Indo além, devido à padronização do uso, você também pode encontrar o GCF em um número crescente de pacotes opcionais, incluindo aqueles que proveem acesso a arquivos, suporte a Bluetooth e smart cards.
Tema da Apresentação
CONSTRUÇÃO DE UM JOGO SIMPLES – AULA7
PROGRAMAÇÃO PARA DISPOSITIVOS MÓVEIS
*
ESTRUTURA DO FRAMEWORK GENÉRICO DE CONEXÃO (GCF)
GCF possui uma estrutura simplificada de interfaces e classes para executar fluxos de entrada e saída de dados, seja para arquivos ou conexões (como HTTP, datagramas e soquetes).
GCF provê uma abordagem genérica para conectividade 
provê um conjunto de APIs comuns para todos os tipos básicos de conectividade, seja para pacotes (blocos de dados) e para fluxos de entrada e saída (contínuos ou não).
A generalização é possível através da utilização de:
Uma interface hierárquica que pode ser estendida;
Uma fábrica de conexão;
Pela padronização da URL para indicar o tipo apropriado de conexão a ser criado.
Embora cada tipo de conexão tenha suas particularidades, para usar o GCF é muito simples, basta utilizar a classe Connector e uma URL para criar uma conexão. A classe Connector cria e abre o tipo de conexão apropriado de acordo com a URL que você especificar, desde que a URL seja suportada.
Tema da Apresentação
CONSTRUÇÃO DE UM JOGO SIMPLES – AULA7
PROGRAMAÇÃO PARA DISPOSITIVOS MÓVEIS
*
Hierarquia da Generic Connection Framework Interface
Tema da Apresentação
CONSTRUÇÃO DE UM JOGO SIMPLES – AULA7
PROGRAMAÇÃO PARA DISPOSITIVOS MÓVEIS
*
Criando uma conexão – Connection.open
Tema da Apresentação
CONSTRUÇÃO DE UM JOGO SIMPLES – AULA7
PROGRAMAÇÃO PARA DISPOSITIVOS MÓVEIS
*
Abrindo uma Conexão
O GCF suporta um grande número de tipos de conexões e as URLs são importantes para definir as regras da conexão, descrevendo a localização e o meio de acesso ao recurso desejado. O formato geral de uma URL, como definido na RFC 1738 (e depois na RFC 2396), é o seguinte:
scheme://user:password@host:port/url-path;parameters , onde:
 
scheme especifica o método ou o protocolo e define o tipo de conexão a ser usada;
user é opcional e especifica uma conta (nome de usuário);
password é opcional e especifica uma senha para uma conta;
host é o local, nome ou o endereço IP a quem se destina a conexão;
port é opcional e depende do esquema. Especifica a porta a ser utilizada na conexão;
url-path é o caminho até o recurso, depende do esquema e pode possuir parâmetros.
Tema da Apresentação
CONSTRUÇÃO DE UM JOGO SIMPLES – AULA7
PROGRAMAÇÃO PARA DISPOSITIVOS MÓVEIS
*
Abrindo uma Conexão - Observações
Note que os delimitadores são requeridos em conformidade com cada parte do formato da URL e que os parâmetros opcionais devem contê-los quando estiverem presentes. Segue um exemplo de URL com parte dos parâmetros opcionais e respectivos delimitadores:
	ftp://aluno:senha@portal.estacio.br/arquivos
 Na API do GCF, a classe Connector define três modos para abrir a conexão, são eles:
open(String url)
open(String url, int mode)
open(String url, int mode, boolean timeouts)
A variável url descreve a URL para onde a conexão será criada. A variável mode descreve a forma como a conexão acontece, ou seja, READ, WRITE ou READ_WRITE (modo padrão). A variável timeouts indica que você quer ser avisado acerca de timouts (InterruptedIOException), desde que a conexão permita tal notificação (o aviso, por padrão, é desativado, ou seja, falso).
Tema da Apresentação
CONSTRUÇÃO DE UM JOGO SIMPLES – AULA7
PROGRAMAÇÃO PARA DISPOSITIVOS MÓVEIS
*
Qual Conexão usar
A forma mais comumente utilizada deste método é a primeira, ou seja, open(String url):
Tema da Apresentação
CONSTRUÇÃO DE UM JOGO SIMPLES – AULA7
PROGRAMAÇÃO PARA DISPOSITIVOS MÓVEIS
*
Os métodos da classe Connector
A classe Connector também possui alguns métodos de conveniência para criação de vários tipos de fluxo de entrada e saída:
static DataInputStream openDataInputStream(String name)
static DataOutputStream openDataOutputStream(String name)
static InputStream openInputStream(String name)
static OutputStream openOutputStream(String name)
Como esses métodos são estáticos, você consegue utilizar os objetos de fluxo de entrada e saída diretamente. 
// Create an InputStream
String url = "socket://portal.estacio.br:80";
InputStream s = (InputConnection)Connector.openInputStream(url);
Tema da Apresentação
CONSTRUÇÃO DE UM JOGO SIMPLES – AULA7
PROGRAMAÇÃO PARA DISPOSITIVOS MÓVEIS
*
Exemplos de conexões – classe Connector
Criando uma conexão via soquete (SocketConnection):
String url = "socket://portal.estacio.br:80";
SocketConnection c = (SocketConnection)Connector.open(url);
Criando uma conexão via HTTP (HttpConnection):
String url = "http://portal.estacio.br/portal";
HttpConnection c = (HttpConnection)Connector.open(url);
Criando uma conexão a um arquivo de recurso (Foundation Profile e J2SE):
String url = "file:///myResourceFile.res";
InputConnection c = (InputConnection)Connector.open(url);
Criando uma conexão a um arquivo de recurso (FileConnection) (JSR 75):
String url = "file:///myResourceFile.res";
FileConnection c = (FileConnection)Connector.open(url);
Criando uma conexão via Datagrama UDP (DatagramConnection):
String url = "datagram://portal.estacio.br:12345";
UDPDatagramConnection c = (UDPDatagramConnection)Connector.open(url);
Tema da Apresentação
CONSTRUÇÃO DE UM JOGO SIMPLES – AULA7
PROGRAMAÇÃO PARA DISPOSITIVOS MÓVEIS
*
Os Scheme definidos pela JCP
Tema da Apresentação
CONSTRUÇÃO DE UM JOGO SIMPLES – AULA7
PROGRAMAÇÃO PARA DISPOSITIVOS MÓVEIS
*
Fechando uma conexão
Para fechar uma conexão basta chamar o método close. No exemplo a seguir, assumindo que você tenha uma conexão em uma variável de nome c, faríamos o seguinte:
Tema da Apresentação
CONSTRUÇÃO DE UM JOGO SIMPLES – AULA7
PROGRAMAÇÃO PARA DISPOSITIVOS MÓVEIS
*
Enviando e recebendo dados por uma conexão
o método baixarConteudo possui uma variável de objeto chamada is (InputStream) que é a responsável pela recepção dos dados do servidor, pois através da referência de conexão (is = c.openInputStream()) com o servidor é criado o vínculo que recebe os dados. Por fim, o método processarRespostaServidor transfere os dados recebidos para a variável conteudo quando a resposta do servidor for HTTP_OK:
Tema
da Apresentação
CONSTRUÇÃO DE UM JOGO SIMPLES – AULA7
PROGRAMAÇÃO PARA DISPOSITIVOS MÓVEIS
*
Enviando e recebendo dados por uma conexão
public String baixarConteudo() throws IOException {
 HttpConnection c = null;
 InputStream is = null;
 OutputStream os = null;
 int codigoRetorno = 0;
 String _url = this.url;
 boolean permitirLoop = false;
 
Tema da Apresentação
CONSTRUÇÃO DE UM JOGO SIMPLES – AULA7
PROGRAMAÇÃO PARA DISPOSITIVOS MÓVEIS
*
Enviando e recebendo dados por uma conexão
do {
 permitirLoop = !permitirLoop;
 this.conteudo.delete(0, this.conteudo.length());
 try {
 switch (this.modoEnvio) {
 case GET:
 StringBuffer urlParam = new StringBuffer();
 urlParam.append(_url);
 if (null != this.parametros) {
 urlParam.append("?");
 urlParam.append(this.parametros);
 }
 c = (HttpConnection)Connector.open(urlParam.toString());
 c.setRequestMethod(HttpConnection.GET);
 break;
Tema da Apresentação
CONSTRUÇÃO DE UM JOGO SIMPLES – AULA7
PROGRAMAÇÃO PARA DISPOSITIVOS MÓVEIS
*
Enviando e recebendo dados por uma conexão
case POST:
 default:
 c = (HttpConnection) Connector.open(_url);
 c.setRequestMethod(HttpConnection.POST);
c.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
 // c.setRequestProperty("Connection", "close");
 String params = this.parametros;
 if ((null != params) && (0 < params.length())) {
 os = c.openOutputStream();
 os.write(params.getBytes());
 // os.flush();
 }
 }
 is = c.openInputStream();
 codigoRetorno = this.processarRespostaServidor(c, is);
 _url = c.getHeaderField("Location");
 }
Tema da Apresentação
CONSTRUÇÃO DE UM JOGO SIMPLES – AULA7
PROGRAMAÇÃO PARA DISPOSITIVOS MÓVEIS
*
Enviando e recebendo dados por uma conexão
finally {
 try {
 if (null != os) {
 os.close(); }
 } catch (Exception ex) { }
 try {
 if (null != is) {
 is.close(); }
 } catch (Exception ex) { }
 try {
 if (null != c) {
 c.close(); }
 } catch (Exception ex) { } }
 } while ((permitirLoop) && (300 <= codigoRetorno) && (307 >= codigoRetorno));
 return this.conteudo.toString();
 }
Tema da Apresentação
CONSTRUÇÃO DE UM JOGO SIMPLES – AULA7
PROGRAMAÇÃO PARA DISPOSITIVOS MÓVEIS
*
Para testar Este código
Crie um novo projeto no IDE NetBeans, depois crie uma classe chamada ConexaoHttp e copie o código para ela. 
Por fim, crie uma “MIDlet visual” e vá ao botão “Fluxo”, acrescente um objeto de “Alerta” (Alert) e inclua um “menu OK” (Command) que acione a seguinte codificação:
Tema da Apresentação
CONSTRUÇÃO DE UM JOGO SIMPLES – AULA7
PROGRAMAÇÃO PARA DISPOSITIVOS MÓVEIS
*
Fim.
Tema da Apresentação

Teste o Premium para desbloquear

Aproveite todos os benefícios por 3 dias sem pagar! 😉
Já tem cadastro?

Outros materiais