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. • 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
  2. Andres-Leonardo Martinez-Ortiz Google Carlos Mota Formador Renato Almeida Formador @davilagrau

    @cafonsomota @tallnato Equipa Daniela Ferreira Gestora de comunidades
  3. • 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
  4. #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 ✅
  5. 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
  6. Aula #1 • Plataforma Android • Passaporte para a Google

    • Criar uma aplicação • Kotlin para principiantes • Doce ou travessura
  7. • 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
  8. 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>
  9. 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>
  10. 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>
  11. 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>
  12. Outros elementos... <manifest ...> <supports-screens .../> <uses-configuration .../> <uses-feature />

    <supports-screens /> <application ...> <receiver ... /> ... </application> </manifest>
  13. • 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
  14. 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
  15. 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)
  16. 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()
  17. 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
  18. Para criar uma Activity • Classe que estenda Activity //

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

    Adicionar a Activity no AndroidManifest // AndroidManifest.xml <manifest ...> <application ...> <activity android:name=".BobiActivity"> </activity> </application> </manifest>
  20. • 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>
  21. • 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
  22. • 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
  23. 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
  24. Intents diferentes tipos de ações fun openDialer(phone: String){ val intent

    = Intent(Intent.ACTION_DIAL) startActivity(intent) } ACTION_DIAL
  25. 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
  26. 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
  27. Intents lançar uma nova activity fun openSecondActivity(){ val intent =

    Intent(this, SecondActivity::class.java) startActivity(intent) }
  28. 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) }
  29. 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() }
  30. Navegação • Diferentes tipos de navegação ◦ Lançando activities da

    própria aplicação ◦ Entre diferentes fragmentos ◦ Acedendo a outras aplicações
  31. 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/
  32. 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/
  33. 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
  34. 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
  35. 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
  36. 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
  37. 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
  38. Trabalho para casa • Ao carregar num botão ◦ Mostrar

    um AlertDialog ◦ Mostrar uma Snackbar