As novidades de Android 5.1 sob a perspectiva de desenvolvimento

Na última quarta feira (9/3/2015) o google anunciou uma nova atualização da plataforma Android: o Android 5.1. Os telefones nexus já estão recebendo a atualização! Você pode ver o anúncio aqui.

Mas o que muda para os desenvolvedores de aplicações?

Apesar de ser apenas uma atualização da versão 5.0 (Lollipop), foram feitas 3 alterações importantes nas APIs acessíveis aos desenvolvedores:

  • AndroidHttpClient foi marcado como deprecated, reafirmando a intenção do Google de dar suporte apenas ao URLConnection, como já dito aqui.
  • Novas permissões para aplicativos de operadoras: Os aplicativos assinados com a chave específica da operadora (carrier) agora tem mais privilégios, como por exemplo capturar eventos de SMS com maior prioridade usando o CarrierMessagingService.
  • Por fim, a maior mudança: foi adicionado suporte nativo a telefones com dois ou mais sim cards (Multiple SIM)

O suporte a Multiple SIM é especialmente importante para nós, desenvolvedores brasileiros, visto a grande quantidade de telefones com …

Criando um Service em Android

Um dos principais componentes de uma aplicação Android são os Services.

Assim como as Activities, os Services são componentes fundamentais em um aplicação, possuindo ciclo de vida próprio. Porém, são diferentes das Activities nos seguintes pontos:

  • Não possuem interface com o usuário.
  • Sua execução continua mesmo quando o usuário inicia outra aplicação.

Por conta dessas características, os Services são geralmente utilizados para realizar tarefas de sincronização (com um servidor, por exemplo) podendo ter sua execução agendada e não dependendo de nenhuma ação do usuário. Por isso, são chamados de componentes de background.

 

Tipos de Serviços

Existem dois principais tipos de serviços:

  • Started (unbounded): são serviços iniciados através de outros componentes (activities, por exemplo) através do método startService(). Após o seu início, o serviço pode continuar sendo executado indefinidamente.
  • Bounded: são serviços iniciados através do método bindService(). Os Bound Services interagem com os outros componentes através de uma interface cliente-servidor, que

Acessando a rede através de HTTP

1423687551_Globe

Neste capítulo do curso de Android iremos aprender como acessar um servidor utilizando HTTP.

Iremos utilizar este servidor para fazer backup das notas criadas pela nossa aplicação QuickNotes.

Se você não estava acompanhando o Curso de Android, faça o download do projeto aqui, pois as alterações serão feitas neste projeto.

 

Clientes HTTP em Android

Em Android temos dois clientes HTTP:

  • Apache HTTP Client
  • HttpURLConnection

O Google aconselha o uso de HttpURLConnection desde a versão 2.3 (Gingerbread)

Usaremos o HTTPUrlConnection para enviar as notas, que no nosso exemplo são armazenadas no banco de dados local, para o servidor remoto. Abaixo segue a implementação:


String urlParameters = "nota=" + URLEncoder.encode(note,"UTF-8");
String request = "http://tests.felipesilveira.com.br/android-core/insert.php";
URL url = new URL(request);

// Criando a instância de HttpURLConnection responsável por acessar a rede
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setDoOutput(true);
connection.setDoInput(true);
connection.setInstanceFollowRedirects(false);
// Vamos enviar a requisição via POST
connection.setRequestMethod("POST");
connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
connection.setRequestProperty("charset", "utf-8");
connection.setRequestProperty("Content-Length", "" +
		Integer.toString(urlParameters.getBytes().length));
connection.setUseCaches (false);

// Criando um 

Threads separadas em Android

Quem de nós nunca se deparou com o seguinte diálogo ao executar uma aplicação Android?

ANR - application not responding

Mas o que causa esse problema?

Este é um diálogo mostrado pelo sistema quando ao identificar que a aplicação está executando muitas operações na main thread - a thread principal ou UI thread.

A UI thread é responsável pelas interações com o usuário.  Por isso, quando o sistema percebe que ela está fazendo muito processamento, ele considera que a aplicação não está respondendo ao usuário e, portanto, está travada. Neste momento ele dá a opção de fechar a aplicação – o inconveniente diálogo application not responding - ou simplesmente ANR.

Como evitar um ANR

Mas como evitar um ANR? Simples! Basta executar as operações demoradas (como acesso a rede, acesso a banco de dados, entre outros) de sua aplicação em uma thread separada. E para fazer isso existem três mecanismos:

  • Threads (Java nativo)
  • Asynctasks
  • Handlers

O primeiro mecanismo (threads nativas de java) funciona, …

Ferramenta muito útil: Android Layout Finder

Uma das coisas mais trabalhosas que o desenvolvedor android precisa fazer quando cria uma nova Activity é “mapear” os widgets declarados em um layout XML para variáveis na sua classe Java, usando findViewById.

Existem muitas formas de evitar esse trabalho (usando Annotations, libraries, etc) mas uma das ferramentas mais simples e mais úteis que conheço para resolver este problema é o Android Layout Finder, uma ferramenta online que gera todas as declarações e inicializações das variáveis referentes aos widgets do seu layout (TextView, EditTexts, etc..)

Screen Shot 2015-01-13 at 12.09.18 PM

Se ainda não conhece, vale a pena conhecer! Já está nos meus favoritos :-)

Google I/O 2014 no ar!

Está acontecendo, nesse momento, o evento Google I/O 2014, onde está sendo apresentado a nova versão de Android (Android Lollipop, ou simplesmente Android L).

Para os desenvolvedores Android, é obrigatório assistir!

No seguinte link é possível encontrar a transmissão online: https://www.google.com/events/io