A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Curso de Android Fevereiro de 2011 Cristiano Expedito Ribeiro

Apresentações semelhantes


Apresentação em tema: "Curso de Android Fevereiro de 2011 Cristiano Expedito Ribeiro"— Transcrição da apresentação:

1 Curso de Android Fevereiro de 2011 Cristiano Expedito Ribeiro
Fabrício Firmino de Faria

2 Agenda das próximas aulas [excluir]
Intent filter BroadcastReceiver, Threads, Services e Notification AlarmManager e Handler Banco de Dados e ContentProvider Mapas de GPS Sockets e Web Services Projeto

3 Agenda da Aula 2 Intent filter Aplicações em segundo plano
BroadcastReceiver Threads e Services Notification AlarmManager Handler Banco de Dados Introdução: Tabelas e SQL SQLite ContentProvider Mapas de GPS

4 Intent Filter Criação de filtros que determinam quais Intents devem ser executadas para cada mensagem <activity android:name=".HelloActivity" <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> Action = MAIN Diz que activity é um ponto de partida, semelhante ao public static void main() da Java Category = LAUNCHER Indica que o ícone da activity deverá aparecer na tela pode ser aberta pelo usuário

5 IntentFilter - Exercício 17
Volte ao projeto LayoutSamples Abra o AndroidManifest.xml Remova o elemento <action> e salve Tente rodar a aplicação pelo eclipse Tente rodar a aplicação pelo menu do emulador Desfaça a remoção (Ctrl+Z) Remove o elemento <category> e salve Tente rodar a aplicação Tente rodar a aplicação. Apenas com os dois elementos que a aplicação rodará normalmente.

6 Ações de Intent úteis Lembra das ações “nativas” do Android? Action
URI - chamar Uri.parse(uri) Descrição ACTION_VIEW Abre browser na página ACTION_VIEW ACTION_EDIT content://com.android.contacts/contacts/1 Mostra ou edita o contato solicitado geo:0,0?q=Presidente+Vargas,Rio+de+Janeiro Busca no Google Maps ACTION_CALL ACTION_DIAL tel: Liga ou apenas disca para o número ACTION_INSERT content://com.android.contacts/contacts Abre activity padrão para inserir contatos ACTION_PICK ContactsContract.Contacts.CONTENT_URI Abre lista de contatos do celular ACTION_SET_WALLPAPER - Abre lista para escolha de papéis de parede

7 Ações de Intent – Exercício 18
Crie um novo projeto chamado IntentFilterTest Experimente chamar activities usando a tabela anterior Exemplo: Uri uri = Uri.parse("content://com.android.contacts/contacts"); Intent intent = new Intent(Intent.ACTION_INSERT, uri); startActivity(intent); intent = new Intent(Intent.ACTION_SET_WALLPAPER); Experimente também: Intent intent = new Intent(Intent.ACTION_WEB_SEARCH); intent.putExtra(SearchManager.QUERY, "Maria"); Sim, você pode passar parâmetros via Intent, dependendo de qual ação está sendo executada!

8 Ações de Intent – Exercício 18
ACTION_CALL não irá funcionar pois é necessário pedir permissão através do AndroidManifest.xml Adicione esta permissão e tente novamente <uses-permission android:name="android.permission.CALL_PHONE”/> Outras permissões úteis android.permission.READ_CONTACTS android.permission.VIBRATE android.permission.INTERNET android.permission.BATTERY_STATS android.permission.BLUETOOTH android.permission.CAMERA android.permission.REBOOT android.permission.SEND_SMS Além disso, para usar o Google Maps é necessário rodar o emulador com Google Maps.

