Baixe o app para aproveitar ainda mais
Prévia do material em texto
desenvolvimento de aplicativos móveis Prof. ME. rICArDo VIEIrA Reitor: Prof. Me. Ricardo Benedito de Oliveira Pró-Reitoria Acadêmica: Maria Albertina Ferreira do Nascimento Diretoria EAD: Prof.a Dra. Gisele Caroline Novakowski PRODUÇÃO DE MATERIAIS Diagramação: Alan Michel Bariani Thiago Bruno Peraro Revisão Textual: Fernando Sachetti Bomfim Marta Yumi Ando Olga Ozaí da Silva Simone Barbosa Produção Audiovisual: Adriano Vieira Marques Márcio Alexandre Júnior Lara Osmar da Conceição Calisto Gestão de Produção: Cristiane Alves © Direitos reservados à UNINGÁ - Reprodução Proibida. - Rodovia PR 317 (Av. Morangueira), n° 6114 Prezado (a) Acadêmico (a), bem-vindo (a) à UNINGÁ – Centro Universitário Ingá. Primeiramente, deixo uma frase de Só- crates para reflexão: “a vida sem desafios não vale a pena ser vivida.” Cada um de nós tem uma grande res- ponsabilidade sobre as escolhas que fazemos, e essas nos guiarão por toda a vida acadêmica e profissional, refletindo diretamente em nossa vida pessoal e em nossas relações com a socie- dade. Hoje em dia, essa sociedade é exigente e busca por tecnologia, informação e conheci- mento advindos de profissionais que possuam novas habilidades para liderança e sobrevivên- cia no mercado de trabalho. De fato, a tecnologia e a comunicação têm nos aproximado cada vez mais de pessoas, diminuindo distâncias, rompendo fronteiras e nos proporcionando momentos inesquecíveis. Assim, a UNINGÁ se dispõe, através do Ensino a Distância, a proporcionar um ensino de quali- dade, capaz de formar cidadãos integrantes de uma sociedade justa, preparados para o mer- cado de trabalho, como planejadores e líderes atuantes. Que esta nova caminhada lhes traga muita experiência, conhecimento e sucesso. Prof. Me. Ricardo Benedito de Oliveira REITOR 33www.uninga.br unidade 01 sumário da unidade introdução ............................................................................................................................................................. 5 1. introdução À computação móvel .............................................................................................................. 6 1.1 uma breve introdução ao paradigma orientado a objetos (poo) ............................................... 6 1.1.1 sobre as classes ........................................................................................................................................... 8 1.1.2 instanciação .................................................................................................................................................. 8 1.1.3 reutilização ................................................................................................................................................... 9 1.1.4 Herança ............................................................................................................................................................ 9 2. Histórico e as principais plataFormas móveis atuais .................................................................... 9 2.1 a História do sistema operacional android ....................................................................................... 9 2.2. a História do ios .......................................................................................................................................... 10 2.3 Falando sobre o ipHone e ipod toucH .................................................................................................. 10 introdução ao desenvolvimento móvel Prof. ME. rICArDo VIEIrA Ensino a distância DISCIPLINA: DESENVOLVIMENTO DE APLICATIVOS MÓVEIS 4www.uninga.br 3. projeto de interFaces para dispositivos móveis .............................................................................. 13 3.1 design de interFace de usuário do android ...................................................................................... 13 3.2 usando classes activity, view e viewgroup ..................................................................................... 13 3.2.1 activity ........................................................................................................................................................... 13 3.2.2 view ................................................................................................................................................................ 14 3.2.3 viewgroup .................................................................................................................................................... 15 3.3 como as classes activity, view e viewgroup se relacionam ..................................................... 16 consideraçÕes Finais ....................................................................................................................................... 19 5www.uninga.br DE SE NV OL VI M EN TO D E AP LI CA TI VO S M ÓV EI S | u ni Da DE 1 EDUCAÇÃO A DistânCiA introdução Caro(a) aluno(a)! Esta unidade inicia os estudos com uma breve introdução sobre a Computação Móvel; com o avanço da tecnologia, os dispositivos móveis, com sua grande capacidade de computação, têm se tornado mais eficientes do que um computador pessoal. Veremos, nesta unidade, uma recapitulação sobre o Paradigma Orientado a Objetos (POO). Abordaremos as principais características da POO, como, por exemplo, o que é um objeto e o que são atributos. Veremos que uma hierarquia de objetos é como uma estrutura de árvore, com um tronco principal, ramos e sub-ramos conforme você move para cima (ou para baixo) sua estrutura. Veremos também as Classes, que realizam o encapsulamento dos dados e abstrações procedurais necessárias para descrever o conteúdo e comportamento de alguma entidade do mundo real, mais alguns conceitos, que são de extrema importância para a Programação Orientada a Objetos. Nesta unidade, convidamos você a também estudar o histórico das duas principais plataformas móveis com os dois principais Sistemas Operacionais que dominam o mercado mundial: o iOS da Apple e o Sistema Operacional Android do Google. E, por fim, teremos uma visão geral sobre projetos de interfaces para dispositivos móveis, em particular, sobre o design de interface de usuário do Android, destacando as classes Activity, View e ViewGroup. Chegou a grande batalha! Vamos com tudo contra o lado Sombrio da ignorância! Venha para o lado da Luz do Conhecimento! A batalha para o conhecimento! May the force be with you! Divirta-se e bons estudos! 6www.uninga.br DE SE NV OL VI M EN TO D E AP LI CA TI VO S M ÓV EI S | u ni Da DE 1 EDUCAÇÃO A DistânCiA 1. introdução À computação móvel A computação pessoal continua a se tornar mais “pessoal”, pois os computadores estão se tornando cada vez mais acessíveis a qualquer hora e em qualquer lugar. Na vanguarda desse avanço, estão os dispositivos móveis, que estão se transformando em plataformas de computação. Os smartphones não são mais apenas para falar – eles são capazes de transportar dados e vídeo há algum tempo. Mais significativamente, o dispositivo móvel, com sua grande capacidade de computação, acabou se tornando mais eficiente do que um PC. A plataforma Android adota totalmente essa ideia de computação de uso geral para dispositivos móveis. Na verdade, ela é uma plataforma abrangente que apresenta uma pilha de Sistemas Operacionais, baseado em Linux, para gerenciar dispositivos, memória e processos. As bibliotecas do Android cobrem telefonia, vídeo, gráficos, programação de UI (Interface de Usuário) e todos os outros aspectos do dispositivo físico. A plataforma Android, embora construída para dispositivos móveis, exibe as características de uma estrutura de desktop com recursos completos. O Google disponibiliza essa estrutura para programadores Java por meio de um kit de desenvolvimento de software chamado Android SDK. Quando você está trabalhando como Android SDK, raramente sente que está escrevendo para um dispositivo móvel, porque tem acesso à maioria das bibliotecas de classes que usa em um desktop ou servidor – incluindo um banco de dados relacional. Com um pouco de conhecimento e esforço, você também pode escrever aplicativos Android. Para escrever bons aplicativos, no entanto, você precisará cavar mais fundo, entender os fundamentos da arquitetura Android, entender como os aplicativos podem funcionar juntos, entender como os aplicativos móveis são diferentes de todas as formas anteriores de programação (MACLEAN; KOMATINENI; ALLEN, 2015). Atualmente, você verá dispositivos com Sistema Operacional Android de todos os tamanhos e formas em todos os lugares. Eles podem ser usados em suas roupas, graças ao Android WEAR; em um aparelho televisivo, graças ao Android TV; e eles fazem parte do seu carro, graças ao Android AUTO. Os dispositivos Android proporcionarão entretenimento em sua sala de estar na forma de seu aparelho de iTV; irão ajudá-lo a aprender na escola usando um tablet; permitirão uma boa leitura na cama com seu e-book; ou usar um console de jogos Android, como OUYA, Razer Forge ou nVidia Shield (JACKSON, 2017). 1.1 uma breve introdução ao paradigma orientado a objetos (poo) A principal característica do Paradigma Orientado a Objetos (POO) é uma maior e melhor expressividade das necessidades do nosso dia a dia. Possibilita criar uma unidade de código mais próxima da forma como pensamos e agimos, assim facilitando o processo de transformação das necessidades diárias para uma linguagem orientada a objeto (PRESSMAN, 2011). A base do POO é, segundo nos apresenta Jackson (2017), o próprio objeto. Tudo o que você criar em Java será um objeto e usará outros objetos (e valores primitivos de dados). Os objetos em linguagens POO são semelhantes aos objetos que você vê ao seu redor todos os dias, exceto que os objetos Java são virtuais e não são tangíveis, já que os computadores usarão zeros e uns (binários) para representar as coisas. Assim como os objetos tangíveis do mundo real, os objetos Java têm características, chamadas estados ou atributos, e coisas que eles fazem, chamadas comportamentos. Uma maneira de pensar sobre essa distinção é que os objetos Java são substantivos, ou coisas que existem por si mesmas, enquanto seus comportamentos são como verbos, ou coisas que esses substantivos podem fazer. 7www.uninga.br DE SE NV OL VI M EN TO D E AP LI CA TI VO S M ÓV EI S | u ni Da DE 1 EDUCAÇÃO A DistânCiA Como exemplo de objetos Java, vamos definir um objeto Java, baseado em um objeto real, popular, que vemos ao nosso redor todos os dias em nossas vidas: o automóvel. Algumas das características, ou estados, do automóvel comum podem ser definidas da seguinte forma: • Cor (vermelho maçã, por exemplo); • Direção ou rumo (norte, sul, leste ou oeste); • Velocidade (45 km por hora, por exemplo); • Tipo de motor (gás, diesel, biocombustível, hidrogênio, propano, elétrico ou híbrido); • Configuração de marcha (1, 2, 3, 4, 5, 6 ou reverso); • Tipo de trem de força (2WD ou 4WD). A seguir, estão algumas coisas que você pode fazer com um carro, ou seja, os comportamentos do carro: • Acelerar; • Mudar de marcha; • Frenar; • Virar as rodas; • Ligar o rádio; • Acender os faróis • Usar as setas. Você entendeu a ideia? Os objetos podem ser tão complicados quanto você deseja, e os objetos Java podem aninhar, ou conter, outros objetos Java em sua estrutura de objeto, assim como o XML. Uma hierarquia de objetos é como uma estrutura de árvore, com um tronco principal, ramos e sub-ramos conforme você move para cima (ou para baixo) sua estrutura. Um exemplo de hierarquia que você usa todos os dias seria seu diretório de vários níveis, ou estrutura de pastas, que está no disco rígido do seu computador. Os diretórios ou pastas, em sua unidade de disco rígido, podem conter outros diretórios ou pastas, que, por sua vez, podem conter ainda outros diretórios e pastas, permitindo que hierarquias complexas de organização sejam criadas. A Figura 1 mostra o diagrama simples “Anatomia de um Objeto de Carro” da estrutura do objeto Java, usando um carro como exemplo. Ele mostra as características, ou atributos, do carro, que são centrais para definir o objeto carro e, em torno delas, os comportamentos que o objeto carro pode realizar e que afetam as mudanças nos atributos ou estados do carro. Os estados e comportamentos servem para definir o carro para o mundo exterior, assim como seus objetos de aplicativo definirão os estados e comportamentos em relação à funcionalidade de seu aplicativo Android para seus usuários finais. É tudo muito lógico (JACKSON, 2017). 8www.uninga.br DE SE NV OL VI M EN TO D E AP LI CA TI VO S M ÓV EI S | u ni Da DE 1 EDUCAÇÃO A DistânCiA Figura 1 - Um objeto de carro que mostra os atributos ou características do carro (oval interno) e os comportamen- tos do carro (oval externo). Fonte: Adaptado do modelo de Jackson (2017). Você pode fazer essa mesma construção hierárquica usando objetos Java, que podem conter sub-objetos, que podem conter outros sub-objetos e assim por diante, conforme necessário para criar sua estrutura de hierarquia de objeto. Você verá hierarquias de objetos aninhados quando estiver trabalhando com Android, porque os objetos aninhados são muito úteis para agrupar objetos relacionados que são usados juntos, mas que são usados em mais de um lugar, bem como para mais de um tipo de uso. Afinal, um dos objetivos do código modular, na programação orientada a objetos, é promover a reutilização de código eficaz (JACKSON, 2017). Em outras palavras, alguns tipos de objetos também serão úteis para outros tipos de objetos em um aplicativo Android. Você verá exemplos disso nas próximas unidades. 1.1.1 Sobre as Classes Classe é um conceito orientado a objeto que faz o encapsulamento dos dados e abstrações procedurais necessárias para descrever o conteúdo e comportamento de alguma entidade do mundo real. Abstrações de dados que descrevem a classe são envolvidas por uma “parede” de abstrações procedurais capazes de manipular de certa maneira os dados. Em uma classe bem projetada, a única maneira de atingir os atributos e operar sobre eles é passar por um dos métodos que formam essa “parede” (PRESSMAN, 2011). 1.1.2 Instanciação Segundo nos apresenta os irmãos Deitel (DEITEL; DEITEL; DEITEL, 2015), da mesma maneira como alguém precisa construir um carro a partir de seus desenhos de engenharia antes que você possa dirigi-lo, será preciso construir um objeto de uma classe antes que um programa possa executar as tarefas que os métodos da classe definem. Esse processo é chamado de Instanciação. Um objeto é uma instância de sua classe. 9www.uninga.br DE SE NV OL VI M EN TO D E AP LI CA TI VO S M ÓV EI S | u ni Da DE 1 EDUCAÇÃO A DistânCiA 1.1.3 reutilização Continuando com os irmãos Deitel (DEITEL; DEITEL; DEITEL, 2015), da mesma maneira como os projetos de engenharia de um carro podem ser reutilizados muitas vezes para a produção de muitos carros, podemos reutilizar uma classe muitas vezes para construir muitos objetos. A reutilização de classes já existentes, ao construir novas classes e programas, economiza tempo e trabalho. Com a reutilização, também se ajuda a construir sistemas mais confiáveis e eficientes, porque as classes e os componentes já existentes frequentemente passaram por extensivos testes, depuração e otimização de desempenho. Da mesma maneira como a noção de partes intercambiáveis foi fundamental para a Revolução Industrial, as classes reutilizáveis são fundamentais para a revolução na área de software estimulada pela tecnologia de objetos. 1.1.4 Herança Uma nova classe de objetos pode ser criada rápida e convenientemente por meio de Herança. A nova classe absorve as características de outra classe já existente, possivelmente personalizando-as e adicionandosuas próprias características exclusivas. Em nossa analogia automobilística, um conversível certamente será um objeto da classe mais geral “automóvel”, porém, mais especificamente, o teto poderá ser levantado ou abaixado (DEITEL; DEITEL; DEITEL, 2015). 2. Histórico e as principais plataFormas móveis atuais 2.1 a História do sistema operacional android O sistema operacional Android, segundo nos apresenta Jackson (2017), foi originalmente criado por Andy Rubin para ser um sistema operacional para telefones móveis. Isso aconteceu por volta do início do século 21. Em julho de 2005, o Google adquiriu o Android e tornou Andy Rubin o vice-presidente sênior de plataformas móveis do Google, onde permaneceu até novembro de 2014. Muitos acham que a aquisição do sistema operacional Android pelo Google foi, em grande parte, em resposta ao surgimento do iPhone da Apple, na mesma época. No entanto, havia muitos outros grandes players, como RIM Blackberry, Nokia Symbian e Microsoft Windows Mobile, que isso foi considerado uma decisão de negócios inteligente para o Google adquirir o talento de engenharia do Android Incorporated junto com sua propriedade intelectual do Sistema Operacional Android. Isso permitiu ao Google inserir sua empresa de mecanismo de busca da Internet no mercado móvel emergente, que muitos agora chamam de Internet 2.0. A Internet 2.0, ou Internet Móvel, continuando com Jackson (2017), permite que os usuários de produtos eletrônicos de consumo acessem conteúdos por meio de redes de dados amplamente variadas, usando dispositivos eletrônicos portáteis de consumo. Atualmente, eles incluem tablets, smartphones, phablets (um híbrido telefone-tablet), consoles de jogos, smartwatches, smartglasses, robôs pessoais, drones, câmeras e e-books. Hoje em dia, os dispositivos baseados no sistema operacional Android também incluirão aqueles dispositivos eletrônicos de consumo não tão portáteis, como aparelhos de TV, centros de mídia domésticos, painéis de automóveis, aparelhos de som automotivos, tocadores de música, eletrodomésticos, instalações de controle doméstico e sistemas decodificadores de sinalização digital. 10www.uninga.br DE SE NV OL VI M EN TO D E AP LI CA TI VO S M ÓV EI S | u ni Da DE 1 EDUCAÇÃO A DistânCiA Esse fenômeno, cada vez maior do Android, coloca novos conteúdos de mídia, como jogos, animação 3D, televisão interativa, vídeo digital, áudio digital, e-books e imagens de alta definição em nossas vidas a cada passo. O Android é um veículo de código aberto popular (outros sendo HTML5 e JavaFX) que os artistas digitais usarão cada vez mais para poder desenvolver novas criações de mídias que seus usuários finais nunca experimentaram antes. Na última década, o Android amadureceu e evoluiu, para se tornar um sistema operacional de código aberto integrado estável, excepcionalmente confiável. Um sistema operacional Android que começou com sua versão inicial apenas uma década atrás, uma vez adquirido pelo Google, lançou versões estáveis de sistema operacional. No momento da escrita deste e-book, o Android 11 está na sua versão Beta 2. Se você quiser ver as estatísticas mais recentes sobre cada uma das revisões anteriores do sistema operacional Android, diretamente do site do desenvolvedor Android, você deve visitar este URL: developer. android.com/about/dashboards/index.html (JACKSON, 2017). 2.2. a História do ios A segunda versão, o iPhone OS 2, foi a primeira a ter um SDK público. A partir de então, com cada versão do sistema operacional, a Apple introduziu vários recursos principais e muito mais alterações de API menores. O iPhone OS 3 trouxe Core Data do Mac para o iPhone. Outras adições incluem Apple Push Notification Service, External Accessory Kit, In App Purchases por meio do StoreKit.framework, nas planilhas de e-mail do aplicativo, o MapKit.framework, que permite aos desenvolvedores incorporar o Google Maps em seus aplicativos, acesso somente à leitura da biblioteca do iPod e compartilhamento de dados de chaves. OS 3.1 adicionou suporte a editor de vídeo. O iPhone OS 3.2 adicionou Core Text e reconhecedores de gestos, compartilhamento de arquivos e suporte à geração de PDF, outra atualização menor (embora tão importante). O OS 3.2 também adicionou um produto totalmente novo, iPad, suporte para o desenvolvimento de aplicativos que rodam no iPad e aplicativos universais que rodam no iPad (3.2) e iPhone (3.1.3). O 3.2 era apenas iPad e não funcionava em dispositivos iPhone ou iPod Touch. O iPhone OS 4 (renomeado iOS 4) introduziu o suporte multitarefa muchawaited, notificações locais, acesso somente à leitura do calendário (estrutura do EventKit.framework), blocos, Grand Central Dispatch (GCD), em folhas de composição de mensagens de aplicativos (SMS) e suporte para tela Retina. Essa versão era apenas para iPhone e não era compatível com o desenvolvimento de aplicativos para iPad. Uma pequena atualização, iOS 4.2, sistemas operacionais unificados de iPhone e iPad. O iOS 5 apresenta vários recursos importantes como iCloud, contagem automática de referência (ARC), storyboards, estrutura integrada do Twitter e vários outros recursos secundários. A partir da iOS 5, novos recursos foram integrados aos dispositivos da Apple, tornando-a a dominadora do mercado global. Vieram as versões iOS 7, iOS 10, iOS 11, como novas tecnologias de hardware e de software. O iOS se encontra na versão 14.1 (quando este material foi desenvolvido). 2.3 Falando sobre o iphone e ipod touch Segundo Wagner (2008), a introdução do iPhone/iPod Touch e o subsequente lançamento do iPod Touch revolucionou a maneira como as pessoas interagiam com os dispositivos portáteis. Os usuários não precisam mais usar um teclado para navegação na tela ou navegar na web por meio de páginas “simplificadas”. 11www.uninga.br DE SE NV OL VI M EN TO D E AP LI CA TI VO S M ÓV EI S | u ni Da DE 1 EDUCAÇÃO A DistânCiA Os dispositivos Apple trouxeram entrada de tela de toque, um design de interface revolucionário e um navegador da web totalmente funcional nas palmas das mãos das pessoas. No entanto, a questão na comunidade de desenvolvedores nos meses que antecederam o lançamento do iPhone era: a Apple permitirá que desenvolvedores terceirizados desenvolvam aplicativos personalizados para essa nova plataforma móvel? A resposta da Apple deixou os desenvolvedores da web felizes e os programadores Objective-C tristes – os aplicativos para iPhone e iPod Touch seriam aplicativos baseados no Safari, desenvolvidos com tecnologias padrão da web. A Apple optou por essa solução como uma forma de fornecer aos desenvolvedores a liberdade de criar aplicativos personalizados, ao mesmo tempo em que mantinha o controle da experiência do usuário desses dois dispositivos. Obviamente, existem diferenças importantes entre um aplicativo do iPhone / iPod Touch executado dentro do Mobile Safari e um aplicativo nativo. Do ponto de vista do desenvolvedor, a principal diferença é a linguagem de programação – utilizando tecnologias da web em vez de Objective-C. No entanto, há também implicações importantes para o usuário final, incluindo: Desempenho: o desempenho de um aplicativo baseado no Safari não será tão responsivo quanto um aplicativo compilado nativo, tanto por causa da natureza interpretativa das linguagens de programação quanto pelo fato de que o aplicativo opera em redes Wi-Fi e EDGE (lembre-se de que o iPod Touch suporta apenas acesso Wi-Fi). No entanto, apesar das restrições tecnológicas, você pode realizar muitas otimizações para atingir um desempenho aceitável. Inicialização: embora os aplicativos integrados sejam todos iniciados na tela principal do Springboard do iPhone (Figura 2) e iPod Touch (Figura 3), os desenvolvedores da web não têm acesso a essa área para seus aplicativos. Em vez disso, um usuário só poderá acessar seu aplicativo inserindo sua URL ou selecionando um favorito na lista de favoritos (Figura 4).Figura 2 - Aplicativos integrados começam a partir do Springboard principal. Fonte: O autor. 12www.uninga.br DE SE NV OL VI M EN TO D E AP LI CA TI VO S M ÓV EI S | u ni Da DE 1 EDUCAÇÃO A DistânCiA Figura 3 - Layout do iPod Touch. Fonte: Site da Apple. Figura 4 - Aplicativos da web são iniciados a partir da lista de favoritos. Fonte: O autor. Interface do Usuário (UI): os aplicativos integrados para iPhone e iPod Touch seguem as diretrizes de design da UI da Apple. Você pode emular de perto o design de aplicativo nativo usando uma combinação de HTML, CSS e JavaScript. A única restrição para completar a emulação é a sempre presente barra de ferramentas inferior no Mobile Safari, como mostra a Figura 5. 13www.uninga.br DE SE NV OL VI M EN TO D E AP LI CA TI VO S M ÓV EI S | u ni Da DE 1 EDUCAÇÃO A DistânCiA Figura 5 - Layout de tela do game Star Wars para o iOS. Fonte: O autor. 3. projeto de interFaces para dispositivos móveis 3.1 design de interface de usuário do android Nesta nova era de dispositivos com tela sensível ao toque, como smartphones, tablets, leitores de e-book e smartwatches, sua tela se tornou o centro não apenas do feedback visual para o aplicativo, mas também para interagir com ele. A utilização das classes nos permite que seu aplicativo Android grave coisas na tela do dispositivo, como sua classe Activity; classes básicas de Interface do Usuário (UI); e, é claro, o assunto principal do aplicativo Android, texto, áudio, vídeo, animação e conteúdo gráfico. Existem algumas superclasses Android muito importantes, como Activity, View e ViewGroup, que fornecem a base para as subclasses que você utilizará para colocar o conteúdo do aplicativo e a UI na tela de exibição. Essas superclasses não são usadas diretamente em seu aplicativo, mas você precisa conhecê-las mesmo assim (JACKSON, 2017). 3.2 usando classes activity, view e viewgroup 3.2.1 Activity “A Classe Activity faz a representação de uma tela da aplicação e ela será responsável pelo controle dos eventos ocorridos na tela e também definirá qual view será responsável pelo desenho da interface gráfica do usuário” (LECHETA, 2015). Segundo Lecheta (2015), uma Activity é uma classe que deverá herdar da classe android. app.Activity, ou de alguma subclasse, a qual fará a representação da aplicação e será responsável por tratar os eventos gerados nessa tela. 14www.uninga.br DE SE NV OL VI M EN TO D E AP LI CA TI VO S M ÓV EI S | u ni Da DE 1 EDUCAÇÃO A DistânCiA A classe da Activity deverá sobrescrever o método onCreate(bundle). Esse método é obrigatório e será o responsável pela inicialização necessária para a execução da aplicação, como, por exemplo, chamar o método setContentView(view) para a definição da interface de usuário. Cada Activity deverá ser obrigatoriamente declarada no arquivo AndroidManifest.xml. Isso será feito por meio da tag <activity>, como é demonstrado a seguir: Figura 6 - Representação da tag Activity no editor de texto Sublime. Fonte: O autor. Não há muito o que falar da classe android.app.Activity. Ela será utilizada para construir uma tela de aplicação. Se você precisar de uma nova tela, precisará de uma nova activity. A coisa mais importante de que você precisará se lembrar é que, sempre que uma nova classe de activity for criada, ela precisará ser declarada no arquivo AndroidManifest.xml (LECHETA, 2015). 3.2.2 View A classe View é uma base para o design da interface do usuário. Um objeto View é projetado para conter qualquer coisa que precise ser visualizada em um aplicativo Android usando a tela do dispositivo. Uma vez que os dispositivos são quase 100% compostos por uma tela frontal, essa é aparentemente a informação mais importante no Android, pelo menos do ponto de vista de design visual e usabilidade da interface do usuário. Um exemplo de declaração da classe View da documentação do desenvolvedor (sempre no topo da documentação da classe) pode ser: Figura 7 - Declaração da classe View, no editor de texto Sublime. Fonte: O autor. Isso nos diz que a View pode ser usada publicamente por todas as classes de aplicativos Android na API, que se estende à superclasse Object e que implementa interfaces Java para gráficos (interface Drawable.Callback) e interatividade (interface KeyEvent.Callback) e oferece suporte a usuários com deficiência (interface AccessibilityEventSource) (LECHETA, 2015). Segundo Jackson (2017), se você olhar a página de documentação da classe View no site do desenvolvedor Android, verá que essa classe View tem uma dúzia de subclasses diretas conhecidas, uma das quais é o ViewGroup. Alguns dos objetos de widget de UI mais comuns são criados usando essas classes. Elas incluem: • ImageView: para visualização de imagens; • TextView: para visualização de textos; • TextureView: para mapeamento de textura; • SurfaceView: para renderizar gráficos; • AnalogClock: para criar relógios; • KeyboardView: para criar teclados virtuais; 15www.uninga.br DE SE NV OL VI M EN TO D E AP LI CA TI VO S M ÓV EI S | u ni Da DE 1 EDUCAÇÃO A DistânCiA • ProgressBar: para criar barras de progresso; • E várias classes de utilitários relacionadas ao design da UI da View. 3.2.3 ViewGroup A classe ViewGroup, conforme nos apresenta Jackson (2017), é uma subclasse direta conhecida de View. Mesmo que os widgets View estejam aninhados dentro dos contêineres de layout ViewGroup, a superclasse ViewGroup é na verdade uma subclasse, da superclasse View, na hierarquia de classes Java do Android. Começando com a classe mestre do objeto Java, a hierarquia de herança será estruturada da seguinte maneira: Figura 8 - Representação da estrutura da hierarquia de Herança, no editor de texto Sublime. Fonte: O autor. A razão pela qual a equipe de desenvolvimento do sistema operacional Android estruturou a hierarquia de classes View dessa maneira é porque os atributos da classe View, como atributos de margem superior, inferior, esquerda e direita (propriedades ou parâmetros), também devem estar disponíveis para uso em um container de layout ViewGroup, bem como em todos os widgets View UI. Portanto, a estrutura lógica Java seria a subclasse de ViewGroup de View, de forma que as subclasses de ViewGroup possam herdar todas as mesmas variáveis, constantes e métodos que as subclasses de View incluirão (JACKSON, 2017). Se você olhar a página de documentação da classe ViewGroup, no site do desenvolvedor Android (ANDROID DEVELOPERS, 2020), verá que a classe ViewGroup tem 18 subclasses diretas conhecidas. Alguns dos layouts de UI mais comuns incluem: • LinearLayout: para design de UI horizontal ou vertical; • GridLayout: para design de interface de usuário de grade; • Toolbar: para barras de ferramentas da UI; • ViewPager: para visualização da página da UI; • DrawerLayout e SlidingDrawer: para UI em gavetas; • AbsoluteLayout e FrameLayout: para layouts fixos ou conteúdo em tela cheia; • SlidingPaneLayout: para design de UI deslizante; • Design da UI do conjunto TvView: para iTV; • RecyclerView: para design de UI de lista de itens longos e eficiente (recicla ou otimiza o uso de memória); • E vários outros para UI especializada. 16www.uninga.br DE SE NV OL VI M EN TO D E AP LI CA TI VO S M ÓV EI S | u ni Da DE 1 EDUCAÇÃO A DistânCiA 3.3 como as classes activity, view e viewgroup se relacionam Antes de examinarmos as superclasses de UI Android Activity, View e ViewGroup e suas subclasses mais funcionais (aquelas classes que você realmente deverá utilizar para construir seus aplicativos), será importante entender como elas se relacionam entre si, dentro do design da interface do usuário e exibir o contexto de seu aplicativo Android. O Android Runtime (ART) é um ambiente de execução que reside no topo de um Kernel Linux e se comunica com o sistema operacional Android, sob o qual seu aplicativo será executado(ou rodado). Seu aplicativo se define como ART usando o arquivo XML de definição de aplicativo AndroidManifest.xml. Para cada tela de exibição funcional em um aplicativo, que geralmente contém algum tipo de design de UI, bem como conteúdo de aplicativo relacionado, seu aplicativo definirá uma subclasse Activity (JACKSON, 2017). Conforme Jackson (2017) nos apresenta, cada subclasse Activity em seu aplicativo Android precisaria ter um método .onCreate() definido, e esse método, por sua vez, deveria conter a chamada do método setContentView() para carregar uma interface de usuário ViewGroup(layout) e View(widget), elementos de UI. Os parâmetros setContentView() contêm a referência à definição XML do layout da UI da subclasse de Activity. Para a classe MainActivity.java, essa referência será R.layout.activity_main, que é a abreviação do Android para fazer referência ao arquivo/res/ layout/activity_main.xml. Segundo Jackson (2017), uma tag pai, em uma definição XML de layout de UI, geralmente fará referência a uma subclasse ViewGroup, como a classe ConstraintLayout, que no arquivo activity_main.xml será representada por uma tag pai <ConstraintLayout>. A superclasse ViewGroup no Android será usada para criar subclasses e classes de contêiner de layout personalizado no Android. Há um grande número de classes de contêiner de layout customizado no Android, porque essas classes de layout de UI fornecem a base do design de UI no Android. Dentro do recipiente de layout de UI do ViewGroup, as tags pai são tags filhas que representam elementos da UI, que são chamados de Widgets no Android. Os widgets da UI são baseados na superclasse View do Android. Cada widget, como a tag filho <TextView>, referencia sua classe de widget Android TextView, que é uma subclasse usando a superclasse View. Dentro de cada tag filho do widget de UI (subclasse de visualização), você poderá definir parâmetros que fazem referência aos novos ativos de mídia para seu aplicativo, como drawables (imagens e animação de bitmap), animação (procedural, interpolação ou animação vetorial), áudio ou vídeo, formas escaláveis de gráficos vetoriais (SVG), elementos de interface do usuário personalizados e ativos semelhantes. Continuando com Jackson (2017), colocar os ativos do seu aplicativo na tela de exibição do dispositivo Android envolve colocar parâmetros em tags de widget filho dentro de tags de layout de UI pai, referenciadas pela subclasse Activity, que você declarou no arquivo XML de manifesto do aplicativo Android. Tudo isso pode ser feito no Android Studio. O código será passado para o mecanismo ART, que então converte tudo isso em linguagem de máquina e, em seguida, passa para o Kernel Linux, cujo trabalho será fazer a interface do software do sistema operacional com o hardware e renderizar o design e o conteúdo da UI do seu aplicativo para o hardware da tela de exibição do dispositivo Android com precisão de pixel perfeita. Essa cadeia de Android Runtime para recursos de aplicativo será parecida com esta: Android RunTime > Manifest > Activity Subclass > ViewGroup Parent Tag > View Child Tag > Resources 17www.uninga.br DE SE NV OL VI M EN TO D E AP LI CA TI VO S M ÓV EI S | u ni Da DE 1 EDUCAÇÃO A DistânCiA Para tornar isso ainda mais fácil de visualizar, a Figura 9 mostra um diagrama em camadas (e conexões) entre os novos recursos de mídia do seu aplicativo, seus widgets de UI, que mantêm os aplicativos; os layouts de UI, que mantêm seus recursos; e as subclasses de Activity, que definem e controlam suas características de XML de layout UI, referenciando-a usando sua chamada do método .setContentView(). É importante observar que, como você pode definir uma imagem ou animação de plano de fundo para o contêiner de layout da UI, um ViewGroup também pode fazer referência a novos recursos de mídia; portanto, a nova área de recursos de mídia do diagrama na Figura 9 conecta-se às subclasses View e ViewGroup (JACKSON, 2017). Figura 9 - Estratificação do aplicativo Android, desde novos recursos de mídia até a execução. Fonte: Jackson (2017). O seu manifesto Android define para ART quais classes de Activity um aplicativo contém, bem como o que seu aplicativo tem permissão para fazer; e outras informações sobre o histórico da versão do seu aplicativo, suporte, estrutura, permissões, comunicações, intenções, acesso à rede, acesso ao Google Play e assim por diante (JACKSON, 2017). Caro(a) aluno(a), pensando em uma maneira para aprimorar o seu conhecimento sobre o emprego da tecnologia para desenvolvimento de aplicativos Android, trago como sugestão o artigo Developer Guides, do portal Android Developers, como sugestão para pesquisas e para o aprimoramento no desenvolvimento de aplicativos Android. “Guias do Desenvolvedor” “São os guias para orientar o desenvolvedor Android dentro do portal Android Developers. Contendo uma lista de documentos no painel de navegação, o desenvolvedor poderá aprender a criar aplicativos utilizando APIs no Framework Android e outras bibliotecas. Para quem estiver começando a trabalhar com o Android e quiser partir para o desenvolvimento de código, você poderá começar com o tutorial: Crie seu primeiro app. No portal Android Developers, você poderá conferir outros recursos para saber mais sobre o desenvolvimento no Android, como a Documentação Básica, o Codlabs, Cursos para criar aplicativos Android e Treinamentos Online”. Disponível em: <https://developer.android.com/guide>. 18www.uninga.br DE SE NV OL VI M EN TO D E AP LI CA TI VO S M ÓV EI S | u ni Da DE 1 EDUCAÇÃO A DistânCiA “De certa forma não posso acreditar que haja tantas alturas que não possam ser escaladas por um homem que sabe os segredos de como tornar os sonhos realidade. Esse segredo especial pode ser resumido em quatro Cs. Eles são Curiosidade, Confiança, Coragem e Constância. E o maior de todos eles é a Confiança. Quando você acreditar em uma coisa, acredite nela até o fim” (Walt Disney). Disponível em: https://citacoes.in/pesquisa/?h=Walt+Disney. Dessa forma, fica a reflexão para todos nós de que, para tornarmos os nossos sonhos realidade, só precisamos de quatro coisas: Curiosidade, Confiança, Coragem e Constância. Título: Android 6 para Programadores - Uma abordagem baseada em aplicativos. Autores: Paul Deitel, Harvey Deitel, Alexander Wald. Editora: Bookman. Sinopse: Guia Deitel do programador profissional para o desenvolvimento de aplicativos para smartphones e tablets utilizando Android 6 e Android Studio. Aprenda tudo o que você precisa para desenvolver rapidamente ótimos aplicativos Android e publicá-los no Google Play. Com uma abordagem baseada em aplicativos, este livro discute as novas tecnologias por meio de 8 aplicativos Android totalmente testados, complementados por sintaxe em tons diferentes, realces e detalhamento dos códigos e saídas de exemplo. Fonte: Editora Bookman (2020). 19www.uninga.br DE SE NV OL VI M EN TO D E AP LI CA TI VO S M ÓV EI S | u ni Da DE 1 EDUCAÇÃO A DistânCiA consideraçÕes Finais Caro(a) aluno(a)! Chegamos ao final desta unidade com a satisfação de tê-lo aqui conosco, pois procuramos dar o nosso melhor para trazer um norte para que você prossiga no desenvolvimento de suas habilidades para a sua carreira profissional. Nesta unidade, você recebeu uma introdução aos conceitos de Computação Móvel. De maneira introdutória, vimos que, com o avanço da tecnologia, os dispositivos móveis, com sua grande capacidade de computação, ultrapassam as possibilidades oferecidas por um computador de mesa ou mesmo um notebook. Vimos uma breve recapitulação sobre o Paradigma Orientado a Objetos (POO), tão importante na programação para dispositivos móveis. Procuramos apresentar os conceitos sobre a hierarquia de objetos, que, de maneira análoga, são como uma estrutura de uma árvore, com um tronco principal, ramos e sub-ramos. Também vimos sobre as Classes, que fazemo encapsulamento dos dados e abstrações procedurais necessárias para descrever o conteúdo e comportamento de alguma entidade do mundo real, importantes na Programação Orientada a Objetos. Contextualizando de maneira simples, apresentamos os históricos das duas principais Plataformas Móveis: o iOS da Apple e o Android do Google. Outra ênfase importante dada nesta unidade foi uma introdução a Projetos de Interfaces para Dispositivos Móveis, como, por exemplo, o Design de Interface de Usuário do Android, em que destacamos as Classes Activity, View e ViewGroup. Dando continuidade, na próxima unidade, iremos estudar sobre os principais componentes de uma aplicação, faremos um estudo aprofundado sobre persistência de dados em dispositivos móveis, veremos formas de acessar os recursos dos dispositivos móveis, e muito mais. Esperamos você, caro(a) aluno(a), na Unidade 2. Até breve! Fonte: Alura Cursos Online (2020). Título: Desenvolvimento Android. Sinopse: Um episódio focado no desenvolvimento de aplicações Android. Neste bate-papo, Paulo Silveira e Felipe Torres conversam sobre os primeiros passos para começar a desenvolver, quais são as principais ferramentas do desenvolvimento mobile, como colocar sua aplicação no ar e mais! Disponível em: <https://www.youtube.com/ watch?v=fWscDFHKgw8&ab_channel=AluraCursosOnline>. 2020www.uninga.br unidade 02 sumário da unidade introdução ............................................................................................................................................................ 22 1. principais componentes de uma aplicação ......................................................................................... 23 1.1 alguns termos de programação ............................................................................................................. 23 1.2 introdução ao maniFest.Xml .................................................................................................................... 24 1.3 a classe activity: um contêiner de design de ui .............................................................................. 25 1.4 linearlayout e o boX model ...................................................................................................................... 25 1.4.1 conceitos e atributos .............................................................................................................................. 26 1.4.1.1 orientação ................................................................................................................................................... 26 1.4.1.2 modelo de preencHimento .................................................................................................................. 26 1.4.1.3 peso ............................................................................................................................................................... 26 1.4.1.4 gravidade..................................................................................................................................................... 27 principais componentes Prof. ME. rICArDo VIEIrA Ensino a distância DISCIPLINA: DESENVOLVIMENTO DE APLICATIVOS MÓVEIS 21www.uninga.br 2. persistência de dados em dispositivos móveis ................................................................................. 28 2.1 o que é persistência? ................................................................................................................................... 28 2.2 armazenamento de dados e arquivos ................................................................................................. 28 2.2.1 locais de armazenamento ...................................................................................................................... 28 2.3 biblioteca room persistence .................................................................................................................. 29 2.3.1 salve os dados em um banco de dados local usando o room .................................................. 29 3. acesso aos recursos de dispositivos móveis ..................................................................................... 32 consideraçÕes Finais ........................................................................................................................................ 38 22www.uninga.br DE SE NV OL VI M EN TO D E AP LI CA TI VO S M ÓV EI S | u ni Da DE 2 EDUCAÇÃO A DistânCiA introdução Caro(a) aluno(a)! Iniciaremos esta unidade com o estudo dos principais componentes de uma aplicação. Veremos alguns termos de programação, em especial Variável, Método e Constante. Apresentaremos também, nesta unidade, introdução ao Manifest.XML. Veremos que esse arquivo contém muitas das configurações que deverão ser especificadas em uma caixa de diálogo, por exemplo, ou no nome do aplicativo, ou até nos nomes dos pacotes. Abordaremos as principais características da classe Activity. Veremos que uma Activity, quando for criada usando Java, fará referência a essa definição de design XML UI. Além de tudo isso, teremos um tópico especial dedicado à Persistência de Dados em dispositivos móveis. Estudaremos o sistema de arquivos do Android e as várias opções para salvar os dados do seu aplicativo. E, por fim, mas não menos importante, abordaremos o acesso aos recursos de dispositivos móveis. Veremos que o Android Studio pode abrir um projeto de cada vez e cada projeto poderá conter um ou mais módulos. Veremos também a estrutura do projeto, com localização da pasta do módulo, com o código-fonte e seus arquivos e os arquivos de compilação específicos, juntamente com a descrição de cada componente de uma aplicação. Caro(a) aluno(a)! Agora é hora de darmos continuidade aos nossos estudos. Vamos aproveitá-los ao máximo, com muita dedicação, pois este material foi preparado com muito carinho para você. Bom estudo! 23www.uninga.br DE SE NV OL VI M EN TO D E AP LI CA TI VO S M ÓV EI S | u ni Da DE 2 EDUCAÇÃO A DistânCiA 1. principais componentes de uma aplicação 1.1 alguns termos de programação Apresentaremos, a seguir, algumas das terminologias técnicas usadas em Java. Os Objetos possuem Campos de Dados para armazenar dados Variáveis; Constantes para manter dados fixos; e métodos para definir comportamentos, como segue: • Os Campos de Dados que contêm os estados de um Objeto Java que podem mudar com o tempo são chamados de Variáveis. Usando ainda o exemplo do carro apresentado na Unidade 1, a direção em que você está conduzindo o carro, a marcha em que está dirigindo e a velocidade em que você está mudam quase em tempo real e, portanto, são todas variáveis. • Os Campos de Dados que contêm os estados de um Objeto que não mudam com o tempo são chamados de Constantes. No exemplo do carro, a pintura vermelha pode ser uma constante, assim como o tipo de motor. • Os Métodos: são lógicas de programação ou rotinas de código de programa, que operam e irão mudar os campos de dados e as variáveis internas do objeto. Os métodos também permitirão que outros objetos Java, externos ao próprio Objeto, se comuniquem com esse objeto, desde que o método seja declarado público. Como vimos na Unidade 1, um dos principais conceitos de POO é o encapsulamento de dados. Em Java, o encapsulamento de dados é implementado permitindo apenas que os campos de dados variáveis de um objeto Java sejam modificados diretamente por meio dos métodos internos desse mesmo objeto Java. Isso permite que um Objeto Java seja autossuficiente ou encapsulado. Continuando a usar o exemplo do carro, queremos agora realizar a ação de virar o carro, e para isso, podemos usar o método .virarRodas (), mostrado na Figura 1, na parte inferior direita do diagrama. Esse método seria composto da lógica de programação Java, que posicionaria corretamente as rodas do carro, fazendo com que ele se movesse na direçãodesejada. Você não veria detalhes de como as rodas do objeto são giradas, por causa do encapsulamento. Esse detalhe é deixado para a funcionalidade interna contida (encapsulada) dentro do método no objeto Java. Figura 1 - Um objeto de carro que mostra os atributos ou características do carro (oval interno) e os comportamen- tos do carro (oval externo). Fonte: Adaptado de Jackson (2017). 24www.uninga.br DE SE NV OL VI M EN TO D E AP LI CA TI VO S M ÓV EI S | u ni Da DE 2 EDUCAÇÃO A DistânCiA Observe os parênteses vazios usados após os nomes dos métodos no texto. Eles são sempre usados ao escrever sobre um método, para que o leitor saiba que o autor está se referindo a um método Java. Além disso, como as chamadas de método são invocadas usando a notação de ponto, usaremos os nomes dos métodos com um ponto, reforçando ainda mais que se trata de uma chamada de método, para que você possa visualizá-la. Você verá essa convenção de nomenclatura de método usada no restante deste e-book. Usando o encapsulamento de dados, você pode construir e testar individualmente cada objeto que faz parte de uma construção de objeto maior, sem exigir que dado algum seja acessado de outros objetos ou módulos de um aplicativo. O acesso a dados externos pode se traduzir em bugs, portanto, o encapsulamento ajuda no desenvolvimento de aplicativos complicados de grande escala. Sem o encapsulamento de dados, os desenvolvedores de sua equipe podem simplesmente acessar qualquer parte dos dados do seu objeto e usar como quiserem. Isso pode introduzir bugs que afetam os métodos que você aperfeiçoou para manipular seu objeto e fornecer sua solução encapsulada. Portanto, o encapsulamento de dados promove o conceito central em POO de modularidade. Depois que um objeto é criado e testado, outros objetos podem usá-lo sem se preocupar com sua integridade. O encapsulamento de dados, portanto, permite a reutilização de código, para que os programadores possam desenvolver bibliotecas de objetos úteis, que não precisam ser reescritos ou testados novamente por outros programadores. Você pode ver como isso pode economizar tempo e dinheiro do desenvolvedor, estruturando apenas o trabalho que precisa ser feito e evitando processos de trabalho redundantes relacionados ao teste de vários módulos de código em conjunto uns com os outros ao mesmo tempo. O encapsulamento de dados também permitirá que os desenvolvedores ocultem os dados e a lógica interna de seu objeto Java, se isso for desejado. No exemplo do objeto carro, os atributos de nosso carro são encapsulados dentro do objeto carro e, portanto, podem ser alterados apenas por meio dos métodos que os cercam em cada diagrama. Por exemplo, alguém poderia usar um método .mudarDeMarcha() para alterar a variável de campo Marcha = 1 para Marcha = 2. Por fim, os objetos Java tornam a depuração mais fácil, porque você pode adicioná-los ou removê-los modularmente, ou isolá-los durante o teste para verificar onde os bugs estão localizados no código geral (JACKSON, 2017). 1.2 introdução ao manifest.Xml O arquivo AndroidManifest.xml é criado pelo IDE quando for criado um novo projeto de aplicativo. Esse arquivo contém muitas das configurações que deverão ser especificadas na caixa de diálogo Create New Project – o nome do aplicativo, o nome do pacote e os nomes da atividade e muito mais. Deverá editar o XML desse arquivo para adicionar uma nova configuração, que força o teclado virtual a ser exibido quando o aplicativo começa a ser executado. Você também especificará que o aplicativo suporta apenas a orientação retrato, ou seja, a dimensão maior do dispositivo é vertical (DEITEL; DEITEL; WALD, 2016). A base de qualquer aplicativo Android é o arquivo de manifesto AndroidManifest.xml. Isso estará no diretório src / main / do módulo do aplicativo (o conjunto de fonte principal) para projetos típicos do Android Studio. Aqui será onde iremos declarar o que estará dentro do aplicativo – as atividades, os serviços e assim por diante. Também indicaremos como essas peças se ligam ao sistema Android geral; por exemplo, indicaremos qual atividade (ou atividades) deverá aparecer no Menu principal do dispositivo. 25www.uninga.br DE SE NV OL VI M EN TO D E AP LI CA TI VO S M ÓV EI S | u ni Da DE 2 EDUCAÇÃO A DistânCiA Ao criar seu aplicativo, obteremos um arquivo manifest inicial gerado para nós e disponível na Figura 2. Para um aplicativo simples, que oferece uma única atividade e nada mais, o manifesto gerado automaticamente provavelmente funcionará bem ou talvez requeira algumas pequenas modificações. Na outra extremidade do espectro, o arquivo de manifesto para o pacote de demonstração da API do Android tem mais de 1.000 linhas. Seus aplicativos Android de produção provavelmente ficarão em algum lugar no meio (MURPHY, 2019). Figura 2 - Exemplo de Android Manifest XML. Fonte: Android Developers (2020). 1.3 a classe activity: um contêiner de design de ui Segundo Jackson (2017), enquanto uma hierarquia de design View UI é criada com marcação XML, uma Activity será criada usando Java e fará referência a essa definição de design XML UI. A Activity funde o tema do Sistema Operacional, como você pode ver a seguir, na definição de classe que estende ContextThemeWrapper, com o design da interface do usuário. Ele implementa interfaces Java para inflação da UI, Windows, teclado, menu e componentes. Um exemplo de Activity é apresentado na Figura 3. Figura 3 - Criação de uma Activity. Fonte: Android Developers (2020). Isso nos diz que uma Activity aumenta (transforma elementos XML em objetos Java) seu design de UI, lida com chamadas de janelas do Sistema Operacional, “ouve” o uso do ContextMenu, lida com componentes do Android e passa por KeyEvents para elementos da UI. Um objeto Activity no Android contém uma única UI focada em uma tarefa ou recurso específico que seu aplicativo oferece ao usuário. Quase todas as atividades interagem com o usuário, portanto, cada objeto Activity deve cuidar da criação de uma janela, usando uma chamada para o Sistema Operacional Android para que o usuário possa interagir com uma UI que é carregada usando a chamada do método setContentView (R.layout.uiDesignName) (JACKSON, 2017). 1.4 linearlayout e o box model Segundo Murphy (2019), o LinearLayout representa a abordagem do Android para um Box Model (modelo de caixa) – widgets ou contêineres filhos serão alinhados em uma coluna ou linha, um após o outro. 26www.uninga.br DE SE NV OL VI M EN TO D E AP LI CA TI VO S M ÓV EI S | u ni Da DE 2 EDUCAÇÃO A DistânCiA 1.4.1 Conceitos e atributos Continuando com Murphy (2019), para configurar um LinearLayout, você tem quatro áreas principais de controle, além do conteúdo do contêiner: a orientação, o modelo de preenchimento, o peso, a gravidade. 1.4.1.1 orientação A orientação indica se o LinearLayout representa uma linha ou uma coluna. Basta adicionar ao Android: orientação para seu elemento LinearLayout em seu layout XML, definindo o valor como Horizontal para uma linha ou Vertical para uma coluna. A orientação poderá ser modificada em tempo de execução invocando setOrientation() no LinearLayout, fornecendo-lhe HORIZONTAL ou VERTICAL. 1.4.1.2 Modelo de preenchimento O objetivo por trás de um LinearLayout – ou qualquer uma das classes de contêiner do Android – será organizar vários widgets. Parte da organização desses widgets será determinar quanto espaço cada um obtém. O LinearLayout adota uma abordagem de “filho mais velho ganha” para alocar espaço. Portanto, se tivermos um LinearLayout com três filhos, o primeiro filho receberá seu espaço solicitado. O segundo filho terá o espaço solicitado, se houver espaço suficiente para ele, e o mesmo para o terceiro filho. Portanto, se o primeiro filho solicitar todo o espaço (por exemplo, se esse é um LinearLayout Horizontal e o primeiro filho tiver android: layout_width = “match_ parent”), o segundoe o terceiro filhos terminarão com largura zero. 1.4.1.3 Peso Mas você deve estar se perguntando: o que acontece se tivermos dois ou mais widgets, que devem dividir o espaço livre disponível? Por exemplo, suponha que temos dois campos de várias linhas, em uma coluna, e queremos que eles ocupem o espaço restante na coluna depois que todos os outros widgets tiverem seus espaços alocados. Para fazer isso funcionar, além de definir android: layout_width (para linhas) ou android: layout_height (para colunas), você também deverá definir android: layout_weight. Essa propriedade indica qual proporção do espaço livre deverá ir para aquele widget. Se você definir android: layout_weight com o mesmo valor diferente de zero para um par de widgets (por exemplo, 1), o espaço livre será dividido igualmente entre eles. Se você definir 1 para um widget e 2 para outro widget, o segundo widget usará o dobro do espaço livre que o primeiro widget, e assim por diante. O peso de um widget será zero por padrão. Outro padrão que pode ser usado é a base percentual em relação ao peso. Para usar essa técnica para um layout horizontal, siga os seguintes passos: 1. Defina todos os valores de android: layout_width, assim como para os widgets no layout; 2. Defina os valores android: layout_weight com o tamanho percentual desejado para cada widget no layout; 3. Certifique-se de que todos os pesos somem 100. 27www.uninga.br DE SE NV OL VI M EN TO D E AP LI CA TI VO S M ÓV EI S | u ni Da DE 2 EDUCAÇÃO A DistânCiA Se quiser ter espaço sobrando, não alocado para nenhum widget, você poderá adicionar um atributo android: weightSum ao LinearLayout e garantir que a soma dos atributos android: layout_weight dos filhos seja menor que essa soma. Cada criança terá espaço alocado com base na proporção de seu android: layout_weight em comparação com o android: weightSum, não em comparação com a soma dos pesos. E haverá um espaço vazio que ocupará o resto do quarto não alocado para os filhos. 1.4.1.4 Gravidade Por padrão, tudo em um LinearLayout será alinhado no início e no topo. Portanto, se você criar uma linha de widgets por meio de um LinearLayout Horizontal, a linha ficará alinhada no lado inicial da tela (por exemplo, à esquerda em um LTR language). Se não for isso que você deseja, será necessário especificar uma gravidade. Ao contrário do mundo físico, o Android possui dois tipos de gravidade: • A gravidade de um widget dentro de um LinearLayout; • A gravidade do conteúdo de um widget ou contêiner. A propriedade android: gravity de alguns widgets e contêineres – que também poderá ser definida via setGravity() em Java – diz ao Android para deslizar o conteúdo do widget ou contêiner em uma direção específica. Por exemplo: • android: gravity = “right” – diz para deslizar o conteúdo do widget para a direita; • android: gravity = “right|bottom” – diz para deslizar o conteúdo do widget para a direita e para baixo. Aqui, o “conteúdo” varia. TextView suporta android: gravity, e o “conteúdo” será o texto mantido dentro do TextView. LinearLayout suporta android: gravity, e o “conteúdo” será os widgets dentro do contêiner, e assim por diante. Os filhos de um LinearLayout também têm a opção de especificar android: layout_gravity. Aqui, o filho estará dizendo ao LinearLayout: “se houver espaço, por favor, deslize-me (e apenas eu) nesta direção”. No entanto, isso só funciona na direção oposta à orientação do LinearLayout – os filhos de um LinearLayout Vertical podem usar android: layout_gravity para controlar seu posicionamento horizontalmente (início ou fim), mas não verticalmente. Para uma linha de widgets, o padrão será que eles sejam alinhados, de forma que seus textos fiquem alinhados na linha de base (a linha invisível em que as letras parecem “sentar”), embora você possa especificar uma gravidade de center_vertical para centralizar os widgets ao longo do ponto médio vertical da linha (MURPHY, 2019). 28www.uninga.br DE SE NV OL VI M EN TO D E AP LI CA TI VO S M ÓV EI S | u ni Da DE 2 EDUCAÇÃO A DistânCiA 2. persistência de dados em dispositivos móveis 2.1 o que é persistência? Quase todos os aplicativos necessitam persistir os dados. A persistência é um dos conceitos fundamentais no desenvolvimento de aplicativos. Se um sistema de informação não preservasse os dados quando fosse desligado, o sistema teria pouca utilidade prática. A persistência do objeto significa que os objetos individuais podem sobreviver ao processo de aplicação; eles podem ser salvos em um armazenamento de dados e recriados posteriormente. Quando falamos sobre persistência em Java, normalmente estamos falando sobre mapeamento e armazenamento de instâncias de objetos em um banco de dados usando SQL (BAUER; KING; GARY, 2016). 2.2 armazenamento de dados e arquivos A usabilidade de um sistema Android de arquivos se assemelha aos sistemas de arquivos baseados em disco em outras plataformas. O sistema possui várias opções para você salvar os dados do seu aplicativo: • Armazenamento específico do aplicativo: armazena arquivos destinados apenas ao uso do seu aplicativo, em diretórios dedicados dentro de um volume de armazenamento interno ou em diferentes diretórios dedicados, dentro do armazenamento externo. Podemos usar os diretórios no armazenamento interno para salvar informações confidenciais que outros aplicativos não devem acessar. • Armazenamento compartilhado: podemos armazenar arquivos que seu aplicativo pretende compartilhar com outros aplicativos, incluindo mídia, documentos e outros arquivos. • Preferências: podemos armazenar dados privados primitivos em pares chave/valor. • Bancos de dados: podemos armazenar dados estruturados em um banco de dados privado usando a biblioteca de persistência, como, por exemplo, a Biblioteca Room, que veremos a seguir (developer.android.com). 2.2.1 Locais de armazenamento O Android oferece dois tipos de locais de armazenamento físico, como vimos anteriormente: armazenamento interno e armazenamento externo. Na maioria dos dispositivos, o armazenamento interno é menor do que o externo. No entanto, o armazenamento interno está sempre disponível em todos os dispositivos, tornando-o um local mais confiável para colocar os dados dos quais seu aplicativo depende. Volumes removíveis, como um Cartão SD, aparecem no sistema de arquivos como parte do armazenamento externo. O Android representa esses dispositivos usando um caminho, como /sdcard (developer.android.com). Os próprios aplicativos são armazenados no armazenamento interno por padrão. Se o tamanho do seu APK (Android Package) for muito grande, você pode indicar uma preferência no arquivo de manifesto do seu aplicativo para instalar o aplicativo em armazenamento externo, conforme apresentado na Figura 4. 29www.uninga.br DE SE NV OL VI M EN TO D E AP LI CA TI VO S M ÓV EI S | u ni Da DE 2 EDUCAÇÃO A DistânCiA Figura 4 - Configuração de local para armazenamento externo. Fonte: Adaptado de Android Developers (2020). 2.3 biblioteca room persistence A biblioteca de Room Persistence nos fornece uma camada de abstração sobre o SQLite, para permitir um acesso mais robusto ao banco de dados, ao mesmo tempo em que aproveita todo o poder do SQLite. A biblioteca ajuda na criação de um cache de dados do seu aplicativo, em um dispositivo que o esteja executando. Esse cache, que serve como a única fonte de verdade do seu aplicativo, permite que os usuários vejam uma cópia consistente das principais informações dentro dele, independentemente de os usuários estarem conectados com a internet (developer.android.com). Para usar o Room em seu aplicativo, adicione as seguintes dependências ao arquivo build. gradle dele, conforme apresentado na Figura 5. Figura 5 - Exemplo de implementação, utilizando a Biblioteca Room. Fonte: Adaptado de Android Developers (2020). 2.3.1 Salve os dados em um banco de dados local usando o room A BibliotecaRoom oferece uma camada de abstração sobre o SQLite para permitir acesso total ao banco de dados enquanto aproveita todo o poder do SQLite. Os aplicativos que lidam com quantidades não triviais de dados estruturados podem se beneficiar muito com a persistência desses dados localmente. O caso de uso mais comum é armazenar dados relevantes em cache. Dessa forma, quando o dispositivo não puder acessar a rede, o usuário ainda poderá navegar nesse conteúdo enquanto estiver offline. Quaisquer alterações de conteúdo iniciadas pelo usuário serão sincronizadas com o servidor depois que o dispositivo estiver online novamente (developer.android.com). Existem três componentes principais na Room: 30www.uninga.br DE SE NV OL VI M EN TO D E AP LI CA TI VO S M ÓV EI S | u ni Da DE 2 EDUCAÇÃO A DistânCiA 1. Banco de Dados: possui o suporte do banco de dados e servirá como o principal ponto de acesso para a conexão subjacente aos dados relacionais persistentes do seu aplicativo. A classe com a anotação @Database deverá atender às seguintes condições: • Seja uma classe abstrata que se estende a RoomDatabase. • Inclua a lista de entidades associadas ao Banco de Dados na anotação. • Contenha um método abstrato que possui zero argumentos e retorne à classe com a qual está anotado @Dao. Em tempo de execução, você pode adquirir uma instância de Database chamando Room. databaseBuilder() ou Room.inMemoryDatabaseBuilder(). 2. Entity: representa uma tabela no banco de dados. 3. DAO: contém os métodos usados para acessar o banco de dados. O aplicativo usa o Room Database para obter os Objetos de Acesso a Dados, ou DAOs, associados a esse banco de dados. O aplicativo então usa cada DAO para obter entidades do banco de dados e salvar todas as alterações feitas nessas entidades de volta ao banco de dados. Finalmente, o aplicativo usa uma entidade para obter e definir valores que correspondem às colunas da tabela no banco de dados (developer.android.com). Um diagrama de arquitetura é apresentado na Figura 6. Figura 6 - Diagrama da arquitetura da Room. Fonte: Android Developers (2020). Os fragmentos de códigos das Figuras 7, 8 e 9 contêm uma configuração de banco de dados de amostra, com uma Entity e um DAO. 31www.uninga.br DE SE NV OL VI M EN TO D E AP LI CA TI VO S M ÓV EI S | u ni Da DE 2 EDUCAÇÃO A DistânCiA User: Figura 7 - Exemplo de configuração de banco de dados utilizando uma Entity. Fonte: Adaptado de Android Deve- lopers (2020). UserDao: Figura 8 - Exemplo de configuração de banco de dados utilizando uma DAO. Fonte: Adaptado de Android Deve- lopers (2020). AppDatabase: Figura 9 - Exemplo de criação de AppDataBase. Fonte: Adaptado de Android Developers (2020). Depois da criação desses arquivos, você obterá uma instância do banco de dados, criado usando o código da Figura 10. Figura 10 - Exemplo de instanciação de banco de dados utilizando Room. Fonte: Adaptado de Android Developers (2020). 32www.uninga.br DE SE NV OL VI M EN TO D E AP LI CA TI VO S M ÓV EI S | u ni Da DE 2 EDUCAÇÃO A DistânCiA 3. acesso aos recursos de dispositivos móveis O Android Studio, segundo nos apresenta Lecheta (2015), pode abrir um projeto de cada vez e cada projeto poderá conter um ou mais módulos. A estrutura do projeto é mostrada na Figura 11, com a pasta do módulo app fechada. A pasta app representa o módulo padrão que é criado no projeto. O código-fonte e os arquivos de compilação específicos desse módulo ficam armazenados dentro da pasta app. Na raiz do projeto, existem os outros arquivos, como, por exemplo, o arquivo build.gradle geral do projeto, que vale para todos os módulos. O Quadro 1 apresenta essa estrutura com um descritivo associado. Figura 11 - Estrutura de arquivos de um projeto. Fonte: O autor. 33www.uninga.br DE SE NV OL VI M EN TO D E AP LI CA TI VO S M ÓV EI S | u ni Da DE 2 EDUCAÇÃO A DistânCiA Quadro 1 - Explicação dos arquivos que ficam na raiz do projeto. Fonte: Adaptado de Lecheta (2015). Ao expandir a pasta app, você verá os arquivos referentes a esse módulo, e basicamente será aqui onde ficam os arquivos da aplicação. Por exemplo, na pasta /app/src/main/, estão os arquivos .java, .xml e imagens do aplicativo, conforme a Figura 12. Podemos visualizar a estrutura de diretórios real do projeto, selecionando o item Project no combo de opções que fica localizado na parte esquerda superior da janela. Outra visualização muito boa é a do Android Studio, que mostra um resumo dos principais arquivos e deixa a visualização mais enxuta. 34www.uninga.br DE SE NV OL VI M EN TO D E AP LI CA TI VO S M ÓV EI S | u ni Da DE 2 EDUCAÇÃO A DistânCiA Figura 12 - Estrutura de arquivos do projeto. Fonte: Adaptado de Lecheta (2015). 35www.uninga.br DE SE NV OL VI M EN TO D E AP LI CA TI VO S M ÓV EI S | u ni Da DE 2 EDUCAÇÃO A DistânCiA Quadro 2 - Descrição dos arquivos do módulo app. Fonte: Adaptado de Lecheta (2015). 36www.uninga.br DE SE NV OL VI M EN TO D E AP LI CA TI VO S M ÓV EI S | u ni Da DE 2 EDUCAÇÃO A DistânCiA Cada arquivo, continuando com Lecheta (2015), seja imagem ou XML, dentro da pasta /app/res contém uma referência na classe R, que será automaticamente gerada ao compilar o projeto. Cada vez que alterarmos, adicionarmos ou removermos um arquivo dessas pastas, a classe R será alterada para refletir as informações. O Quadro 2 apresenta um resumo dos arquivos do módulo app. Caro(a) aluno(a), pensando em uma maneira para aprimorar o seu conhecimento sobre o desenvolvimento de aplicativos Android, trago como sugestão este artigo, que é uma introdução ao Ambiente de Desenvolvimento Integrado (IDE) Android Studio: Conheça o Android Studio, disponível em developer.android.com/studio/ intro. Caro(a) aluno(a)! Para uma reflexão, deixo este pensamento de Dale Carnegie. Ele foi um dos maiores escritores e pensadores que ajudou, e ainda ajuda, centenas de milhares de pessoas a se desenvolverem com seu legado deixado há mais de 74 anos. Deixo esta mensagem para que você possa chegar mais longe, buscando novos conhecimentos e que possa ter um desenvolvimento intelectual e moral. “A pessoa que chega mais longe é geralmente aquela que está disposta a fazer e ousar. O barco seguro nunca vai muito longe da margem” (Dale Carnegie), disponível em https://citacoes.in/citacoes/608433-dale-carnegie-a-pessoa-que- chega-mais-longe-e-geralmente-aquela/. • Título: Android - Aprenda a criar aplicações para dispositivos móveis com o Android SDK. • Autor: Ricardo R. Lecheta. • Editora: Novatec. • Sinopse: “O Android é atualmente o sistema operacional móvel mais utilizado no mundo e está disponível para diversas plataformas, como smartphones, tablets, TV (Google TV), relógios (Android Wear), óculos (Google Glass) e carros (Android Auto). Este livro convida o leitor a mergulhar no incrível mundo do Android, onde a imaginação é o limite. 37www.uninga.br DE SE NV OL VI M EN TO D E AP LI CA TI VO S M ÓV EI S | u ni Da DE 2 EDUCAÇÃO A DistânCiA A obra traz todos os passos necessários para desenvolver aplicativos para smartphones, tablets e relógios, desde o básico – sobre a instalação do emulador e configuração do ambiente de desenvolvimento no Android Studio – até aplicações que utilizem recursos avançados, como mapas, localização por GPS, multimídia, consulta em web services, persistência em banco de dados, sensores, execução de serviços em segundo plano e muito mais. Será desenvolvido um aplicativo completo passo a passo, conforme as boas práticas de desenvolvimento e interface e utilizando conceitos do Material”. Fonte: Editora Novatec (2020). Fonte: Butterfield (2017). Título: Android Studio for Beginners Part 1. Autor: Bill Butterfield. Ano: 2017. Sinopse: este vídeo irá demonstrar: 1. Como configurar um projeto no Android Studio; 2. Como navegar dentro do Android Studio paraconstruir um aplicativo Android simples; 3. Como depurar e executar um aplicativo Android. Disponível em: <www.youtube.com/watch?v=dFlPARW5IX8&ab_ channel=BillButterfield>. 38www.uninga.br DE SE NV OL VI M EN TO D E AP LI CA TI VO S M ÓV EI S | u ni Da DE 2 EDUCAÇÃO A DistânCiA consideraçÕes Finais Caro(a) aluno(a)! Chegamos ao final de nossos estudos da Unidade 2. Foi possível entender os conceitos dos principais componentes de uma aplicação. Vimos alguns termos de programação, como, por exemplo, variável, método e constante. Vimos também os conceitos do Manifest.XML. Na Unidade 2, foi possível entender que o Manifest.XML contém muitas das configurações, como o nome do aplicativo, com o nome do pacote e os nomes da atividade e muito mais. Foi possível estudar sobre as principais características da classe Activity e que ela faz referência à definição de design XML UI, quando for criada utilizando a linguagem de programação Java. Foi possível também compreender os conceitos da persistência de dados no desenvolvimento para dispositivos móveis. Estudamos também o acesso aos recursos dos dispositivos móveis. Pudemos estudar sobre a estrutura do projeto, a localização da pasta do módulo, o código-fonte e seus arquivos e os arquivos de compilação específicos, juntamente com a descrição de cada componente de uma aplicação. Aguardo você na Unidade 3. Um grande abraço! E até lá! 3939www.uninga.br unidade 03 sumário da unidade introdução ............................................................................................................................................................ 41 1. comunicação e troca de dados com servidores web ...................................................................... 42 1.1 introdução ao Xml e ao json ..................................................................................................................... 42 1.2 o que é Xml? ..................................................................................................................................................... 42 1.3 declaração Xml ............................................................................................................................................. 43 1.4 Xml scHema .....................................................................................................................................................44 1.5 o que é json? ..................................................................................................................................................44 1.6 gerando json .................................................................................................................................................. 45 1.7 analisando json ............................................................................................................................................ 45 2. FrameworKs em programação para dispositivos móveis ............................................................ 47 2.1 react native ..................................................................................................................................................... 47 técnicas e Ferramentas para programação Prof. ME. rICArDo VIEIrA Ensino a distância DISCIPLINA: DESENVOLVIMENTO DE APLICATIVOS MÓVEIS 40www.uninga.br 2.1.1 beneFícios da utilização da plataForma nativa .............................................................................48 2.1.2 riscos e desvantagens do FrameworK react native ..................................................................48 2.2 Flutter ............................................................................................................................................................. 49 2.3 ionic .................................................................................................................................................................. 49 2.4 quasar ...............................................................................................................................................................50 2.5 Xamarin ............................................................................................................................................................50 3. programação web para dispositivos móveis ..................................................................................... 51 3.1 linguagem de programação Kotlin ....................................................................................................... 51 3.1.1 o que é Kotlin? .............................................................................................................................................. 51 3.2 linguagem de programação dart .......................................................................................................... 52 3.2.1 tudo é um objeto ........................................................................................................................................ 53 3.2.2 programa para uma interFace ............................................................................................................ 53 consideraçÕes Finais ........................................................................................................................................ 55 41www.uninga.br DE SE NV OL VI M EN TO D E AP LI CA TI VO S M ÓV EI S | u ni Da DE 3 EDUCAÇÃO A DistânCiA introdução Caro(a) aluno(a)! Esta unidade inicia os estudos da Comunicação e Troca de Dados com Servidores Web, trabalhando com algumas maneiras estruturadas de armazenar dados, sendo que, normalmente, os aplicativos usam documentos XML e JSON para armazenar e trocar informações. Veremos uma introdução ao XML, que significa eXtensible Markup Language e que é uma linguagem de marcação, pois usa “tags” simples para definir o que você deseja fazer. Faremos também uma introdução ao Framework JSON (JavaScript Object Notation), que é um formato de dados usado frequentemente para trocar dados entre servidores e páginas da web, mas também poderá ser usado para comunicação servidor a servidor. Serão apresentadas as principais diferenças entre XML e JSON e suas particularidades. Você verá também uma apresentação dos principais frameworks em programação para dispositivos móveis. Dentre os principais, destacamos o React Native, que é uma biblioteca Javascript para construir Interfaces de Usuário (UI). Apresentaremos também o Framework Flutter, que é a estrutura de UI portátil do Google para a construção de aplicativos modernos, nativos e reativos para iOS e Android. Ao final da unidade, trataremos da programação web para dispositivos móveis. Abordaremos duas linguagens de programação utilizadas no Android Studio IDE para o desenvolvimento de aplicações para dispositivos móveis. Destacamos a linguagem de programação Kotlin, que é uma linguagem baseada em JVM desenvolvida pela JetBrains. E também abordaremos a linguagem Dart. A linguagem de programação Dart é uma linguagem de programação de propósito geral, que representa uma nova linguagem na tradição C. Bons estudos! 42www.uninga.br DE SE NV OL VI M EN TO D E AP LI CA TI VO S M ÓV EI S | u ni Da DE 3 EDUCAÇÃO A DistânCiA 1. comunicação e troca de dados com servidores web O Android oferece algumas maneiras estruturadas de armazenar dados, notavelmente SharedPreferences e bancos de dados SQLite locais. E, é claro, você poderá armazenar seus dados “na nuvem” usando um serviço baseado na internet. O Android permite, além disso, que você trabalhe com arquivos comuns antigos, sejam aqueles incorporados ao seu aplicativo (“ativos”) ou aqueles no chamado armazenamento interno ou externo. Para fazer com que esses arquivos funcionem – e consumir dados da internet – você provavelmente precisará empregar um analisador. O Android possui várias opções para análise XML e JSON, além
Compartilhar