Boas-vindas ao curso de Jetpack Compose: Lidando com Armazenamento de arquivos no Android! Sou o Júnior e serei o instrutor desse curso.
Junior é um homem de pele clara. Tem olhos castanhos e cabelos no comprimento no ombro na cor loiro-escuro. Usa óculos de grau com armação arredondada preta e está com uma camiseta também preta. Ao fundo, uma parede clara com iluminação degradê do rosa ao azul.
Nesse curso, aprenderemos como funciona o armazenamento de arquivos no Android.
Para isso, utilizaremos o Concord que simula um aplicativo de mensagens com várias funcionalidades.
Nele, poderemos acessar os chats de conversa e enviar diferentes tipos de mídia, como o sticker. Também conseguiremos consultar arquivos que o usuário pode ter armazenado no dispositivo móvel e enviá-los pelo aplicativo.
Para isso, usaremos a Media Store e o SAF - Storage Access Framework, as APIs mais famosas de armazenamento de arquivos do Android. Também aprenderemos como utilizar as permissões e como aplicar as melhores práticas de desenvolvimento para Android.
A partir do conhecimento adquirido nesse curso, a pessoa desenvolvedora poderá proporcionar uma experiência completa e personalizada ao usuário final. Sendo possível utilizar não só o que está disponível no aplicativo padrão como o que a pessoa usuária possui no próprio dispositivo.
Para esse curso, é recomendado que você saiba utilizar o Jetpack Compose, especialmente com States e View Model.
Para interagir com outros estudantes e tirar dúvidas, acesse nosso canal no Discord. Aproveite para compartilhar seu aprendizado nas redes sociais utilizando nossa hashtag #AprendinaAlura.
Te esperamos no próximo vídeo.
Até lá!
Nesse curso, utilizaremos Concord que simula um aplicativo de mensagens.
A tela principal possui conversas com vários contatos. Ao clicar nelas, encontramos uma lista com mensagens que contém mídias.
Nesse primeiro momento, ainda não temos a funcionalidade final do nosso aplicativo. Porém, na parte inferior da tela, já encontramos botões que ao serem clicados abrem novas abas. Ao longo do curso, adicionaremos novas funcionalidades a elas.
com.alura.concord
Nosso projeto possui uma estrutura similar ao de cursos anteriores. Ao acessá-lo no Android Studio, na lateral esquerda, encontramos a pasta "com.alura.concord", clicamos nela e depois na pasta "data".
Feito isso, visualizamos os arquivos Chat.kt
e Message.kt
, modelos que usaremos no aplicativo. Essa pasta também armazena o SampleData.kt
, um arquivo que contém uma lista de dados de exemplo que estão sendo utilizados pelo aplicativo nesse atual momento.
database
Na lateral esquerda, também encontramos o diretório "database", relacionado ao banco de dados do aplicativo. Ao acessá-lo, encontramos as Daos
.
di.module
Na pasta "di.module" temos o DatabaseModule
, que faz a injeção do banco de dados.
extensions
Já em "extensions" temos o arquivo de extensão com duas funções Context
responsáveis para facilitar a visualização de uma mensagem ou log.
navigation
Acessando a pasta "navigation" encontramos três arquivos. O ChatListScreen.kt
é a rota responsável por exibir a tela principal e de mensagens. Já o ConcordNavHost.kt
contém cada uma das rotas individualmente, além disso a pasta também arquiva o MessageListScreen.kt
.
ui
Em "ui" temos quatro pastas com os componentes do aplicativo. Na pasta "chat" encontramos o MessageListScreen.kt
, o MessageUiState
que possui cada tela desenhada e o MesageListViewMode
.
Na pasta "components" encontramos componentes que servem para compor a tela com recursos reutilizáveis. Por exemplo, o AssyncImage.kt
é um componente do Composable
utilizado por meio da biblioteca Coil.
Nesse caso, já adicionamos algumas configurações padrão nesse componente e quando precisamos utilizá-lo, chamamos o AssyncImage()
com configurações "pré-setadas".
O Coil serve tanto para carregarmos informações por meio de links da internet como de links dos arquivos dentro do armazenamento do Android.
Ainda em "components", encontramos os arquivos BottomSheetFiles.kt
, BottomSheetStickers.kt
e o MessageItems.kt
que possui cada tela de envio de mensagem.
home
No diretório "home" temos as configurações da tela principal que também possui uma estrutura semelhante a de outros cursos de Jetpack Compose.
theme
Também encontramos na lateral esquerda a pasta "theme" que é gerada automaticamente pelo Andoid.
util
No diretório "util", temos o arquivo Date.kt
. Ele possui duas funções que pegam a data e a hora atual e fazem uma formatação para deixar esteticamente mais bonito.
Também encontramos o arquivo ConcordApplication
que serve para fazer a injeção de dependências e o MainActivity
que chama o NavHost que configurará as rotas e configurações do projeto.
Nesse curso utilizaremos dois emuladores diferentes, um que está na versão do Android 13, que é a versão mais atual estável, além da versão Android 7.
Faremos isso, pois o armazenamento de arquivos no Android foi evoluindo com o tempo, então, existem alguns casos em que o mesmo código funciona de maneiras diferentes em algumas versões. Utilizando os dois emuladores faremos uma comparação de comportamento.
Como esse é um curso de armazenamento de arquivos, disponibilizamos uma pasta com arquivos como audios, documentos, imagens, figurinhas e vídeos. Quando formos utilizá-los, acessaremos essas pastas e os arrastaremos os arquivos para o projeto.
No próximo vídeo começaremos a explorar o mundo do armazenamento de arquivos dentro do Android.
Até lá!
Quando lidamos com armazenamento de arquivos Android, o primeiro passo que devemos seguir é consultar a página da documentação oficial.
Descendo a tela, encontramos uma seção referente aos dois principais tipos de armazenamento Android. O primeiro é o Armazenamento específico do app que é mais restrito aos dados do próprio aplicativo e o Armazenamento compartilhado que vários aplicativos podem consultar tanto para leitura quanto para escrita.
Também existem as opções Preferências e Banco de dados, que aprendemos em cursos anteriores e não estão relacionados ao armazenamento de arquivos.
Descendo a tela, encontramos uma tabela com informações referentes a quais separações temos dentro de cada armazenamento de arquivos.
Tipo de armazenamento | Tipo de conteúdo | Método de acesso | Permissões necessárias | Outros apps podem acessar? | Arquivos removidos na desinstalação do app? |
---|---|---|---|---|---|
Arquivos específicos do app | Arquivos destinados apenas ao uso do app | Do armazenamento interno, getFilesDir() ou getCacheDir() | Nunca necessárias para armazenamento interno. Não são necessárias para armazenamento externo quando o app é executado em dispositivos com o Android 4.4 (nível 19 da API) ou versões mais recentes | Não | Sim |
Mídia | Arquivos de mídia compartilháveis (imagens, arquivos de áudio, vídeos) | API MediaStore. | READ_EXTERNAL_STORAGE ao acessar os arquivos de outros apps no Android 11 (nível 30 da API) ou versões mais recentes. READ_EXTERNAL_STORAGE ou WRITE_EXTERNAL_STORAGE ao acessar arquivos de outros apps no Android 10 (nível 29 da API)\nAs permissões são necessárias para todos os arquivos no Android 9 (nível 28 da API) ou versões anteriores | Sim, embora o outro app precise da permissão READ_EXTERNAL_STORAGE | Não |
Documentos e outros arquivos | Outros tipos de conteúdo compartilhável, incluindo arquivos transferidos por download | Estrutura de acesso ao armazenamento | Nenhum | Sim, por meio do seletor de arquivos do sistema | Não |
Preferências do app | Pares de chave-valor | Biblioteca de Preferências do Jetpack | Nenhuma | Não | Sim |
Database | Dados estruturados | Biblioteca de persistência Room | Nenhum | Não | Sim |
O armazenamento Arquivos específicos do app, por exemplo, consta que nunca precisa de permissões para o armazenamento interno. O mesmo acontece no armazenamento externo, porém somente quando o app é executado em dispositivos com o Android 4.4 ou versões anteriores.
Lembrando que nosso app dá suporte a partir do Android 5.0, que na data da gravação desse vídeo compõe cerca de 99% de todos os dispositivos Android em circulação.
Em Mídia, repare que outros apps podem acessá-lo, porém precisam de uma determinada permissão. Aprenderemos mais sobre isso em breve, nas próximas aulas.
Ao analisar essa tabela pela primeira vez, pode ser que surjam algumas dúvidas. Pensando nisso, preparamos um conteúdo mais informativo e didático.
Faremos uma analogia. Imagine que o aplicativo Concord instalado no dispositivo do usuário é como se fosse você dentro da sua casa.
Se você quiser pegar uma garrafa de água na cozinha e levar para o cômodo em que está no momento, você pode.
Você também pode caminhar livremente pelos cômodos, pegar a garrafinha novamente e deixá-la no quarto ou na sala. Ou seja, você pode pegar ou deixar algo em qualquer lugar que quiser da casa.
Quando o app está instalado, ele tem acesso a algo referente a uma casa. É um escopo mais restrito no qual é possível navegar e escrever informações para poder consultar, tudo isso sem pedir acesso a ninguém.
Em volta da sua casa existem outras casas, certo? O mesmo acontece no armazenamento do Android que possui apps vizinhos. Da mesma forma que não podemos sair de casa e entrar na casa dos vizinhos sem permissão para pegar algo, no Android os aplicativos não podem acessar o diretório de outros aplicativos;
Essa é forma de funcionamento do Armazenamento interno. Ele está em um escopo maior, que se refere ao armazenamento específico.
Além disso, há áreas, como a calçada, que embora façam parte da casa, também podem ser acessadas por pessoas de fora. No aplicativo acontece o mesmo, ele possui um diretório que pertence exclusivamente ao aplicativo, porém, outros apps podem acessá-lo. Isso se refere ao Armazenamento Externo.
Esses dois tipos de armazenamentos, que estão relacionados ao escopo do nosso aplicativo, são considerados específicos.
É nesse tipo de armazenamento que geralmente temos:
Ele pode ser acessado pelos outros aplicativos, porém, com uma determinada condição que é a permissão.
Trazendo esse cenário para nossa analogia, seria como se você quisesse sair de casa para ir em um evento que precisa ingresso, ou seja, a permissão.
O Armazenamento compartilhado pode ser tanto da memória interna do dispositivo quanto de dispositivos conectados a ele, como um cartão de memória ou um pendrive.
O armazenamento específico interno é um bom lugar para guardar informações sensíveis ou temporárias. Isso porque só o aplicativo terá acesso e tudo será apagado após desinstalar o app.
Então, se quisermos guardar uma informação temporárea que não sejam acessadas por outras pessoas, é interessante guardá-las nesse tipo de armazenamento.
Em relação à segurança, tecnicamente esse diretório específico não pode ser acessado por outros apps. Porém, existe uma exceção, o Root, que possibilita o acesso ao superusuário. Sendo assim, a informação armazenada no armazenamento específico interno, pode ser exposta.
Embora esse não seja um procedimento simples, é importante considerar essa possibilidade no desenvolvimento de aplicativos.
Além disso, se quisermos manter um arquivo do dispositivo do usuário após o app ser removido, é preciso salvar a informação no Armazenamento Compartilhado. Que geralmente é a memória do próprio dispositivo ou cartão de memória, por exemplo.
No próximo vídeo colocaremos tudo o que aprendemos em prática utilizando o Android Studio.
Até lá!
O curso Jetpack Compose: lidando com armazenamento de arquivos no Android possui 132 minutos de vídeos, em um total de 57 atividades. Gostou? Conheça nossos outros cursos de Android em Mobile, ou leia nossos artigos de Mobile.
Matricule-se e comece a estudar com a gente hoje! Conheça outros tópicos abordados durante o curso:
Impulsione a sua carreira com os melhores cursos e faça parte da maior comunidade tech.
1 ano de Alura
Assine o PLUS e garanta:
Formações com mais de 1500 cursos atualizados e novos lançamentos semanais, em Programação, Inteligência Artificial, Front-end, UX & Design, Data Science, Mobile, DevOps e Inovação & Gestão.
A cada curso ou formação concluído, um novo certificado para turbinar seu currículo e LinkedIn.
No Discord, você tem acesso a eventos exclusivos, grupos de estudos e mentorias com especialistas de diferentes áreas.
Faça parte da maior comunidade Dev do país e crie conexões com mais de 120 mil pessoas no Discord.
Acesso ilimitado ao catálogo de Imersões da Alura para praticar conhecimentos em diferentes áreas.
Explore um universo de possibilidades na palma da sua mão. Baixe as aulas para assistir offline, onde e quando quiser.
Acelere o seu aprendizado com a IA da Alura e prepare-se para o mercado internacional.
1 ano de Alura
Todos os benefícios do PLUS e mais vantagens exclusivas:
Luri é nossa inteligência artificial que tira dúvidas, dá exemplos práticos, corrige exercícios e ajuda a mergulhar ainda mais durante as aulas. Você pode conversar com a Luri até 100 mensagens por semana.
Aprenda um novo idioma e expanda seus horizontes profissionais. Cursos de Inglês, Espanhol e Inglês para Devs, 100% focado em tecnologia.
Transforme a sua jornada com benefícios exclusivos e evolua ainda mais na sua carreira.
1 ano de Alura
Todos os benefícios do PRO e mais vantagens exclusivas:
Mensagens ilimitadas para estudar com a Luri, a IA da Alura, disponível 24hs para tirar suas dúvidas, dar exemplos práticos, corrigir exercícios e impulsionar seus estudos.
Envie imagens para a Luri e ela te ajuda a solucionar problemas, identificar erros, esclarecer gráficos, analisar design e muito mais.
Escolha os ebooks da Casa do Código, a editora da Alura, que apoiarão a sua jornada de aprendizado para sempre.