9 Categorias e parâmetros para Intent
Algumas vezes Ação e URI não são suficientes É possível adicionar tantas categorias e parâmetros extras quanto forem necessários, além de outros dados: Os métodos setData() e setType() são antagônicos, ou seja, chamar um deles implica em limpar o outro. Método da Intent Descrição addCategory(String) Adiciona mais uma categoria à Intent putExtra(String, ...) Adiciona um parâmetro à Intent setData(Uri) Define o Uri. Equivalente ao parâmetro URI do construtor setType(String) Define o tipo MIME: text/plain, image/jpeg, etc setFlags(int) addFlags(int) Define os flags da Intent. Um flag útil é o FLAG_ACTIVITY_NEW_TASK, que faz a activity iniciar numa nova tarefa setAction(String) Define a ação desta intent. Note que, diferentemente de categorias e extras, apenas uma ação pode ser definida por intent.

10 Substituindo ações nativas
Tecla Home <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.HOME"/> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> Tecla discar (call) <action android:name="android.intent.action.CALL_BUTTON" /> Intent.ACTION_SEARCH <action android:name="android.intent.action.SEARCH" /> Intent.ACTION_WEB_SEARCH <action android:name="android.intent.action.WEB_SEARCH" />

11 Ações nativas - Exercícios 19 e 20
Crie um projeto IntentFilterNativeSubst Modifique o manifest e rode a aplicação para cada exemplo do slide anterior Exercício 20 Após o último exemplo (web search) edite o projeto IntentFilterTest para chamar web search: intent = new Intent(Intent.ACTION_WEB_SEARCH); intent.putExtra(SearchManager.QUERY, "Maria"); startActivity(intent); Execute IntentFilterTest Veja que o emulador irá perguntar qual aplicação executar

12 Ações e categorias próprias e filtragem
Para criar as próprias ações e categorias, faça: Configurá-las no manifest usando <intent-filter> Criar a Intent e executá-la Isto pode ser feito na mesma aplicação ou não Filtragem Ao executar uma Intent, uma activity só rodará caso seu intent-filter satisfaça a ação e todas as categorais definidas na Intent. Exemplos: Considere intent-filter: ACAO1, CATEG1, CATEG2 Intent: ACAO1, CATEG1  Executa Intent: ACAO1, CATEG1, CATEG2  Executa Intent: ACAO1, CATEG3  Não executa!

13 Ações próprias e filtragem – Exercício 21
No manifest de IntentFilterNativeSubst <action android:name="com.example.intentfilter.nativesubst.ACTION" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="com.example.intentfilter.nativesubst.CATEG1" /> <category android:name="com.example.intentfilter.nativesubst.CATEG2" /> Dê play na aplicação IntentFilterNativeSubst para instalá-la, note que nada rodará na tela, pois não há MAIN e LAUNCHER Em IntentFilterTest intent = new Intent("com.example.intentfilter.nativesubst.ACTION"); intent.addCategory("com.example.intentfilter.nativesubst.CATEG1"); intent.addCategory("com.example.intentfilter.nativesubst.CATEG2"); startActivity(intent); Rode IntentFilterTest e IntentFilterNativeSubst rodará Remova CATEG2 do manifest e repita a operação...

14 BroadcastReceiver Chamado pelo Android para reagir a mensagens broadcast Usado para executar tarefas rápidas em segundo plano Não interromper o usuário por meio de activities Use notificações! (Serão explicadas em breve) O que são mensagens broadcasts? São mensagens enviadas pelo Android quando ocorre algum evento do sistema ou de uma aplicação Interceptada pelos BroadcastReceiver’s apropriados Definido pelos <intent-filter>

15 Tipos de broadcast Ordered ou Síncrono Normal ou Assíncrono
Os receivers são executados em sequência e a falha de um interrompe o processamento dos demais Não está no escopo deste curso Normal ou Assíncrono Todos os receivers executam simultaneamente em paralelo e de forma independente Método para disparar: Context.sendBroadcast(Intent) BroadcastReceiver1 Mensagem Evento ... BroadcastReceiverN

