Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Android Training Program - Portugal, Aula 2

Android Training Program - Portugal, Aula 2

Aula #2: Fundações I 🏗

Depois de criarem a vossa primeira aplicação, o que se segue? O que são estes ficheiros e classes? O que é uma Activity?
- Activities e Fragments
- Arquitetura Android
- Manifest
- Intents
- Navigation

9e9eb825c69d719f2d3c32bdd3bc971e?s=128

ATP Portugal

October 28, 2020
Tweet

Transcript

  1. Android Training Program PORTUGAL Aula #2 Fundações I

  2. • Sejam excelentes uns para os outros • Fale mais

    alto se vir ou ouvir alguma coisa • O assédio não é tolerado • Pratique "Sim e" um ao outro Código de conduta Mais informações: http://bit.ly/2IhF0l3
  3. Andres-Leonardo Martinez-Ortiz Google Carlos Mota Formador Renato Almeida Formador @davilagrau

    @cafonsomota @tallnato Equipa Daniela Ferreira Gestora de comunidades
  4. • 12 aulas • 1h30 cada aula • ~1 aula

    por semana • 14 Outubro a 16 Dezembro • YouTube live • Suporte assíncrono contínuo via Discord/email • Todo o código disponível no GitHub Photo by Arif Riyanto on Unspla O programa
  5. #0 14 de Outubro Pronto para começar #1 21 de

    Outubro Bem-vindos ao Android #2 28 de Outubro Fundações I #3 04 de Novembro Fundações II #4 11 de Novembro Fundações III #5 18 de Novembro Listas, listas e mais listas #6 25 de Novembro Jetpack, Jetpack, Jetpack! #7 - #8 02 - 03 de Dezembro Firebase #9 - #10 09 - 10 de Dezembro MLKit & TensorFlow #11 16 de Dezembro Resumo Semana Semana Calendário ✅ Direto ✅
  6. Sumário Photo by Mika Baumeister on Unsplash • Resumo da

    aula anterior • Passaporte para a Google • Uma pausa com Android 4.4 • Kotlin para principiantes • Doce ou travessura
  7. http://events.withgoogle.com/atp2020 ✉ atp-suporte@googlegroups.com http://bit.ly/atp2020-youtube http://bit.ly/atp2020-discord Links

  8. None
  9. http://bit.ly/atp2020-codelabs

  10. Resumo da Aula #1

  11. Aula #1 • Plataforma Android • Passaporte para a Google

    • Criar uma aplicação • Kotlin para principiantes • Doce ou travessura
  12. Photo by Fidel Fernando on Unsplash

  13. Bolsas Estágios Programas Recursos Constrói o teu futuro! https://buildyourfuture.withgoogle.com/

  14. None
  15. https://github.com/android-training-program/aula-0

  16. VS Ronda 1

  17. https://developer.android.com/courses

  18. Aula #2

  19. Application Manifest

  20. • Descrição da aplicação (ícon, nome, tema) • Definição dos

    componentes da aplicação (activities, serviços, etc.) • Permissões • Requisitos de hardware • E mais…. Application Manifest
  21. AndroidManifest.xml <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="pt.atp.bobi"> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true"

    android:theme="@style/Theme.Bobi"> ... </application> </manifest>
  22. Package <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="pt.atp.bobi"> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true"

    android:theme="@style/Theme.Bobi"> ... </application> </manifest>
  23. Application <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="pt.atp.bobi"> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true"

    android:theme="@style/Theme.Bobi"> ... </application> </manifest>
  24. Activity <manifest ...> <application ...> <activity android:name="pt.atp.bobi.MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN"/>

    <category android:name="android.intent.category.LAUNCHER"/> </intent-filter> </activity> </application> </manifest>
  25. Activity <manifest ...> <application ...> <activity android:name="pt.atp.bobi.MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN"/>

    <category android:name="android.intent.category.LAUNCHER"/> </intent-filter> </activity> </application> </manifest>
  26. Activity <manifest ...> <application ...> <activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN"/>

    <category android:name="android.intent.category.LAUNCHER"/> </intent-filter> </activity> </application> </manifest>
  27. Activity <manifest ...> <application ...> <activity android:name="pt.atp.bobi.MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN"/>

    <category android:name="android.intent.category.LAUNCHER"/> </intent-filter> </activity> </application> </manifest>
  28. Permissões <manifest ...> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.CAMERA" /> <uses-permission

    android:name="android.permission.RECORD_AUDIO" /> ... </manifest>
  29. Serviços <manifest ...> <application ...> <service android:name=".CanineService" ...> ... </service>

    ... </application> </manifest>
  30. Outros elementos... <manifest ...> <supports-screens .../> <uses-configuration .../> <uses-feature />

    <supports-screens /> <application ...> <receiver ... /> ... </application> </manifest>
  31. Activities

  32. • Representa um ecrã da aplicação • Providencia uma interface

    gráfica para o utilizador interagir • Podem ser lançadas de diferentes formas ◦ Ao carregar no ícone da aplicação ◦ Ao navegar entre diferentes ecrãs ◦ Por uma aplicação externa ◦ etc. Activity
  33. Ciclo de vida

  34. Características: • Primeiro método a ser executado • É executado

    uma única vez Utilizado para: • Define a interface gráfica ◦ O layout que vai ser carregado (imagens, texto, botões, etc.) • Inicialização de variáveis imutáveis onCreate() Início onCreate
  35. onResume() Início onCreate onResume Características: • Último método executado antes

    da aplicação estar pronta para o utilizador interagir • Pode ser executado várias vezes Utilizado para: • Registo de listeners • Início de funcionalidades contínuas (mapa, vídeo, etc)
  36. Correeeee... Início onCreate onResume App a correr

  37. onPause() Início onCreate onResume App a correr onPause Características: •

    Primeiro método executado quando a aplicação deixa de estar disponível • Também pode ser executado várias vezes • “Oposto” do onResume() Utilizado para: • Cancelar o registo de listeners • Parar as tarefas iniciadas no onResume()
  38. onDestroy() Início onCreate onResume App a correr onPause onDestroy Fim

    ☠ Características: • Último método a ser executado antes da Activity ser destruída Utilizado para: • Limpar recursos que estejam ainda a ser utilizados
  39. Início onCreate onResume App a correr onPause onDestroy Fim ☠

    Fiiimmmmm…..
  40. Para criar uma Activity • Classe que estenda Activity //

    BobiActivity.kt class BobiActivity : Activity() { ... } utilizamos “//” para colocarmos comentários no código
  41. Para criar uma Activity • Classe que estenda Activity •

    Adicionar a Activity no AndroidManifest // AndroidManifest.xml <manifest ...> <application ...> <activity android:name=".BobiActivity"> </activity> </application> </manifest>
  42. • Classe que estenda Activity • Adicionar a Activity no

    AndroidManifest • Layout Para criar uma Activity // activity_bobi.xml <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> ... </LinearLayout>
  43. Fragments

  44. • Representa um comportamento ou porção da interface do utilizador

    • Permite isolar e reutilizar partes gráficas e lógica • Contida sempre numa activity • Podemos ter múltiplos fragments numa activity e um fragmento pode ser utilizado por várias activities • Tem o seu próprio ciclo de vida, muito parecido com o de uma Activity Fragment
  45. Ciclo de vida

  46. • onCreateView() ◦ Chamado quando é necessário desenhar a interface

    de utilizador • onAttach() ◦ Quando o fragment é colocado numa Activity • onDettach() ◦ Quando o fragment é removido de uma Activity • onPause(), onResume(), etc Ciclo de vida Início onAttach onCreateView Fragmento visível onDestroy onDetach Fim
  47. Fragment

  48. Fragment

  49. Fragment

  50. Fragment

  51. Fragment

  52. Fragment

  53. Fragment Fragment A

  54. Fragment Fragment A Fragment B

  55. Intents

  56. Intents • Uma abstração de uma operação a ser executada

    por outro componente ◦ Iniciar uma nova activity ◦ Iniciar um serviço ◦ Enviar mensagem para outra aplicação • Um intent é definido de acordo com os seguintes parâmetros: ◦ Ação - A ação a ser executada (ACTION_VIEW, ACTION_DIAL, etc) ◦ Dados - Os dados necessários para a ação
  57. Intents diferentes tipos de ações fun openDialer(phone: String){ val intent

    = Intent(Intent.ACTION_DIAL) startActivity(intent) } ACTION_DIAL
  58. Intents diferentes tipos de ações fun openDialer(phone: String){ val intent

    = Intent(Intent.ACTION_DIAL) intent.data = Uri.parse("tel:$phone") startActivity(intent) } ACTION_DIAL +351990000001
  59. Intents diferentes tipos de ações fun openWebsite(phone: String){ val intent

    = Intent(Intent.ACTION_VIEW) intent.data = Uri.parse("https://www.android.com") startActivity(intent) } ACTION_VIEW
  60. Intents lançar uma nova activity fun openSecondActivity(){ val intent =

    Intent(this, SecondActivity::class.java) startActivity(intent) }
  61. Intents lançar uma nova activity private const val REQUEST_CAMERA =

    100 fun takePicture() { val intent = Intent(MediaStore.ACTION_IMAGE_CAPTURE) startActivityForResult(intent, REQUEST_CAMERA) }
  62. Intents lançar uma nova activity private const val REQUEST_CAMERA =

    100 fun takePicture() { val intent = Intent(MediaStore.ACTION_IMAGE_CAPTURE) startActivityForResult(intent, REQUEST_CAMERA) } override fun onActivityResult(req: Int, result: Int, data: Intent?) { if (resultCode == RESULT_OK && requestCode == REQUEST_CAMERA) Toast.makeText(context, "Nova foto disponível", LENGTH_SHORT).show() }
  63. Navegação

  64. Navegação • Diferentes tipos de navegação ◦ Lançando activities da

    própria aplicação ◦ Entre diferentes fragmentos ◦ Acedendo a outras aplicações
  65. Navegação entre diferentes fragmentos

  66. Navegação entre activities

  67. Navegação entre diferentes aplicações

  68. Passaporte para a Google

  69. Bolsas Estágios Programas Recursos Constrói o teu futuro! https://buildyourfuture.withgoogle.com/

  70. 1. Self-reflection 2. Job searching 3. Your resume 4. Apply

    online 5. Interviews 6. Decision and offer Our hiring process careers.google.com/how-we-hire/
  71. It’s tempting to take your last resume and update it,

    tweaking it a bit here and there to include your latest work. But we’d like to suggest that you go a little deeper — we think you’ll feel much better about your hiring process if you do. For each position do the following to build your job-specific resume: • Align your skills and experience with the job description. Tie your work directly to the role qualifications (and don’t forget to include data). • Be specific about projects you’ve worked on or managed. What was the outcome? How did you measure success? When in doubt, lean on the formula, “accomplished [X] as measured by [Y], by doing [Z].” • If you've had a leadership role, tell us about it. How big was the team? What was the scope of your work? • If you're a recent university graduate or have limited work experience, include school-related projects or coursework that demonstrate relevant skills and knowledge. • Keep it short. Your resume careers.google.com/how-we-hire/
  72. Creating alerts for roles

  73. Resources Google’s Tech Dev Guide g.co/techdevguide Excellent resources for interview

    and resume prep + skills development “Google Students” YouTube Channel Watch our videos to receive tips and information from other Googlers Careers OnAir careersonair.withgoogle.com On-demand and live events to learn more about life, culture, and work at Google Additional Resource g.co/buildyourfuture
  74. Passaporte para a Google

  75. Abre o Android Studio e vamos começar a programar ‍‍

  76. Kotlin para principiantes ‍♀

  77. VS Ronda 2

  78. Dog bobi = new Dog("Bobi"); Dog lacy = new Dog("Lacy");

    Log.d("O meu cão é o "+ bobi.getName()); val bobi = Dog("Bobi") val lacy = Dog("Lacy") Log.d("O meu cão é o " + bobi.name) Strings interpolação
  79. Dog bobi = new Dog("Bobi"); Dog lacy = new Dog("Lacy");

    Log.d("O meu cão é o "+ bobi.getName()); val bobi = Dog("Bobi") val lacy = Dog("Lacy") Log.d("O meu cão é o ${bobi.name}") Strings interpolação
  80. Dog bobi = new Dog("Bobi"); Dog lacy = new Dog("Lacy");

    Log.d("O meu cão é o "+ bobi.getName()); val bobi = Dog("Bobi") val lacy = Dog("Lacy") Log.d("O meu cão é o $bobi") Strings interpolação
  81. Dog bobi = new Dog("Bobi"); val bobi: Dog = Dog("Bobi")

    Variáveis declaração
  82. Dog bobi = new Dog("Bobi"); val bobi: Dog = Dog("Bobi")

    Variáveis declaração
  83. Dog bobi = new Dog("Bobi"); val bobi = Dog("Bobi") Variáveis

    declaração
  84. Doce ou travessura Photo by Beth Teutschmann on Unsplash

  85. Imports val intent = Intent(MediaStore.ACTION_IMAGE_CAPTURE) startActivityForResult(intent, CAMERA_REQUEST)

  86. Imports val intent = Intent(MediaStore.ACTION_IMAGE_CAPTURE) startActivityForResult(intent, CAMERA_REQUEST) Unresolved reference: Intent

  87. Imports import android.content.Intent val intent = Intent(MediaStore.ACTION_IMAGE_CAPTURE) startActivityForResult(intent, CAMERA_REQUEST) Sugestão:

    Alt Enter +
  88. Imports import android.content.Intent val intent = Intent(MediaStore.ACTION_IMAGE_CAPTURE) startActivityForResult(intent, CAMERA_REQUEST) Sugestão:

    Preferences → Editor → General → Auto Import Selecciona: ✅ Optimize imports on the fly ✅ Add unambiguous imports on the fly
  89. Pesquisa procurar por um método, variável, etc.

  90. Pesquisa procurar por um método, variável, etc. cmd shift +

    f +
  91. Pesquisa procurar por um método, variável, etc. ctrl shift +

    f +
  92. Pesquisa procurar por um método, variável, etc.

  93. Pesquisa abrir um ficheiro

  94. Pesquisa abrir um ficheiro shift shift +

  95. ClipboardManager histórico área de transferência cmd shift + v +

  96. ClipboardManager histórico área de transferência ctrl shift + v +

  97. Trabalho Para Casa ‍‍

  98. Trabalho para casa • Ao carregar num botão ◦ Mostrar

    um AlertDialog ◦ Mostrar uma Snackbar
  99. Dúvidas?

  100. Obrigado ‍♀

  101. Android Training Program PORTUGAL Aula #3 Fundações II Próxima aula:

    04 de Novembro