Slide 1

Slide 1 text

Google Developers - developers.google.com

Slide 2

Slide 2 text

Google Developers - developers.google.com Começando o Desenvolvimento de Aplicativos Android Conhecendo e entendendo a plataforma Android +Erick Mendonça GDG Aracaju

Slide 3

Slide 3 text

Google Developers - developers.google.com

Slide 4

Slide 4 text

Google Developers - developers.google.com Começando o Desenvolvimento de Aplicativos Android Conhecendo e entendendo a plataforma Android +Neto Marin, Google, Inc. Developer Advocate

Slide 5

Slide 5 text

Google Developers - developers.google.com Developer Relations no Brasil ● Blog oficial: ● http://codigo-google.blogspot.com.br ● +Page brasileira: ● google.com/+DesenvolvedoresGoogle ● Twitter: ● @googledevbr

Slide 6

Slide 6 text

Google Developers - developers.google.com O que vamos utilizar hoje ? Android Studio GitHub

Slide 7

Slide 7 text

Google Developers - developers.google.com Iniciando o Android Studio

Slide 8

Slide 8 text

Google Developers - developers.google.com Criando um novo projeto

Slide 9

Slide 9 text

Google Developers - developers.google.com Qual versão suportar ?

Slide 10

Slide 10 text

Google Developers - developers.google.com Distribuição das Versões

Slide 11

Slide 11 text

Google Developers - developers.google.com Adicionando uma Activity

Slide 12

Slide 12 text

Google Developers - developers.google.com ● Um dos principais elementos de um app Android ● Responsável pela interface com o usuário. ● Todo app que tenha UI, tem que ter pelo menos uma Activity para funcionar. Calma aí… O que é Activity ?

Slide 13

Slide 13 text

Google Developers - developers.google.com Ciclo de Vida da Activity

Slide 14

Slide 14 text

Google Developers - developers.google.com ● Um "fragmento" de UI ● Possui seu próprio ciclo de vida ● Pode ser inserido / removido em uma Activity ● Permite reuso de código ● Principal elemento para criar interfaces para múltiplos tipos de devices e tamanho de tela E esse tal de Fragment ?

Slide 15

Slide 15 text

Google Developers - developers.google.com Detalhes da Primeira Activity

Slide 16

Slide 16 text

Google Developers - developers.google.com Projeto Criado !

Slide 17

Slide 17 text

Google Developers - developers.google.com Ficou perdido ? Não deu tempo ? Repositório no GitHub com o código completo: → github.com/DesenvolvedoresGoogle → codelab-android-openweatherapi A cada passo será colocado o comando para clonar o estágio esperado do projeto após cada etapa.

Slide 18

Slide 18 text

Google Developers - developers.google.com Como Executar o Aplicativo

Slide 19

Slide 19 text

Google Developers - developers.google.com Executando o projeto

Slide 20

Slide 20 text

Google Developers - developers.google.com AVD Manager

Slide 21

Slide 21 text

Google Developers - developers.google.com Criando um AVD

Slide 22

Slide 22 text

Google Developers - developers.google.com Executando no AVD criado

Slide 23

Slide 23 text

Google Developers - developers.google.com Primeiro faço o clone: git clone https://github.com/DesenvolvedoresGoogle/codelab-android- openweatherapi.git Agora o download da tag: cd codeladb-android-openweatherapi git checkout step-0 Alcançando a turma

Slide 24

Slide 24 text

Google Developers - developers.google.com Estrutura do Projeto Como o projeto de um app Android é organizado

Slide 25

Slide 25 text

Google Developers - developers.google.com Estrutura do app de exemplo

Slide 26

Slide 26 text

Google Developers - developers.google.com Tipos de resources: /res/layout /res/drawable /res/menu /res/anim /res/values /res/color /assets Qualificadores /res/[-]* Ex: /res/layout-large, /res/menu-v14, /res/layout-port, /res/layout- land, /res/values-en, ... Resources e Assets

Slide 27

Slide 27 text

Google Developers - developers.google.com Layouts e UI Widgets Montando as telas do seu app

Slide 28

Slide 28 text

Google Developers - developers.google.com É o elemento para construção de componentes de interfaces com o usuário para Android. É a classe base dos Widgets, que são criados para criar componentes de UI como botões, textos, campos e etc. E a subclasse ViewGroup é a base para os layouts, que são os containers para armazenar outras views. Tudo é uma View !

Slide 29

Slide 29 text

Google Developers - developers.google.com FrameLayout LinearLayout TableLayout GridLayout RelativeLayout CardLayout Layouts