16 Configurando um receiver
É necessário adicionar o elemento <receiver> dentro de <aplication> no AndroidManifest.xml <receiver android:name="NomeReceiver"> <intent-filter> <action android:name="com.example.broadcastreceiver.ACTION"/> <category android:name="android.intent.category.DEFAULT"/> </intent-filter> </receiver> Implementar uma classe filha de BroadcastReceiver com o callback onReceive(Context, Intent) public class NomeReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { // ... } Atenção: onReceive deve retornar em menos de 10 s.

17 Disparando mensagens broadcast
Criar uma Intent com a mensagem Enviar via Context.sendBroadcast(Intent) Context é uma classe base de activity, logo o método pode ser chamado diretamente Intent intent = new Intent("com.example.broadcastreceiver.ACTION"); sendBroadcast(intent);

18 Broadcast Receiver – Exercício 22
Crie um projeto chamado ReceiverTest Crie um broadcast conforme slide anterior Dentro do método onReceive escreva algo no log Edite o projeto IntentFilterTest para enviar o broadcast

19 Mensagens broadcast do sistema
Mensagens broadcast enviadas apenas pelo sistema Não podem ser enviadas pelo método sendBroadcast() * Requer permissão android.permission.RECEIVE_BOOT_COMPLETED ** Não podem ser usados com <intent-filter> serão mostrados em breve android.intent.action Condição de envio (pelo sistema) WALLPAPER_CHANGED Papel de parece alterado BOOT_COMPLETED* Sistema concluiu o bootstrap ACTION_SHUTDOWN Sistema está desligando (antes de desligar o aparelho) BATTERY_CHANGED** Estado de carga da bateria mudou BATTERY_LOW Estado de carga da bateria baixo BATTERY_OKAY Estado de carga da bateria voltou a níveis normais ACTION_POWER_CONNECTED Carregador conectado ACTION_POWER_DISCONNECTED Carregador desconectado

20 Mensagens broadcast do sistema
** Não podem ser usados com <intent-filter> serão mostrados em breve android.intent.action.* Condição de envio (pelo sistema) TIME_SET Data e/ou hora do sistema foram alterados TIMEZONE_CHANGED Fuso horário foi modificado TIME_TICK** Hora do sistema mudou normalmente (enviado a cada minuto) SCREEN_ON Tela do dispositivo acendeu (estava inativa, mas usuário ativou) SCREEN_OFF Tela do dispositivo apagou (normal para economizar bateria) PACKAGE_ADDED Uma nova aplicação foi instalada no dispositivo PACKAGE_REMOVED Uma aplicação foi removida do dispositivo PACKAGE_REPLACED Uma aplicação foi substituída. Normalmente por upgrade de versão. PACKAGE_RESTARTED Uma aplicação foi reiniciada, tendo seus processados terminados. PACKAGE_DATA_CLEARED Dados de uma aplicação foram apagados. Enviado após PACKAGE_RESTARTED

21 Broadcast de sistema – Exercício 23
Adicione mais um receiver no projeto ReceiverTest <receiver android:name="WallpaperReceiver"> <intent-filter> <action android:name="android.intent.action.WALLPAPER_CHANGED" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </receiver> Adicione o seguinte no callback onReceive() Log.i(this.getClass().getCanonicalName(), intent.getAction()); Instale a aplicaçao Tenta mudar o papel de parede no emulador Menu > Wallpaper > Wallpapers Analise o LogCat.

22 Configuração de receivers via código
Indicado quando um receiver deve executar apenas quando uma acitivity está executando É possível registrar dinamicamente via código registerReceiver(BroadcastReceiver, Intent) unregisterReceiver(BroadcastReceiver) Recomendável: Registrar em Activity.onCreate() ou onResume() Desregistrar no Activity.onDestroy() ou onPause() Note que são necessários para actions TIME_TICK e BATTERY_CHANGED da tabela

23 Threads


Carregar ppt "Curso de Android Fevereiro de 2011 Cristiano Expedito Ribeiro"

Apresentações semelhantes


Anúncios Google