Introdução ao Android (minicurso 4h)
-
Upload
rodrigo-rocha -
Category
Technology
-
view
1.359 -
download
4
description
Transcript of Introdução ao Android (minicurso 4h)
![Page 1: Introdução ao Android (minicurso 4h)](https://reader033.fdocuments.net/reader033/viewer/2022052411/55799f84d8b42ac1148b46d5/html5/thumbnails/1.jpg)
Introdução ao AndroidMinicurso, 4h
Rodrigo Rocha Gomes e Souza11 de março de 2013
X SIECOMP, UEFS
![Page 2: Introdução ao Android (minicurso 4h)](https://reader033.fdocuments.net/reader033/viewer/2022052411/55799f84d8b42ac1148b46d5/html5/thumbnails/2.jpg)
Apresentação
![Page 3: Introdução ao Android (minicurso 4h)](https://reader033.fdocuments.net/reader033/viewer/2022052411/55799f84d8b42ac1148b46d5/html5/thumbnails/3.jpg)
Vocês
Quem tem um aparelho Android?
Quem programa em Java?
Quem já programou pra Android, pelo menos um Hello World?
Quem já programou pra outra plataforma móvel?
![Page 4: Introdução ao Android (minicurso 4h)](https://reader033.fdocuments.net/reader033/viewer/2022052411/55799f84d8b42ac1148b46d5/html5/thumbnails/4.jpg)
Eu
Doutorando em Ciência da Computação na UFBA
Analista de TI no CPD-UFBA
Professor estagiário da disciplina “Aplicações para Dispositivos Móveis”, na UFBA
Fundador da RoDen Apps (iOS)
![Page 5: Introdução ao Android (minicurso 4h)](https://reader033.fdocuments.net/reader033/viewer/2022052411/55799f84d8b42ac1148b46d5/html5/thumbnails/5.jpg)
Conteúdo
Ambiente de desenvolvimento (ADT)
Alô mundo
Estrutura de um app
Ciclo de vida
Múltiplas telas
Salvando e lendo preferências
ListView
![Page 6: Introdução ao Android (minicurso 4h)](https://reader033.fdocuments.net/reader033/viewer/2022052411/55799f84d8b42ac1148b46d5/html5/thumbnails/6.jpg)
Método
Um pequeno app para cada conceito
Ao final, um app completo para anotar suas palestras favoritas
![Page 7: Introdução ao Android (minicurso 4h)](https://reader033.fdocuments.net/reader033/viewer/2022052411/55799f84d8b42ac1148b46d5/html5/thumbnails/7.jpg)
Horário
De 14h a 18h
Pausa de 15 a 20 min no meio do minicurso
![Page 8: Introdução ao Android (minicurso 4h)](https://reader033.fdocuments.net/reader033/viewer/2022052411/55799f84d8b42ac1148b46d5/html5/thumbnails/8.jpg)
Android
![Page 9: Introdução ao Android (minicurso 4h)](https://reader033.fdocuments.net/reader033/viewer/2022052411/55799f84d8b42ac1148b46d5/html5/thumbnails/9.jpg)
Dispositivos
Smartphones: 240x320, 320x480, 480x800...
Tablets: 480x800, 600x1024, 800x1280...
TVs, consoles, computador pessoal...
![Page 10: Introdução ao Android (minicurso 4h)](https://reader033.fdocuments.net/reader033/viewer/2022052411/55799f84d8b42ac1148b46d5/html5/thumbnails/10.jpg)
Android, o sistema operacional
Comprado pela Google em 2005
Anunciado em 2007, lançado em 2008
Usa o kernel do Linux
Roda uma máquina virtual Java própria: Dalvik VM
Muitas bibliotecas Java funcionam sem alterações na Dalvik, mas nem todas
![Page 11: Introdução ao Android (minicurso 4h)](https://reader033.fdocuments.net/reader033/viewer/2022052411/55799f84d8b42ac1148b46d5/html5/thumbnails/11.jpg)
Empacotamento
![Page 12: Introdução ao Android (minicurso 4h)](https://reader033.fdocuments.net/reader033/viewer/2022052411/55799f84d8b42ac1148b46d5/html5/thumbnails/12.jpg)
Versões
1.0: muito antiga
2.0: smartphones
3.0: tablets
4.0: smartphones e tablets
![Page 13: Introdução ao Android (minicurso 4h)](https://reader033.fdocuments.net/reader033/viewer/2022052411/55799f84d8b42ac1148b46d5/html5/thumbnails/13.jpg)
Versões
http://developer.android.com/about/dashboards/index.html
2.3
4.0
2.2
4.1, 4.2
![Page 14: Introdução ao Android (minicurso 4h)](https://reader033.fdocuments.net/reader033/viewer/2022052411/55799f84d8b42ac1148b46d5/html5/thumbnails/14.jpg)
![Page 15: Introdução ao Android (minicurso 4h)](https://reader033.fdocuments.net/reader033/viewer/2022052411/55799f84d8b42ac1148b46d5/html5/thumbnails/15.jpg)
Ambiente de desenvolvimento
![Page 16: Introdução ao Android (minicurso 4h)](https://reader033.fdocuments.net/reader033/viewer/2022052411/55799f84d8b42ac1148b46d5/html5/thumbnails/16.jpg)
http://developer.android.com/tools/sdk/eclipse-adt.html
![Page 17: Introdução ao Android (minicurso 4h)](https://reader033.fdocuments.net/reader033/viewer/2022052411/55799f84d8b42ac1148b46d5/html5/thumbnails/17.jpg)
![Page 18: Introdução ao Android (minicurso 4h)](https://reader033.fdocuments.net/reader033/viewer/2022052411/55799f84d8b42ac1148b46d5/html5/thumbnails/18.jpg)
Emulador / Android Virtual Device (AVD)
![Page 19: Introdução ao Android (minicurso 4h)](https://reader033.fdocuments.net/reader033/viewer/2022052411/55799f84d8b42ac1148b46d5/html5/thumbnails/19.jpg)
Prática
Abrir o ambiente de desenvolvimento
Criar e executar uma AVD
Abrir o SDK Manager
![Page 20: Introdução ao Android (minicurso 4h)](https://reader033.fdocuments.net/reader033/viewer/2022052411/55799f84d8b42ac1148b46d5/html5/thumbnails/20.jpg)
Prática
Abrir o DDMS. Aba Emulator Control.
Simule uma ligação telefônica
![Page 21: Introdução ao Android (minicurso 4h)](https://reader033.fdocuments.net/reader033/viewer/2022052411/55799f84d8b42ac1148b46d5/html5/thumbnails/21.jpg)
Alô, Mundo!
![Page 22: Introdução ao Android (minicurso 4h)](https://reader033.fdocuments.net/reader033/viewer/2022052411/55799f84d8b42ac1148b46d5/html5/thumbnails/22.jpg)
Novo projeto
![Page 23: Introdução ao Android (minicurso 4h)](https://reader033.fdocuments.net/reader033/viewer/2022052411/55799f84d8b42ac1148b46d5/html5/thumbnails/23.jpg)
Novo projeto
![Page 24: Introdução ao Android (minicurso 4h)](https://reader033.fdocuments.net/reader033/viewer/2022052411/55799f84d8b42ac1148b46d5/html5/thumbnails/24.jpg)
Estrutura do app
src/ - código-fonte
res/ - telas, strings, ícone do app...
assets/ - outros arquivos usados por seu app (imagem, música, texto...)
gen/ - código-fonte gerado automaticamente
AndroidManifest.xml - configuração do app (nome, versão do Android, telas, permissões...)
![Page 25: Introdução ao Android (minicurso 4h)](https://reader033.fdocuments.net/reader033/viewer/2022052411/55799f84d8b42ac1148b46d5/html5/thumbnails/25.jpg)
Activity
Equivale a uma tela.
Ao criar um projeto, uma Activity (Main) é criada
Cada Activity é definida em dois arquivos...
res/layout/activity_nome.xml (visual)
src/.../NomeActivity.java (comportamento)
... e é listada no arquivo
AndroidManifest.xml
![Page 26: Introdução ao Android (minicurso 4h)](https://reader033.fdocuments.net/reader033/viewer/2022052411/55799f84d8b42ac1148b46d5/html5/thumbnails/26.jpg)
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity" >
<TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:layout_centerVertical="true" android:text="@string/hello_world" />
</RelativeLayout>
res/layout/activity_main.xml
Layout
![Page 27: Introdução ao Android (minicurso 4h)](https://reader033.fdocuments.net/reader033/viewer/2022052411/55799f84d8b42ac1148b46d5/html5/thumbnails/27.jpg)
<?xml version="1.0" encoding="utf-8"?><resources>
<string name="app_name">Alo Mundo</string> <string name="hello_world">Hello world!</string> <string name="menu_settings">Settings</string>
</resources>
res/values/strings.xml
strings.xml
útil para traduzir um app para vários idiomas(um arquivo strings.xml por idioma)
![Page 28: Introdução ao Android (minicurso 4h)](https://reader033.fdocuments.net/reader033/viewer/2022052411/55799f84d8b42ac1148b46d5/html5/thumbnails/28.jpg)
public class MainActivity extends Activity {
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); }}
src/.../MainActivity.java
Código Java
![Page 29: Introdução ao Android (minicurso 4h)](https://reader033.fdocuments.net/reader033/viewer/2022052411/55799f84d8b42ac1148b46d5/html5/thumbnails/29.jpg)
public final class R { public static final class layout { public static final int activity_main=0x7f030000; } public static final class string { public static final int app_name=0x7f040000; public static final int hello_world=0x7f040001; public static final int menu_settings=0x7f040002; } ...}
gen/R.java
R (arquivo gerado pelo compilador)
Cada recurso é identificado por um número.O compilador gera constantes para facilitar o
uso de recursos no código-fonte.
![Page 30: Introdução ao Android (minicurso 4h)](https://reader033.fdocuments.net/reader033/viewer/2022052411/55799f84d8b42ac1148b46d5/html5/thumbnails/30.jpg)
Prática
Substitua, no arquivo strings.xml, “Hello world!” por “Alo mundo!”
Execute o app.
![Page 31: Introdução ao Android (minicurso 4h)](https://reader033.fdocuments.net/reader033/viewer/2022052411/55799f84d8b42ac1148b46d5/html5/thumbnails/31.jpg)
Interação
![Page 32: Introdução ao Android (minicurso 4h)](https://reader033.fdocuments.net/reader033/viewer/2022052411/55799f84d8b42ac1148b46d5/html5/thumbnails/32.jpg)
Adicionar um botão
![Page 33: Introdução ao Android (minicurso 4h)](https://reader033.fdocuments.net/reader033/viewer/2022052411/55799f84d8b42ac1148b46d5/html5/thumbnails/33.jpg)
<RelativeLayout ... >
<TextView android:id="@+id/textView1" ... />
<Button android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignLeft="@+id/textView1" android:layout_below="@+id/textView1" android:layout_marginTop="21dp" android:text="Button" />
</RelativeLayout>
res/layout/activity_main.xml
Ids!
![Page 34: Introdução ao Android (minicurso 4h)](https://reader033.fdocuments.net/reader033/viewer/2022052411/55799f84d8b42ac1148b46d5/html5/thumbnails/34.jpg)
public final class R { public static final class id { public static final int button1=0x7f070001; public static final int menu_settings=0x7f070002; public static final int textView1=0x7f070000; } ...}
gen/R.java
R (arquivo gerado pelo compilador)
![Page 35: Introdução ao Android (minicurso 4h)](https://reader033.fdocuments.net/reader033/viewer/2022052411/55799f84d8b42ac1148b46d5/html5/thumbnails/35.jpg)
<RelativeLayout ... >
<TextView android:id="@+id/textView1" ... />
<Button android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignLeft="@+id/textView1" android:layout_below="@+id/textView1" android:layout_marginTop="21dp" android:text="Button" android:onClick="botaoClicado" />
</RelativeLayout>
res/layout/activity_main.xml
Clique!
![Page 36: Introdução ao Android (minicurso 4h)](https://reader033.fdocuments.net/reader033/viewer/2022052411/55799f84d8b42ac1148b46d5/html5/thumbnails/36.jpg)
public class MainActivity extends Activity {
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); }
public void botaoClicado(View v) { }}
src/.../MainActivity.java
Chama método botaoClicado
![Page 37: Introdução ao Android (minicurso 4h)](https://reader033.fdocuments.net/reader033/viewer/2022052411/55799f84d8b42ac1148b46d5/html5/thumbnails/37.jpg)
O que fazer quando clicar no botão?
1. Exibir algo na tela
2. Exibir algo no log
3. Mudar o texto do TextView
![Page 38: Introdução ao Android (minicurso 4h)](https://reader033.fdocuments.net/reader033/viewer/2022052411/55799f84d8b42ac1148b46d5/html5/thumbnails/38.jpg)
Toast (mensagem na tela)
Toast.makeText(this, "Hello World", Toast.LENGTH_SHORT).show();
![Page 39: Introdução ao Android (minicurso 4h)](https://reader033.fdocuments.net/reader033/viewer/2022052411/55799f84d8b42ac1148b46d5/html5/thumbnails/39.jpg)
Log (não aparece para o usuário)
Log.i("minhatag", "Minha mensagem")
// Métodos de LogLog.v // VerboseLog.d // DebugLog.i // InfoLog.w // WarningLog.e // ErrorLog.wtf // What a Terrible Failure
![Page 40: Introdução ao Android (minicurso 4h)](https://reader033.fdocuments.net/reader033/viewer/2022052411/55799f84d8b42ac1148b46d5/html5/thumbnails/40.jpg)
public class MainActivity extends Activity {
...
public void botaoClicado(View v) { TextView tv = (TextView)findViewById(R.id.textView1); tv.setText("Clique!"); }}
src/.../MainActivity.java
Alterar o TextView (usa findViewById)
![Page 41: Introdução ao Android (minicurso 4h)](https://reader033.fdocuments.net/reader033/viewer/2022052411/55799f84d8b42ac1148b46d5/html5/thumbnails/41.jpg)
Prática
Adicione um campo de texto (EditText)
Ao clicar no botão, altere o TextView para o valor do campo de texto (use getText()).
Boa prática: crie um atributo para cada view e inicialize todos no onCreate (usando findViewbyId)
![Page 42: Introdução ao Android (minicurso 4h)](https://reader033.fdocuments.net/reader033/viewer/2022052411/55799f84d8b42ac1148b46d5/html5/thumbnails/42.jpg)
Ciclo de Vida de uma Activity
![Page 43: Introdução ao Android (minicurso 4h)](https://reader033.fdocuments.net/reader033/viewer/2022052411/55799f84d8b42ac1148b46d5/html5/thumbnails/43.jpg)
Ciclo de vida de uma Activity
onCreate
onStart
onResume onPause
onStop
onDestroy
ativa
onRestart
parcialmente visível
não visível
destruída
![Page 44: Introdução ao Android (minicurso 4h)](https://reader033.fdocuments.net/reader033/viewer/2022052411/55799f84d8b42ac1148b46d5/html5/thumbnails/44.jpg)
Prática
Implemente os métodos do ciclo de vida de uma activity para emitir uma mensagem de log para cada um
Tente fazer com que onDestroy seja chamado
![Page 45: Introdução ao Android (minicurso 4h)](https://reader033.fdocuments.net/reader033/viewer/2022052411/55799f84d8b42ac1148b46d5/html5/thumbnails/45.jpg)
Prática
Rotacione o dispositivo (Ctrl+F11). Quais métodos são chamados?
![Page 46: Introdução ao Android (minicurso 4h)](https://reader033.fdocuments.net/reader033/viewer/2022052411/55799f84d8b42ac1148b46d5/html5/thumbnails/46.jpg)
Preferências
![Page 47: Introdução ao Android (minicurso 4h)](https://reader033.fdocuments.net/reader033/viewer/2022052411/55799f84d8b42ac1148b46d5/html5/thumbnails/47.jpg)
Preferências
Como salvar dados para que eles possam ser acessados da próxima vez que o app seja executado?
SharedPreferences é uma forma conveniente de salvar pequenas quantidades de dados.
![Page 48: Introdução ao Android (minicurso 4h)](https://reader033.fdocuments.net/reader033/viewer/2022052411/55799f84d8b42ac1148b46d5/html5/thumbnails/48.jpg)
SharedPreferences prefs = PreferenceManager .getDefaultSharedPreferences(this);
Editor editor = prefs.edit();editor.putString("texto", texto);editor.commit();
Preferências
SharedPreferences prefs = PreferenceManager .getDefaultSharedPreferences(this);
String texto = prefs.getString("texto", "");
Salvando
Carregando
![Page 49: Introdução ao Android (minicurso 4h)](https://reader033.fdocuments.net/reader033/viewer/2022052411/55799f84d8b42ac1148b46d5/html5/thumbnails/49.jpg)
Prática
Faça o app guardar o texto
Carregue no onCreate, salve no onDestroy
Boa prática: use atributos static final para as chaves
![Page 50: Introdução ao Android (minicurso 4h)](https://reader033.fdocuments.net/reader033/viewer/2022052411/55799f84d8b42ac1148b46d5/html5/thumbnails/50.jpg)
Pausa
![Page 51: Introdução ao Android (minicurso 4h)](https://reader033.fdocuments.net/reader033/viewer/2022052411/55799f84d8b42ac1148b46d5/html5/thumbnails/51.jpg)
Intents
![Page 52: Introdução ao Android (minicurso 4h)](https://reader033.fdocuments.net/reader033/viewer/2022052411/55799f84d8b42ac1148b46d5/html5/thumbnails/52.jpg)
Intents
São mensagens que seu programa envia para o sistema para requisitar funcionalidades de outros componentes
Exemplo: uma Activity envia um Intent para requisitar ao sistema que outra Activity seja aberta
Outro exemplo: uma Activity envia um Intent para requisitar ao sistema que abra um navegador na página www.google.com
![Page 53: Introdução ao Android (minicurso 4h)](https://reader033.fdocuments.net/reader033/viewer/2022052411/55799f84d8b42ac1148b46d5/html5/thumbnails/53.jpg)
Intent intent = new Intent(this, OutraActivity.class);startActivity(intent);
MainActivity.java
Abrindo outra Activity
Pode ser chamado, por exemplo, ao clicar em um botão.
A nova Activity é empilhada sobre a atual.
![Page 54: Introdução ao Android (minicurso 4h)](https://reader033.fdocuments.net/reader033/viewer/2022052411/55799f84d8b42ac1148b46d5/html5/thumbnails/54.jpg)
finish();
OutraActivity
Fechando a Activity
Quando uma Activity é fechada (desempilhada), o sistema mostra
a Activity anterior, que estava abaixo da atual.
OutraActivity deve se fechar, e não empilhar MainActivity.
![Page 55: Introdução ao Android (minicurso 4h)](https://reader033.fdocuments.net/reader033/viewer/2022052411/55799f84d8b42ac1148b46d5/html5/thumbnails/55.jpg)
Prática
Crie um projeto.
Crie uma nova Activity, chamada OutraActivity
Na MainActivity, adicione um botão que, ao ser clicado, abre OutraActivity
Na OutraActivity, adicione um botão que, ao ser chamado, feche a Activity
![Page 56: Introdução ao Android (minicurso 4h)](https://reader033.fdocuments.net/reader033/viewer/2022052411/55799f84d8b42ac1148b46d5/html5/thumbnails/56.jpg)
Intent intent = new Intent(this, OutraActivity.class);intent.putExtra(“pi”, 3.14);startActivity(intent);
MainActivity.java
Passando dados de uma Activity para outra
Bundle extras = getIntent().getExtras()if (extras != null) { float x = extra.getFloat(“pi”);}
OutraActivity.java
Pode ser chamado no onCreate()
![Page 57: Introdução ao Android (minicurso 4h)](https://reader033.fdocuments.net/reader033/viewer/2022052411/55799f84d8b42ac1148b46d5/html5/thumbnails/57.jpg)
Intent intent = new Intent(this, OutraActivity.class);startActivityForResult(intent, 1234); MainActivity.java
Retornando dados de uma Activity
Intent data = new Intent();data.putExtra(“pi”, 3.14);setResult(RESULT_OK, data);finish();
OutraActivity.java
@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == 1234 && resultCode == RESULT_OK) { float pi = data.getFloat(“pi”); } }
MainActivity.java
![Page 58: Introdução ao Android (minicurso 4h)](https://reader033.fdocuments.net/reader033/viewer/2022052411/55799f84d8b42ac1148b46d5/html5/thumbnails/58.jpg)
Prática
![Page 59: Introdução ao Android (minicurso 4h)](https://reader033.fdocuments.net/reader033/viewer/2022052411/55799f84d8b42ac1148b46d5/html5/thumbnails/59.jpg)
Intents Implícitos
// Abrir navegadorIntent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.google.com/"));startActivity(intent);
// Enviar mensagem (SMS)Intent intent = new Intent(Intent.ACTION_SEND);intent.setType("text/plain");intent.putExtra(android.content.Intent.EXTRA_TEXT, "Oi!");startActivity(intent);
![Page 60: Introdução ao Android (minicurso 4h)](https://reader033.fdocuments.net/reader033/viewer/2022052411/55799f84d8b42ac1148b46d5/html5/thumbnails/60.jpg)
ListView
![Page 61: Introdução ao Android (minicurso 4h)](https://reader033.fdocuments.net/reader033/viewer/2022052411/55799f84d8b42ac1148b46d5/html5/thumbnails/61.jpg)
String
ArrayAdapter
ListView
ListView: funcionamento
![Page 62: Introdução ao Android (minicurso 4h)](https://reader033.fdocuments.net/reader033/viewer/2022052411/55799f84d8b42ac1148b46d5/html5/thumbnails/62.jpg)
ListView
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" >
<ListView android:id="@+id/mylist" android:layout_width="match_parent" android:layout_height="wrap_content" > </ListView>
</LinearLayout>
![Page 63: Introdução ao Android (minicurso 4h)](https://reader033.fdocuments.net/reader033/viewer/2022052411/55799f84d8b42ac1148b46d5/html5/thumbnails/63.jpg)
ListView
ListView listView = (ListView) findViewById(R.id.mylist);
listView.setAdapter(adapter);
![Page 64: Introdução ao Android (minicurso 4h)](https://reader033.fdocuments.net/reader033/viewer/2022052411/55799f84d8b42ac1148b46d5/html5/thumbnails/64.jpg)
ListView listView = (ListView) findViewById(R.id.mylist);
String[] values = new String[] { “Ada”, “Basic”, “C++” };
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, // layout de um item values);
listView.setAdapter(adapter);
ArrayAdapter
![Page 65: Introdução ao Android (minicurso 4h)](https://reader033.fdocuments.net/reader033/viewer/2022052411/55799f84d8b42ac1148b46d5/html5/thumbnails/65.jpg)
listView.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
// ...
}});
ListView: interação
![Page 66: Introdução ao Android (minicurso 4h)](https://reader033.fdocuments.net/reader033/viewer/2022052411/55799f84d8b42ac1148b46d5/html5/thumbnails/66.jpg)
Prática
Sistema para guardar palestras e cursos do SIECOMP.