Slide 30

Slide 30 text

Google Developers - developers.google.com UI Widgets TextView Button / ImageButton RadioButton CheckBox Switch ToggleButton ImageView ProgressBar SeekBar RatingBar Spinner WebView ListView GridView RecycleView e muito mais...

Slide 31

Slide 31 text

Google Developers - developers.google.com Explore os diferentes layouts e UI widgets que estão disponíveis na plataforma Android. Tente, por exemplo, reproduzir uma tela de algum aplicativo que você use e ache interessante. Hora do Código

Slide 32

Slide 32 text

Google Developers - developers.google.com Altere o layout do Fragment principal para algo similar ao que está sendo mostrado no emulador: Atividade

Slide 33

Slide 33 text

Google Developers - developers.google.com Fazer o checkout da tag step-1. No diretório raiz do repositório que foi clonado: git checkout step-1 Todo mundo junto !

Slide 34

Slide 34 text

Google Developers - developers.google.com Integrando layout e código Porque além de bonitinho, tem que funcionar!

Slide 35

Slide 35 text

Google Developers - developers.google.com Ligando os pontos android:id= "@+id/cidadeEditText" android:id= "@+id/pesquisarButton" android.widget.EditText android.widget.Button findViewById(R.id.cidadeEditText) findViewById(R.id.pesquisarButton)

Slide 36

Slide 36 text

Java Google Developers - developers.google.com Tratando ações Button pesquisarButton = (Button) rootView.findViewById(R.id.pesquisarButton); pesquisarButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { pesquisarTempoCidade(); } });

Slide 37

Slide 37 text

Google Developers - developers.google.com Mesma lógica para diferentes ações e listeners: setOnLongClickListener setOnTouchListener setOnDragListener onScrollChanged Pode ser criado como classe interna anônima ou definir o próprio Fragment como listener dos objetos. Listeners e mais listeners…

Slide 38

Slide 38 text

Google Developers - developers.google.com Cuidando do Fluxo da Aplicação Alternando e navegando entre activities e fragments

Slide 39

Slide 39 text

Google Developers - developers.google.com Mudança de Activity ● Criar nova classe que herda de Activity ● Registrar a Activity no AndroidManifest ● Criar Intent que deverá ser chamada ● Executar o método startActivity com a Intent criada

Slide 40

Slide 40 text

