Comunicao entre aplicaes Android
@eloijr
http://eloisjr.blogspot.com
Eloi Jr
Iniciou na rea mobile em 2005
Palestrou em diversos eventos de TI
Escreveu artigos tcnicos
Trabalha com Java ME e Android
Possui uma app no GetJar com + 50K downloads
Projeto hospedado no java.net: Tranqueira
Empreendedor no Maranho!?!??
Arquitetura
Activity
Intent (declarao e filtro de inteno)
BroadcastReceiver
Notification
Service
Activity
Controla os eventos e define a View
Uma tela para cada Activity
Activity stack
Conceito presente em todas as aplicaes Android
O Android trata todas as Activity's da mesma forma: nativas ou criadas pelo desenvolvedor!
Questo sobre Activity's
Como navegar entre vrias Activity's de uma mesma aplicao?
Como chamar Activity's nativas do Android?
Resposta nica!
Intent!
Intent
Mensagem enviada ao S.O. (broadcast)
Descrio abstrata de uma operao a ser realizada
Activity, BroadcastReceiver e Service
Intent e Activity
1: Activity simplesIntent it = new Intent(this, ClasseActivity2.class);startActivity(it);
2: Activity enviando parmetrosIntent it = new Intent(this, ClasseActivity2.class);it.putExtras(codigo, 1);startActivity(it);
Intent e Activity
3: Activity recebendo parmetrosIntent it = getIntent();if (it != null) { String codigo = it.getStringExtra(codigo); if (codigo != null) { // AQUI J TEM O CDIGO RECEBIDO }}
Intent e Activity com retorno
4: Activity com retornoIntent it = new Intent(this, ClasseActivity2.class);startActivityForResult(it, CODIGO_ACTIVITY);...protected void onActivityResult(int codigo, int resultado, Intent it) {// it.getData(); it.getExtras() ; getIntExtras(x,1);}
Chamando Apps Nativas 1/5
5: Tocar um mp3 na web:Uri u = Uri.parse(http://music.com/Black.mp3);Intent it = new Intent(Intent.ACTION_VIEW, u);it.setType(audio/*);startActivity(it);
Chamando Apps Nativas 2/5
6: Visualizar os contatos:Uri u = Uri.parse(content://com.android.contacts/contacs/ );Intent it = new Intent(Intent.ACTION_PICK, u);startActivity(it);
Chamando Apps Nativas 3/5
7: Abrir Google Maps na rea 51:Uri u = Uri.parse(geo: 37.240000,-115.810000);Intent it = new Intent(Intent.ACTION_VIEW, u);startActivity(it);
Chamando Apps Nativas 4/5
8: Fazer uma ligao:Uri u = Uri.parse(tel:9981115328);Intent it = new Intent(Intent.ACTION_CALL, u);startActivity(it);
Chamando Apps Nativas 5/5
9: Abrir o browser:Uri u = Uri.parse(http://www.runze.com.br);Intent it = new Intent(Intent.ACTION_VIEW, u);startActivity(it);
Permisses no AndroidManifest.xml
android.permission.RECEIVE_SMS
android.permission.SEND_SMS
android.permission.CALL_PHONE
android.permission.READ_CONTACTS
android.permission.VIBRATE
android.permission.RECEIVE_BOOT_COMPLETED
android.permission.ACCESS_FINE_LOCATION
Intent e Activity
10: Chamada usando o nome de uma ao:
Intent it = new Intent(ATIVIDADE1);startActivity(it);
Activity com Ao Definida
necessrio existir uma Activity com a ao ATIVIDADE1 definida para atender ao chamado e ser executada!
Definio de uma Ao
6: AndroidManifest.xml
Uma ao de um filtro de inteno
Uma ao definida dentro do arquivo AndroidManisfest.xml utilizando a tag e deve ter pelo menos uma categoria, DEFAULT!
Envio de Mensagem por uma Intent
Quando uma Intent envia uma mensagem ao S.O., este tenta localizar algum filtro de inteno (intent-filter) devidamente configurado para receber a mesma mensagem!
Filtro de Inteno
O filtro de inteno para uma determinada ao pode estar definido em qualquer aplicao ou Activity nativa do S.O. ou criada pelo desenvolvedor!
Filtro de Inteno
Alm do nome da ao, um filtro de inteno pode definir ainda uma categoria especfica e um conjunto de dados de entrada que o identifica unicamente no S.O.
Filtro de Inteno
Activity com mesma ao e categoria?
O S.O. o questionar sobre qual Activity executar!
Alguns Filtros Nativos
android.provider.telephony.SMS_RECEIVED
android.intent.category.HOME
android.intent.action.CALL_BUTTON
android.intent.action.BOOT_COMPLETED
O Android permite que qualquer aplicao nativa seja substituda, bastando para isso adicionar um filtro de inteno correto no AndroidManifest.xml!
HOME's Personalizadas
BroadcastReceiver
Responde a eventos enviados por uma Intent
No utiliza interface grfica
Sem comunicao com o usurio
Timeout de 10 seg
Boas prticas: uso de Notification e Service
Enviando um Broadcast
SuaActivity.sendBroadcast(new Intent(BR));
Recebendo um BroadcastReceiver
1: Configurar o receptor no AndroidManifest.xml
Recebendo um BroadcastReceiver
2: Definio da classe Recpublic class Rec extends BroadcastReceiver { @override public void onReceive(Context c, Intent it) { // execute algo rapidamente aqui }}
Dicas de uso do BroadcastReceiver
Um BroadCastReceiver deve interagir com o usurio apenas atravs da classe Notification
Para executar tarefas que demandam tempo e processamento, deve ser utilizando a classe Service.
Notification
Mensagem especial na barra de status
O usurio decide quando v-la!
A atividade atual do usurio no deve ser interrompida
Uma notificao pode disparar uma Activity
necessrio cancel-la aps sua visualizao
Exemplos: SMS, chat, updates e etc.
Notification: Uso
1: Recupera o servioNotificationManager nm = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
2: Gera um NotificationNotification n = new Notification(icone, MS_BARRASTATUS, System.currentTimeMillis());
Notification: Uso
3: Activity a ser executadaPendingIntent p = PendingIntent.getActivity (this, 0, new Intent(this, acNotifica), 0);
4: Informaesn.setLatestEventInfo(this, TITULO, MSG, p);
Notification: Uso
4: Algum efeito? Vibrate?n.vibrate = new long[] {100, 250, 100, 500};
5: Posta a notificao na barra de statusnm.notify(R.string.app_name, n);
Notification: Uso
5: Encerra a notificao na Activity receptora (acNotifica)nm.cancel(R.string.app_name);
Service
Executar processamento em segundo plano
Geralmente iniciado a partir de um BroadcastReceiver
O Android gerencia o seu clico de vida juntamente com outros processos
Somente encerrado pelo S.O. em casos extremos
Cada servio deve iniciar sua prpria thread
@eloijr
http://eloisjr.blogspot.com
Referncias:http://developer.android.comGoogle Android Ricardo R. Lecheta
Top Related