Usando service em um APP Serviços em Background Avisar ao usuário sempre que chegar um SMS. Para “escutar” o recebimento de SMSs, podemos usar a classe BroadcastReceiver Essa classe possui um método de callback que escuta eventos do device: public void onReceive(Context context, Intent intent); Lembre-se que para escutar os eventos do device, precisamos pedir autorização no AndroidManifest Além disso, quando chegar o SMS, queremos tocar um arquivo MP3. Coloque o arquivo mp3 na pasta /res/raw/: SMSReceiver Crie a classe responsável por tratar SMSs recebidos SMSReceiver SMSReceiver.onReceive() Recupera dados do SMS SMSReceiver.onReceive() Usando o objeto SmsMessage CreateFromPdu() transforma um byte [ ] em SmsMessage getDisplayOriginatingAddress() retorna o número do telefone remetente da mensagem SMSReceiver.onReceive() Tocar MP3 Autorização de escuta no manifesto Integração com JSON JSON é uma estrutura leve e fácil de trabalhar, aderente ao ambiente mobile Podemos representar facilmente dados de um Objeto Java em um arquivo de formato amigável A leitura e escrita de dados via JSON já é nativa da maioria das linguagens de programação comerciais Apesar de parecido com XML, o JSON ganhou espaço por ser de fácil utilização com JavaScript Componentes JSON JSON é nativo do Android, que já traz as classe necessárias à sua implementação: JSONObject: Coleção de pares do tipo Chave/Valor JSONArray: Sequencia ordenada de valores JSONStringer: Objeto usado para criação de arquivos com dados no formato JSON JSONException: Exceção lançada quando falha na estrutura de dados do JSON for detectada Usando JSON Vamos criar uma classe especialista em converter uma Coleção de Alunos em um arquivo JSON: AlunoConverter O Converter deve oferecer o método toJSON(), que recebe uma lista da alunos como parâmetro: public String toJSON(List<Aluno> lista) { … } AlunoConverter Converte Alunos em dados JSON Criação de objeto de escrita e estrutura inicial Conversão de Tipos de dados Fechamento da Estrutura e retorno do código gerado String Gerada O método toJSON() da classe AlunoConverter gerar uma string parecida com essa aí ao lado Temos uma array list E outro array aluno Você pode validar Strings JSON no site: http://jsonlint.com/ Comunicação com servidor remoto Criaremos uma classe especialista em comunicação com servidores WEB Precisamos de um objeto DefaultHttpClient Para envio dos dados, podemos escolher entre GET ou POST Vamos usar o POST, porque o arquivo a ser enviado pode ser muito grande e o GET tem limitações de número de parâmetros suportados Precisamos de um HttpPost Código para comunicação com Servidor //Objeto para comunicacao com servidor remoto DefaultHttpClient httpClient = new DefaultHttpClient(); //Objeto para encapsular a String gerada com JSON HttpPost post = new HttpPost(url); try { post.setEntity(new StringEntity(json)); //Informa que o conteudo da requisicao eh JSON e //Solicita que a resposta tambem seja em JSON post.setHeader("Content-type", "application/json"); post.setHeader("Accept", "application/json"); //Execucao da requisicao HttpResponse response = httpClient.execute(post); //Verificacao da reposta String jsonResposta = EntityUtils.toString(response.getEntity()); return jsonResposta; } catch (Exception e) { throw new RuntimeException(e); } Classe WebCLient Definições da URL rvidor para comunicação Método para envio de dados JSON Objetos para comunicação Processamento Da resposta do Servidor WEB Retorna o IP solicitante: {"ip": "189.48.181.194"} ListaAlunosActivity.java Ao rodar a app Quando tentamos rodar a nossa App: A operação de comunicação com um servidor remoto é imprevisível, podendo demorar, travando a UIThread A tarefa de sincronização deve rodar em outra thread Envio Assíncrono de dados Não podemos executar tarefas “possivelmente” demoradas na thread principal UIThread Precisamos utilizar uma tarefa assíncrona, independente Usamos a AsyncTask, onde podemos isolar o processo de comunicação com o servidor remoto Durante o processo, vamos exibir uma barra de progresso Ao final, vamos exibir a resposta enviada pelo servidor web EnviaAlunosTask Tipo de Retorno Continuando Executado ANTES da sincronização Método que executa a sincronização Executado DEPOIS da sincronização ListaAlunoActivity Executando a App