atividades e intenções (android)

32
Aula 02 (Android Basico)

Upload: natanael-fonseca

Post on 31-May-2015

3.504 views

Category:

Technology


1 download

TRANSCRIPT

Page 1: Atividades e Intenções (Android)

Aula 02(Android Basico)

Page 2: Atividades e Intenções (Android)

Activities e Intents

Natanael FonsecaArquiteto de Software

Site Pessoal: www.natanaelfonseca.com.br

Page 3: Atividades e Intenções (Android)

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);

Page 4: Atividades e Intenções (Android)

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;

Page 5: Atividades e Intenções (Android)

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;

Page 6: Atividades e Intenções (Android)

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

Page 7: Atividades e Intenções (Android)

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:

Page 8: Atividades e Intenções (Android)

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().

Page 9: Atividades e Intenções (Android)

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;

Page 10: Atividades e Intenções (Android)

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.

Page 11: Atividades e Intenções (Android)

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.

Page 12: Atividades e Intenções (Android)

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.

Page 13: Atividades e Intenções (Android)

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.

Page 14: Atividades e Intenções (Android)

Exemplo

Alterar o exemplo abaixopara fazer uso do método:getLastNonConfigurationInstance()

Ex: Aula02_ConfigChange.zip

Tratar os eventos: • LandScape• Portrait

Page 15: Atividades e Intenções (Android)

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);

Page 16: Atividades e Intenções (Android)

Exemplo

Alterar o exemplo abaixopara fazer uso deAndroid:ConfigChanges.

Ex: Aula02_ConfigChange.zip

Tratar os eventos: • LandScape• Portrait

Page 17: Atividades e Intenções (Android)

Aplicando Temas

No arquivo AndroidManifest.xml você coloca o tema:

Page 18: Atividades e Intenções (Android)

Aplicando Estilos

No arquivo AndroidManifest.xml você declara o estilo :

Dentro da pasta values, basta criar o arquivo style.xml com o conteúdo :

Page 19: Atividades e Intenções (Android)

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" >

Page 20: Atividades e Intenções (Android)

Dialogos

Pequena janela que pede do usuario alguma decisão ou pede a ele alguma informação Adicional.

Page 21: Atividades e Intenções (Android)

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.

Page 22: Atividades e Intenções (Android)

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.

Page 23: Atividades e Intenções (Android)

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.

Page 24: Atividades e Intenções (Android)

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.

Page 25: Atividades e Intenções (Android)

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 );

Page 26: Atividades e Intenções (Android)

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

Page 27: Atividades e Intenções (Android)

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>

Page 28: Atividades e Intenções (Android)

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

Page 29: Atividades e Intenções (Android)

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.

Page 30: Atividades e Intenções (Android)

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

Page 31: Atividades e Intenções (Android)

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.

Page 32: Atividades e Intenções (Android)

Referencias

Beginning Android™ Application Development, Wei-Meng Lee, Wiley 2011. Android Training : http://developer.android.com/training/index.html.