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

ATP Portugal

October 28, 2020
Tweet

More Decks by ATP Portugal

Other Decks in Programming

Transcript

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

    View Slide

  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

    View Slide

  3. Andres-Leonardo
    Martinez-Ortiz
    Google
    Carlos Mota
    Formador
    Renato Almeida
    Formador
    @davilagrau @cafonsomota @tallnato
    Equipa
    Daniela Ferreira
    Gestora de
    comunidades

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  7. http://events.withgoogle.com/atp2020
    [email protected]
    http://bit.ly/atp2020-youtube
    http://bit.ly/atp2020-discord
    Links

    View Slide

  8. View Slide

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

    View Slide

  10. Resumo da Aula #1

    View Slide

  11. Aula #1
    ● Plataforma Android
    ● Passaporte para a Google
    ● Criar uma aplicação
    ● Kotlin para principiantes
    ● Doce ou travessura

    View Slide

  12. Photo by Fidel Fernando on Unsplash

    View Slide

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

    View Slide

  14. View Slide

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

    View Slide

  16. VS
    Ronda 1

    View Slide

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

    View Slide

  18. Aula #2

    View Slide

  19. Application
    Manifest

    View Slide

  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

    View Slide

  21. AndroidManifest.xml
    xmlns:android="http://schemas.android.com/apk/res/android"
    package="pt.atp.bobi">
    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">
    ...


    View Slide

  22. Package
    xmlns:android="http://schemas.android.com/apk/res/android"
    package="pt.atp.bobi">
    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">
    ...


    View Slide

  23. Application
    xmlns:android="http://schemas.android.com/apk/res/android"
    package="pt.atp.bobi">
    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">
    ...


    View Slide

  24. Activity










    View Slide

  25. Activity










    View Slide

  26. Activity










    View Slide

  27. Activity










    View Slide

  28. Permissões




    ...

    View Slide

  29. Serviços



    ...

    ...


    View Slide

  30. Outros elementos...







    ...


    View Slide

  31. Activities

    View Slide

  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

    View Slide

  33. Ciclo de vida

    View Slide

  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

    View Slide

  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)

    View Slide

  36. Correeeee...
    Início
    onCreate
    onResume
    App a
    correr

    View Slide

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

    View Slide

  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

    View Slide

  39. Início
    onCreate
    onResume
    App a
    correr
    onPause
    onDestroy
    Fim ☠
    Fiiimmmmm…..

    View Slide

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

    View Slide

  41. Para criar uma Activity
    ● Classe que estenda Activity
    ● Adicionar a Activity no AndroidManifest
    // AndroidManifest.xml


    android:name=".BobiActivity">



    View Slide

  42. ● Classe que estenda Activity
    ● Adicionar a Activity no AndroidManifest
    ● Layout
    Para criar uma Activity
    // activity_bobi.xml
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    ...

    View Slide

  43. Fragments

    View Slide

  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

    View Slide

  45. Ciclo de vida

    View Slide

  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

    View Slide

  47. Fragment

    View Slide

  48. Fragment

    View Slide

  49. Fragment

    View Slide

  50. Fragment

    View Slide

  51. Fragment

    View Slide

  52. Fragment

    View Slide

  53. Fragment
    Fragment A

    View Slide

  54. Fragment
    Fragment A
    Fragment B

    View Slide

  55. Intents

    View Slide

  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

    View Slide

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

    View Slide

  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

    View Slide

  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

    View Slide

  60. Intents
    lançar uma nova activity
    fun openSecondActivity(){
    val intent = Intent(this, SecondActivity::class.java)
    startActivity(intent)
    }

    View Slide

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

    View Slide

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

    View Slide

  63. Navegação

    View Slide

  64. Navegação
    ● Diferentes tipos de navegação
    ○ Lançando activities da própria aplicação
    ○ Entre diferentes fragmentos
    ○ Acedendo a outras aplicações

    View Slide

  65. Navegação
    entre diferentes fragmentos

    View Slide

  66. Navegação
    entre activities

    View Slide

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

    View Slide

  68. Passaporte para
    a Google

    View Slide

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

    View Slide

  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/

    View Slide

  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/

    View Slide

  72. Creating alerts for roles

    View Slide

  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

    View Slide

  74. Passaporte para
    a Google

    View Slide

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

    View Slide

  76. Kotlin para
    principiantes
    ‍♀

    View Slide

  77. VS
    Ronda 2

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  84. Doce ou
    travessura
    Photo by Beth Teutschmann on Unsplash

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  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

    View Slide

  89. Pesquisa
    procurar por um método, variável, etc.

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  93. Pesquisa
    abrir um ficheiro

    View Slide

  94. Pesquisa
    abrir um ficheiro
    shift shift
    +

    View Slide

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

    View Slide

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

    View Slide

  97. Trabalho Para Casa
    ‍‍

    View Slide

  98. Trabalho para casa
    ● Ao carregar num botão
    ○ Mostrar um AlertDialog
    ○ Mostrar uma Snackbar

    View Slide

  99. Dúvidas?

    View Slide

  100. Obrigado
    ‍♀

    View Slide

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

    View Slide