Java Google Developers - developers.google.com Mudando de Activity pesquisarButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (cidadeEditText != null && cidadeEditText.getText() != null && cidadeEditText.getText().toString().length() > 0) { pesquisarTempoCidade(); } else { Toast.makeText(getActivity(), "Cidade não preenchida", Toast.LENGTH_SHORT).show(); } } }); private void pesquisarTempoCidade() { //Método que irá efetuar a busca Intent i = new Intent(getActivity(), TempoCidadeActivity.class); startActivity(i); }

Slide 41

Slide 41 text

Google Developers - developers.google.com ● Uma "intenção" de se executar alguma coisa ● Um outro aplicativo ● Uma activity do seu próprio aplicativo ● Iniciar um serviço ● Fazer um Broadcast ● Existem os com nomes já determinados ou você pode criar a sua própria Intent Explicando melhor: O que é uma Intent ?

Slide 42

Slide 42 text

Google Developers - developers.google.com AndroidManifest Onde tudo deve ser registrado

Slide 43

Slide 43 text

Google Developers - developers.google.com ● Deve estar presente em todos aplicativos Android ● Deve ser colocado na raiz do projeto ● Elementos e permissões devem registrados: ● Activity ● Services ● BroadcastReceiver ● Provider ● Permissões ● Versões de SDK e etc… AndroidManifest.xml

Slide 44

Slide 44 text

Google Developers - developers.google.com Atividade Alterar o aplicativo da seguinte forma: ● Criar nova Activity para mostrar pesquisa do tempo ● Quando o botão Pesquisar for pressionado: ● Validar se o usuário digitou alguma cidade ● Mostrar Toast se não tiver digitado e não mudar de Activity ● Iniciar a nova Activity Criada Desafio: ● Mostrar o nome da cidade digitada na Activity anterior.

Slide 45

Slide 45 text

Google Developers - developers.google.com Fazer o checkout da tag step-2. No diretório raiz do repositório que foi clonado: git checkout step-2 Todo mundo junto !

Slide 46

Slide 46 text

Google Developers - developers.google.com Conectando o App a Internet Não deixe seu aplicativo falando sozinho

Slide 47

Slide 47 text

Google Developers - developers.google.com ● Nada muda, em código, em tipos diferentes de rede ● É possível saber quando conectado a WiFi ou 3G/4G ● Deve ser adicionado à permissão ao AndroidManifest ● ● Conexões de rede não podem estar na Main Thread ● Operações de I/O devem ser SEMPRE deslocadas para outras threads para não travar o aplicativo. Conectando o App a Internet

Slide 48

Slide 48 text

Google Developers - developers.google.com ● É possível criar uma worker thread ● Mesma forma que em uma aplicação Java "convencional" ● Utilização de AsyncTask ● Documentação oficial: http://goo.gl/XLHZwC ● Vídeo "Usando AsyncTask": http://youtu.be/UgRHopzzg9c ● Utilização de um Service ● Também há a sub-classe IntentService Multithreading

Slide 49

Slide 49 text

Google Developers - developers.google.com ● Elemento de um aplicativo Android responsável por executar uma tarefa que não necessite de UI ● Um Service não necessariamente significa que sua tarefa está sendo executada em segundo plano. ● A menos que esteja utilizando um IntentService ● Um service pode ser disparado por outros elementos de um aplicativo, como Activities ou BroadcastReceiver. ● Mas também pode ser ativado pelo próprio sistema. Service

Slide 50

Slide 50 text

Java Google Developers - developers.google.com InputStream is = null; URL url = new URL("http://api.openweathermap.org/data/2.5/weather?q=Belo% 20Horizonte"); HttpURLConnection con = (HttpURLConnection) url.openConnection(); con.setRequestMethod("GET"); con.connect(); if (con.getResponseCode() == HttpURLConnection.HTTP_OK) { is = con.getInputStream(); //Método fictício para transformar em String o retorno return getStringFromInputStream(is); } else { return null; } Executando um GET na API

Slide 51

Slide 51 text

Google Developers - developers.google.com Uma série com 3 posts no Código Google pode te ajudar? Comunicação Web em apps Android ● Parte I: http://goo.gl/SVsY5X ● Parte II: http://goo.gl/W2G7q1 ● Parte III: http://goo.gl/52GuVA Endereço do blog: http://codigo-google.blogspot.com.br Mas é só ?

Slide 52

Slide 52 text

Google Developers - developers.google.com Atividade Partindo do exercício anterior, ao entrar na nova Activity executar um GET na API do OpenWeatherMap para obter as condições climáticas da cidade que o usuário digitar na Activity anterior. Se lembrar de tratar respostas inesperadas ou indesejadas do Web Service. ;-)

Slide 53

Slide 53 text

Google Developers - developers.google.com Fazer o checkout da tag step-3. No diretório raiz do repositório que foi clonado: git checkout step-3 Todo mundo junto !

Slide 54

Slide 54 text

Google Developers - developers.google.com Lição de Casa Mais para estudar sobre a plataforma móvel mais popular ;-)

Slide 55

Slide 55 text

Google Developers - developers.google.com ● SharedPreferences ● SQLite ● ContentProviders ● Arquivos e SDCard Documentação: Saving Data → http://goo.gl/ghD4zs Persistência

Slide 56

Slide 56 text

Google Developers - developers.google.com Um BroadcastReceiver, ou simplesmente receiver, pode ser programado para efetuar determinada operação quando uma certa ação ocorrer ou alguém enviar um "sinal" para o receiver. Exemplos: ● Iniciar um serviço após o boot do aparelho ● Sincronizar dados quando o celular estiver na tomada ● Exibir uma notificação quando uma ação acontecer BroadcastReceiver

Slide 57

Slide 57 text

Google Developers - developers.google.com ● Exibidas na central de notificações. ● Fica visível ao puxar a barra de sistema para baixo ● Forma de aumentar a interação com o usuário. ● Lembre-o que seu app existe ● Use de forma inteligente, não seja chato ! ● É sincronizável com o Android Wear Documentação: Notifying the user → http://goo.gl/6gPkSD Notificações

Slide 58

Slide 58 text

Google Developers - developers.google.com ● Acesso ao aplicativo direto na tela inicial ou de bloqueio do dispositivo. ● Aumenta o engamento do usuário. ● Permite ações mais rápidas. Documentação: App Widgets → http://goo.gl/H4e3BW Homescreen e Lockscreen Widgets

Slide 59

Slide 59 text

Google Developers - developers.google.com Dúvidas ? google.com/+NetoMarin google.com/+DesenvolvedoresGoogle

Slide 60

Slide 60 text

Google Developers - developers.google.com