Android app communication

7,924 views
7,954 views

Published on

The talk will present the model of communication between applications, called Intent, which allows you to request services from other applications and to provide services for use by any other application in the Android environment.

Published in: Technology, Business
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
7,924
On SlideShare
0
From Embeds
0
Number of Embeds
9
Actions
Shares
0
Downloads
69
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Android app communication

  1. 1. Comunicação entre aplicações Android @eloijr http://eloisjr.blogspot.com
  2. 2. Eloi Jr <ul><li>Iniciou na área mobile em 2005
  3. 3. Palestrou em diversos eventos de TI
  4. 4. Escreveu artigos técnicos
  5. 5. Trabalha com Java ME e Android
  6. 6. Possui uma app no GetJar com + 50K downloads
  7. 7. Projeto hospedado no java.net: Tranqueira
  8. 8. Empreendedor no Maranhão!?!?? </li></ul>
  9. 9. Arquitetura <ul><li>Activity
  10. 10. Intent (declaração e filtro de intenção)
  11. 11. BroadcastReceiver
  12. 12. Notification
  13. 13. Service </li></ul>
  14. 14. Activity <ul><li>Controla os eventos e define a View
  15. 15. Uma tela para cada Activity
  16. 16. Activity stack
  17. 17. Conceito presente em todas as aplicações Android </li></ul>
  18. 18. O Android trata todas as Activity's da mesma forma: nativas ou criadas pelo desenvolvedor!
  19. 19. Questão sobre Activity's <ul><li>Como navegar entre várias Activity's de uma mesma aplicação?
  20. 20. Como chamar Activity's nativas do Android? </li></ul>
  21. 21. Resposta Única! Intent!
  22. 22. Intent <ul><li>Mensagem enviada ao S.O. (broadcast)
  23. 23. Descrição abstrata de uma operação a ser realizada
  24. 24. Activity, BroadcastReceiver e Service </li></ul>
  25. 25. Intent e Activity 1: Activity simples Intent it = new Intent(this, ClasseActivity2.class); startActivity(it); 2: Activity enviando parâmetros Intent it = new Intent(this, ClasseActivity2.class); it.putExtras(“codigo”, “1”); startActivity(it);
  26. 26. Intent e Activity 3: Activity recebendo parâmetros Intent it = getIntent(); if (it != null) { String codigo = it.getStringExtra(“codigo”); if (codigo != null) { // AQUI JÁ TEM O CÓDIGO RECEBIDO } }
  27. 27. Intent e Activity com retorno 4: Activity com retorno Intent 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); }
  28. 28. 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);
  29. 29. 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);
  30. 30. 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);
  31. 31. Chamando Apps Nativas 4/5 8: Fazer uma ligação: Uri u = Uri.parse(“tel:9981115328”); Intent it = new Intent( Intent.ACTION_CALL , u); startActivity(it);
  32. 32. 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);
  33. 33. Permissões no AndroidManifest.xml <ul><li>android.permission.RECEIVE_SMS
  34. 34. android.permission.SEND_SMS
  35. 35. android.permission.CALL_PHONE
  36. 36. android.permission.READ_CONTACTS
  37. 37. android.permission.VIBRATE
  38. 38. android.permission.RECEIVE_BOOT_COMPLETED
  39. 39. android.permission.ACCESS_FINE_LOCATION </li></ul>
  40. 40. Intent e Activity 10: Chamada usando o nome de uma ação: Intent it = new Intent( “ATIVIDADE1” ); startActivity(it);
  41. 41. Activity com Ação Definida É necessário existir uma Activity com a ação ATIVIDADE1 definida para atender ao chamado e ser executada!
  42. 42. Definição de uma Ação 6: AndroidManifest.xml <activity android:name=”Atividade1”> <intent-filter> <action android:name= ”ATIVIDADE1” /> <category android:name = ”android.intent.category.DEFAULT” /> </intent-filter> </activity>
  43. 43. Uma ação de um filtro de intenção Uma ação é definida dentro do arquivo AndroidManisfest.xml utilizando a tag <intent-filter> e deve ter pelo menos uma categoria, DEFAULT!
  44. 44. Envio de Mensagem por uma Intent Quando uma Intent envia uma mensagem ao S.O., este tenta localizar algum filtro de intenção (intent-filter) devidamente configurado para receber a mesma mensagem!
  45. 45. Filtro de Intenção O filtro de intenção para uma determinada ação pode estar definido em qualquer aplicação ou Activity nativa do S.O. ou criada pelo desenvolvedor!
  46. 46. Filtro de Intenção Além do nome da ação, um filtro de intenção pode definir ainda uma categoria específica e um conjunto de dados de entrada que o identifica unicamente no S.O.
  47. 47. Filtro de Intenção <ul><li>Activity com mesma ação e categoria? </li></ul>O S.O. o questionará sobre qual Activity executar!
  48. 48. Alguns Filtros Nativos <ul><li>android.provider.telephony.SMS_RECEIVED
  49. 49. android.intent.category.HOME
  50. 50. android.intent.action.CALL_BUTTON
  51. 51. android.intent.action.BOOT_COMPLETED </li></ul>
  52. 52. O Android permite que qualquer aplicação nativa seja substituída, bastando para isso adicionar um filtro de intenção correto no AndroidManifest.xml!
  53. 53. HOME's Personalizadas
  54. 54. BroadcastReceiver <ul><li>Responde a eventos enviados por uma Intent
  55. 55. Não utiliza interface gráfica
  56. 56. Sem comunicação com o usuário
  57. 57. Timeout de 10 seg
  58. 58. Boas práticas: uso de Notification e Service </li></ul>
  59. 59. Enviando um Broadcast SuaActivity.sendBroadcast(new Intent( “BR” ));
  60. 60. Recebendo um BroadcastReceiver 1: Configurar o receptor no AndroidManifest.xml <receiver android:name=”Rec”> <intent-filter> <action android:name= ”BR” /> <category android:name = ”android.intent.category.DEFAULT”/> </intent-filter> </receiver>
  61. 61. Recebendo um BroadcastReceiver 2: Definição da classe Rec public class Rec extends BroadcastReceiver { @override public void onReceive(Context c, Intent it) { // execute algo rapidamente aqui } }
  62. 62. Dicas de uso do BroadcastReceiver <ul><li>Um BroadCastReceiver deve interagir com o usuário apenas através da classe Notification
  63. 63. Para executar tarefas que demandam tempo e processamento, deve ser utilizando a classe Service. </li></ul>
  64. 64. Notification <ul><li>Mensagem especial na barra de status
  65. 65. O usuário decide quando vê-la!
  66. 66. A atividade atual do usuário não deve ser interrompida
  67. 67. Uma notificação pode disparar uma Activity
  68. 68. É necessário cancelá-la após sua visualização
  69. 69. Exemplos: SMS, chat, updates e etc. </li></ul>
  70. 70. Notification: Uso 1: Recupera o serviço NotificationManager nm = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); 2: Gera um Notification Notification n = new Notification(icone, MS_BARRASTATUS, System.currentTimeMillis());
  71. 71. Notification: Uso 3: Activity a ser executada PendingIntent p = PendingIntent.getActivity (this, 0, new Intent(this, acNotifica ), 0); 4: Informações n.setLatestEventInfo(this, TITULO, MSG, p);
  72. 72. Notification: Uso 4: Algum efeito? Vibrate? n.vibrate = new long[] {100, 250, 100, 500}; 5: Posta a notificação na barra de status nm.notify(R.string.app_name, n);
  73. 73. Notification: Uso 5: Encerra a notificação na Activity receptora ( acNotifica ) nm.cancel(R.string.app_name);
  74. 74. Service <ul><li>Executar processamento em segundo plano
  75. 75. Geralmente iniciado a partir de um BroadcastReceiver
  76. 76. O Android gerencia o seu clico de vida juntamente com outros processos
  77. 77. Somente é encerrado pelo S.O. em casos extremos
  78. 78. Cada serviço deve iniciar sua própria thread </li></ul>
  79. 79. @eloijr http://eloisjr.blogspot.com Referências: http://developer.android.com Google Android – Ricardo R. Lecheta

×