View
3.504
Download
1
Category
Preview:
Citation preview
Aula 02(Android Basico)
Activities e Intents
Natanael FonsecaArquiteto de Software
Site Pessoal: www.natanaelfonseca.com.br
EmentaO 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);
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;
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 atividadeestá 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 sistemapara economizar memória)
onRestart() — Chamado quando a atividade foi parada(Stopped) e restartada novamente;
Exemplo Exemplo
Aula02_Lifecycle.zip Trecho relevante
@Overrideprotected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);Log.d( TAG, "onCreate()");setContentView(R.layout.main);
}
@Overrideprotected void onPause() {
super.onPause();Log.d(TAG, "onPause()");
}
@Overrideprotected void onResume() {
super.onResume();Log.d(TAG, "onResume()");
}
Tratar os eventos: • Sleep• Home Buttom• Orientação
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:
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().
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;
Exemplo
@Overridepublic void onCreate(Bundle savedInstanceState) { super.onCreate (savedInstanceState); if( savedInstanceState != null ){ // recupere os valores do bundle }}@Overridepublic void onSaveInstanceState(Bundle savedInstanceState) { super.onSaveInstanceState(savedInstanceState); savedInstanceState.putString("MyInstanceVariable", variable);}@Overridepublic void onRestoreInstanceState(Bundle savedInstanceState) { super.onRestoreInstanceState(savedInstanceState); variable = savedInstanceState.getString("MyInstanceVariable");}
Perceba que existe um if dentro do método onCreate testando se o bundle é nullo.Quando acontecer de não ser nulo, possivelmente houve um evento de mudança de configuração.
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.
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.
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.
Exemplo
Alterar o exemplo abaixopara fazer uso do método:getLastNonConfigurationInstance()
Ex: Aula02_ConfigChange.zip
Tratar os eventos: • LandScape• Portrait
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);
Exemplo
Alterar o exemplo abaixopara fazer uso deAndroid:ConfigChanges.
Ex: Aula02_ConfigChange.zip
Tratar os eventos: • LandScape• Portrait
Aplicando Temas
No arquivo AndroidManifest.xml você coloca o tema:
Aplicando Estilos
No arquivo AndroidManifest.xml você declara o estilo :
Dentro da pasta values, basta criar o arquivo style.xml com o conteúdo :
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" >
Dialogos
Pequena janela que pede do usuario alguma decisão ou pede a ele alguma informação Adicional.
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.
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.
Estrutura fundamental de um IntentNo 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.
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.
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 );
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
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>
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
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.
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
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.
Referencias
Beginning Android™ Application Development, Wei-Meng Lee, Wiley 2011. Android Training : http://developer.android.com/training/index.html.
Recommended