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

Android Training Program - Portugal, Aula 2

ATP Portugal
October 28, 2020

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 full-size 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 full-size slide

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

    View full-size 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 full-size 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 full-size 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 full-size slide

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

    View full-size slide

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

    View full-size slide

  9. Resumo da Aula #1

    View full-size slide

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

    View full-size slide

  11. Photo by Fidel Fernando on Unsplash

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  15. Application
    Manifest

    View full-size slide

  16. ● 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 full-size slide

  17. 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 full-size slide

  18. 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 full-size slide

  19. 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 full-size slide

  20. Permissões




    ...

    View full-size slide

  21. Serviços



    ...

    ...


    View full-size slide

  22. Outros elementos...







    ...


    View full-size slide

  23. ● 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 full-size slide

  24. Ciclo de vida

    View full-size slide

  25. 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 full-size slide

  26. 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 full-size slide

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

    View full-size slide

  28. 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 full-size slide

  29. 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 full-size slide

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

    View full-size slide

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

    View full-size slide

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


    android:name=".BobiActivity">



    View full-size slide

  33. ● 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 full-size slide

  34. ● 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 full-size slide

  35. Ciclo de vida

    View full-size slide

  36. ● 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 full-size slide

  37. Fragment
    Fragment A

    View full-size slide

  38. Fragment
    Fragment A
    Fragment B

    View full-size slide

  39. 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 full-size slide

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

    View full-size slide

  41. 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 full-size slide

  42. 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 full-size slide

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

    View full-size slide

  44. 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 full-size slide

  45. 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 full-size slide

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

    View full-size slide

  47. Navegação
    entre diferentes fragmentos

    View full-size slide

  48. Navegação
    entre activities

    View full-size slide

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

    View full-size slide

  50. Passaporte para
    a Google

    View full-size slide

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

    View full-size slide

  52. 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 full-size slide

  53. 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 full-size slide

  54. Creating alerts for roles

    View full-size slide

  55. 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 full-size slide

  56. Passaporte para
    a Google

    View full-size slide

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

    View full-size slide

  58. Kotlin para
    principiantes
    ‍♀

    View full-size slide

  59. 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 full-size slide

  60. 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 full-size slide

  61. 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 full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  65. Doce ou
    travessura
    Photo by Beth Teutschmann on Unsplash

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  69. 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 full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  74. Pesquisa
    abrir um ficheiro

    View full-size slide

  75. Pesquisa
    abrir um ficheiro
    shift shift
    +

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  78. Trabalho Para Casa
    ‍‍

    View full-size slide

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

    View full-size slide

  80. Obrigado
    ‍♀

    View full-size slide

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

    View full-size slide