3. Ementa
O que é uma Activity(Atividade);
Como aplicar estilos e temas;
Como exibir uma Activity como um dialogo;
Entendendo Intents(Intenções);
Como realizar link de activities através de intents;
Intent filters(Filtro de Intenções);
Notifications(Notificações);
4. O que é uma Activity
Uma aplicação pode ter uma ou mais Atividades;
Serve para incluir a lógica de iteração com o
usuário;
São sempre declaradas no arquivo
AndroidManifest.xml;
Responsáveis por “inflar” o layout xml
correspondente a UI;
Possui um ciclo de vida;
Normalmente trabalham de modo que ou estão
ativas e visíveis ou inativas numa stack;
5. Ciclo de Vida de uma Activity
onCreate() — Chamado quando a atividade é criada ela
primeira vez;
onStart() — Chamado quando a atividade se torna visível para
o usuário;
onResume() — Chamado quando a atividade inicia a iteração
com o usuário;
onPause() — Chamado quando a atividade corrente está
sendo pausada e uma outra atividade
está sendo resumida(Resumed);
onStop() — Chamado quando a atividade não está mais visível
para o usuário;
onDestroy() — Chamado antes da atividade ser destruida pelo
sistema(Ou manualmente ou pelo sistema
para economizar memória)
onRestart() — Chamado quando a atividade foi
parada(Stopped) e restartada novamente;
7. Importante...
1 - Sempre fazer quaisquer chamada(s) a findViewById, sempre depois de inflar o Layout
Ex:
setContentView(R.layout.main);
TextView textView = (TextView) findViewById(R.id.textView);
2 – Declarar no arquivo AndroidManifest.xml a Activity criada, conforme exemplo Abaixo:
8. Tratando Mudanças de Configuração
• A configuração de um dispositivo pode mudar em tempo de
execução. Possíveis mudanças são:
– Orientação da Tela;
– Disponibilidade do Teclado;
– Alteração do Idioma;
• Quando uma mudança de configuração Acontece, o Android
recria a atividade, chamando:
– onDestroy() seguido de onCreate().
9. onSaveInstanceState e
onRestoreInstanceState
Sua aplicação deve estar apta a reiniciar sem perder os dados
do usuário ou estado.
O Android fornece os métodos onSaveInstanceState e
onRestoreInstanceState para salvar as informações de estado.
Uma maneira bem comum de guardar suas informações é
fazer da seguinte forma:
• Salvar as variáveis de instancia(Somente o necessário) no
método onSaveInstanceState;
• Após o evento de mudança, Recuperar as varáveis ou no
método onCreate ou no método onRestoreInstanceState;
10. Exemplo
Perceba que existe um if @Override
public void onCreate(Bundle savedInstanceState) {
dentro do método onCreate
super.onCreate (savedInstanceState);
testando se o bundle é nullo. if( savedInstanceState != null ){
Quando acontecer de não ser // recupere os valores do bundle
nulo, possivelmente houve um }
evento de mudança de }
@Override
configuração.
public void onSaveInstanceState(Bundle savedInstanceState) {
super.onSaveInstanceState(savedInstanceState);
savedInstanceState.putString("MyInstanceVariable", variable);
}
@Override
public void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
variable = savedInstanceState.getString("MyInstanceVariable");
}
11. Recuperando a Activity mas Pensando
no usuário.
Algumas vezes podemos encontrar situações em
que reiniciar a aplicação e recuperar uma porção
de informação pode ser algo custoso, nesse caso
podemos pensar nas seguintes alternativas :
Manter um objeto durante uma mudança de
configuração;
Tratar a mudança de Configuração na própria
Atividade.
12. Mantendo um Objeto durante uma
mudança de configuração
Para reter um objeto durante uma mudança de
configuração, basta :
Sobrescrever o método
onRetainNonConfigurationInstance() para retornar o
objeto que nos gostariamos de manter;
Quando a atividade é criada novamente, bata chamar
o método getLastNonConfigurationInstance() para
recuperar o objeto.
13. Tratando você mesmo a mudança de
Configuração
Isso vai acontecer nos casos em que:
• Você não precisa atualizar nenhum recurso;
• Você possui uma limitação de desempenho;
Mas cuidado, essa técnica deve ser usada em ultimo
estágio, e ela não é recomendada para a maioria das
aplicações.
14. Exemplo
Alterar o exemplo abaixo
para fazer uso do método:
getLastNonConfigurationInstance()
Ex: Aula02_ConfigChange.zip
Tratar os eventos:
• LandScape
• Portrait
15. Tratando você mesmo a mudança de
Configuração
Para declarar que você vai tratar as mudanças de configuração
basta fazer :
– Declarar o atributo android:configChanges dentro da tag
<activity> do AndroidManifest.xml;
– Declarar qual ou quais mudanças você quer tratar por sua
propria conta, por exemplo: orientation, keyboardHidden;
– Sobrescrever o método
onConfigurationChanged(Configuration config);
16. Exemplo
Alterar o exemplo abaixo
para fazer uso de
Android:ConfigChanges.
Ex: Aula02_ConfigChange.zip
Tratar os eventos:
• LandScape
• Portrait
18. Aplicando Estilos
No arquivo AndroidManifest.xml você declara o estilo :
Dentro da pasta values, basta criar o arquivo style.xml com o conteúdo :
19. Activity como Dialogo
È possivel fazer com que uma activity se pareça
com um dialog, apenas trocando o estilo no
Arquivo Android AndroidManifest.xml.
Ex:
Aula02_ActivityAsDialog.zip
Trecho relevante :
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@android:style/Theme.Dialog" >
20. Dialogos
Pequena janela que pede do usuario alguma decisão ou
pede a ele alguma informação Adicional.
21. Subclasses de “Dialog”
Evite instanciar a classe Dialog diretamente, ao invés você
deve utilizar uma de suas subclasses :
– AlertDialog
– DatePickerDialog
– TimePickerDialog
Ou se precisar criar um Dialog ainda mais personalizado, você
deve utilizar DialogFragment;
Analisar o exemplo Aula2_DisplayingADialog.zip.
Maiores informações acesse: pagina oficial.
22. Entendendo Intents
Representam uma descrição abstrata de uma
operação.
Pode ser utilizado pelo método startActivity()
para disparar uma mensagem de broadcast que e
executada por qualquer broadcast receiver
interessado.
Pode ser utilizado pelo método
bindService(Intent, ServiceConnection, int) para
comunicar com qualquer “service” em
background.
23. Estrutura fundamental de um Intent
No geral um “intent” é composto por duas partes fundamentais, a ação e os dados.
(Action) A ação geral a ser executada, exemplo :
• ACTION_VIEW
• ACTION_EDIT
• ACTION_MAIN
(Data) A informação a ser trabalhada, tal como uma pessoa no registro de banco de
dados, essas inforações são expressas através de uma URI. Alguns exemplos de pares
action/data são:
• ACTION_VIEW content://contacts/people/1
• ACTION_DIAL content://contacts/people/1
• ACTION_VIEW tel:123
• ACTION_DIAL tel:123
• ACTION_EDIT content://contacts/people/1
• ACTION_VIEW content://contacts/people/
• ACTION_VIEW content://contacts/N
Consultar a pagina do google sobre intent.
24. Outros atributos de um intent
category - fornece algumas informações adicionais a respeito a ação a ser
executada, por exemplo:
CATEGORY_LAUNCHER significa que deve aparecer como uma Top-
Level application, normalmente como um icone da lista de
programas(default).
CATEGORY_ALTERNATIVE significa que deve aparecer na lista de
programas alternativos.
type - Especifica um tipo explicito (um tipo MIME) para os dados sendo
passsados.
component - Expecifica um nome explicito ao componente.
extras - Um Bundle com informações adicionais, no caso de um email
podemos incluir aqui partes como o corpo do email, assunto, remetende e
destinatário.
25. Chamando outras Activities
No android, você pode navegar entre activities
usando “intents” das seguintes formas:
Passando apenas a ação (Forma implicita) :
Intent intent = new Intent("com.example.callinganotheractivity.SecondActivity");
startActivity( intent );
Dentro do mesmo projeto, então podemos fazer (Forma explicita):
Intent intent = new Intent( this, SecondActivity.class );
startActivity( intent );
26. Passando e recuperando parametros
entre Activities
É possivel passar um “bundle” com os parametros para a activity
sendo chamada, Além disso, é possivel esperar pelo resultado de
outra activity utilizando o método startActivityForResult.
Com startActivityForResult você chama uma outra atividade
esperando por um retorno.
No callback onActivityResult() você recupera o valor fornecido
pela activity chamada.
Analisar o exemplo: Aula02_CallingAnotherActivity.zip
27. Intent Filters
Ajuda o android a saber se o componente
atende ao intent :
<intent-filter>
<action android:name="com.example.callinganotheractivity.SecondActivity" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
28. Intent Resolution
Somente três aspectos são consultados
quando o android precisar resolver o intent
informado, são eles:
– action
– data (both URI and data type)
– category
29. Notifications
È possivel notificar o usuário sobre uma
informação importante utilizando “Toasts”.
Ex: Toast.makeText(this, “Texto para o usuário”,
Toast.LENGTH_SHORT).show();
Contudo, a notificação se perde depois de alguns segundos, uma segunda
forma ainda mais persistente e elegante é o sistema de notificações do
android fornecido pela classe NotificationManager.
30. NotificationManager
Classe que serve para notificar que alguma
coisa aconteceu em background;
As notificações podem assumir diferentes
formas
- Um ícone persistente na status bar que ao ser clicado pode disparar um intent;
- Ligando e desligando LEDs no device;
- Alerta com o flash da câmera, tocando um som ou vibração.
Analisar o exemplo: Aula02_DisplayANotification.zip
31. Conceitos úteis
NotificationManager é a classe principal para
iteragir com o serviço de notificações do android.
Um objeto “PendingIntent” ajuda a realizar uma
ação em nome do aplicativo, muitas vezes em um
momento posterior, independentemente se a
aplicação esta ou não rodando.