Tutoriais Android para iniciantes - Parte 4: Provedor de conteúdo



Este tutorial Android discute os conceitos do provedor de conteúdo. É um importante bloco de construção do Android, facilitando a troca de dados no sistema Android.

Em nossos tutoriais Android anteriores para iniciantes, discutimos os três primeiros blocos de construção do Android: Atividade , Intenção e Serviços . Este artigo é o quarto desta série de tutoriais do Android para iniciantes e discute o Provedor de conteúdo, que é outro componente muito importante do sistema Android.

O Provedor de Conteúdo é o intermediário do seu sistema Android, facilitando a troca de dados entre diferentes aplicativos Android. Vamos entrar um pouco nos detalhes disso neste tutorial do Android.





Tutorial do Android para iniciantes-4 Bônus: Baixe o código do provedor de conteúdo aqui . Você vai querer esse código depois de passar pelo tutorial! :)

[dl url = ”#” class = ”eModal eModal-6 ″ title =” Código de download ”desc =” ”type =” ”align =” ”para =” download ”]



Tutoriais Android: Provedor de conteúdo

O Provedor de Conteúdo facilita o acesso a um armazenamento de dados central ou warehouse para permitir o compartilhamento e manipulação de dados em diferentes aplicativos.

Aqui estão alguns exemplos de provedores de conteúdo padrão na API do sistema Android:

Tutoriais Android: Provedores de conteúdo padrão no sistema Android



comprimento de javascript de uma matriz

Esses provedores de conteúdo permitem a abstração do usuário de um banco de dados subjacente. Geralmente, os provedores de conteúdo usam o SQLite para armazenar o banco de dados subjacente.

Tomemos o exemplo sempre útil do bom e velho aplicativo do Facebook, que também nos ajudou a simplificar as coisas em tutoriais anteriores do Android!

Todos vocês, em algum momento de sua vida nas redes sociais, enviaram uma foto para a linha do tempo do Facebook, certo! Como você faz isso?

Ao clicar no botão Foto na parede, você acessa a galeria de fotos. Lá você pode escolher uma foto para fazer upload.

Tendo lido os artigos anteriores de Série de tutoriais do Android , você conhece Atividades e Intenções, portanto, você sabe que isso é o que acontece:

Seu mural do Facebook é uma “ATIVIDADE”. Ao clicar no Botão Foto, é passada uma “INTENÇÃO” que transmite a mensagem e o “PROVEDOR DE CONTEÚDO” (Galeria de Fotos) é aberto. A foto é carregada usando um upload de rede “SERVIÇO”.

Assista a este vídeo ao vivo para saber como o Provedor de Conteúdo funciona dentro do seu aplicativo do Facebook.

Por que o sistema Android precisa de provedores de conteúdo?

A necessidade de Provedores de Conteúdo surge porque o banco de dados criado em um aplicativo não é visível para um segundo aplicativo.

É simples criar e armazenar banco de dados em diferentes aplicações usando SQLite, porém o problema é este, um banco de dados no Android é privado para o aplicativo que o cria . Não existe uma área de armazenamento comum no Android que todos os aplicativos possam acessar. Portanto, para que diferentes aplicativos usem um banco de dados, o sistema Android precisa de uma interface que permita a troca de dados entre aplicativos e processos. É aqui que o provedor de conteúdo entra em ação.

Eu realmente preciso de um provedor de conteúdo?

1) Você não precisa desenvolver seu próprio provedor se quiser um banco de dados privado para um aplicativo específico (este banco de dados não seria acessível para aplicativos diferentes daquele que o criou).

2) Você no entanto precisa de um provedor personalizado para fornecer sugestões de pesquisa personalizadas em seu próprio sistema de aplicativo.

3) Você também precisaria de um provedor de conteúdo para copiar e colar dados complexos de seu aplicativo em outros aplicativos.

Quais são as operações suportadas por um provedor de conteúdo?

Os provedores de conteúdo oferecem suporte às seguintes operações básicas:

1) Consultando: Consulta o Provedor de Conteúdo para todos os objetos, com base no URI especificado.

2) Excluir: Exclui os objetos especificados do banco de dados de um provedor de conteúdo.

3) Atualizar: Faz atualizações nos objetos do banco de dados.

4) Inserir: Insere um novo objeto no banco de dados.

Passos para realizar uma operação no Provedor de Conteúdo

Etapa 1: Acessando um provedor de conteúdo

Objeto cliente ContentResolver é usado para acessar dados do Provedor de Conteúdo. Ele se comunica com o objeto provedor, que por sua vez aceita a solicitação de acesso aos dados e retorna os resultados desejados. A interface de troca de dados fornecida pelo provedor e pelo objeto cliente do provedor permite a comunicação entre diferentes processos / aplicativos.

O aplicativo que precisa acessar o banco de dados deve declarar isso e solicitar permissões em seu arquivo de manifesto. Isso seria discutido em detalhes em nossos tutoriais Android subsequentes.

URI de conteúdo

URI de conteúdo é um dos argumentos usados ​​para identificar os dados em um provedor. Possui quatro partes:

1) Esquema: O esquema para provedor de conteúdo tem um valor constante: “conteúdo”.

2) Autoridade: É o nome simbólico do provedor e é exclusivo para cada um. É assim que destacamos o provedor de conteúdo desejado em uma lista de tantos.

3) Caminho: Caminho ajuda a distinguir os dados necessários do banco de dados completo . Por exemplo, o Provedor de conteúdo de registro de chamadas diferencia entre chamadas perdidas, chamadas recebidas, etc., usando caminhos diferentes.

4) EU IRIA: Não é um componente obrigatório e pode não estar presente no URI, mas, se estiver presente, deve ser numérico. Por exemplo, se você deseja acessar um arquivo de música específico de seu provedor de conteúdo de mídia, você também deve especificar um ID .

O processo

Usando a autoridade do provedor, o ContentResolver identifica o provedor de conteúdo correto (já que a autoridade é exclusiva para cada provedor de conteúdo). Feito isso, o componente de caminho do URI é usado para selecionar a tabela de dados correta (solicitada). Caso um ID esteja presente, o provedor saberia quais dados exatos estão sendo solicitados.

URIs são de dois tipos:

Além disso, os URIs também podem ter informações limitantes.

Etapa 2: como recuperar dados de um provedor de conteúdo

Mesmo que o ContentResolver tenha acesso à tabela de dados agora, ele não pode recuperar os dados necessários, a menos que o aplicativo tenha “Permissão de acesso de leitura” para esse provedor específico. Essa permissão é definida no arquivo de manifesto de cada provedor de conteúdo.

Tudo isso um aplicativo (que deseja acessar este banco de dados) tem que fazer é solicitar essa permissão.

Agora, conforme discutido anteriormente neste tutorial Android, quatro operações podem ser realizadas usando um provedor de conteúdo . Examinaremos um por um.

QUERYING

Agora, você acessou o provedor e tem permissão para recuperar dados dele. A próxima etapa é construir a consulta para solicitar a ação necessária do provedor .

Aqui estão os argumentos usados ​​durante a consulta:

1) ÓDIO : Funciona exatamente como explicado acima.

2) Projeção: A consulta deve retornar um conjunto de colunas de toda a tabela do banco de dados . Isso é conhecido como projeção. Passar nulo retornará todas as colunas, o que é ineficiente.

3) Cláusula de Seleção: PARA filtro que declara quais linhas retornar , formatado como uma cláusula SQL WHERE (excluindo o próprio WHERE). Passar nulo retornará todas as linhas do URI fornecido.

Por exemplo, se você inserir um alfabeto (diga 'P') na coluna de pesquisa de seu catálogo de endereços, ele retornará todos os detalhes de contato começando com 'P'. No entanto, se você não inserir nada na barra de pesquisa, a lista completa de contatos é recuperada (a cláusula de seleção é definida como 'nula' em tais casos).

4) Argumento de seleção: Você pode incluir “? S” na seleção, que será substituído pelos valores de selectionArgs, na ordem em que aparecem na seleção.

5) Ordem de classificação: Cláusula SQL ORDER BY (excluindo o próprio ORDER BY). Passar nulo irá buscar os resultados que podem estar desordenados.

EXEMPLO DE CÓDIGO para consulta:

  • Pesquisando números de telefone em Contatos
Cursor cursor = contentresolver.query (ContactsContract.Contacts.CONTENT_URI, null, null, null, null) int count = cursor.getCount () if (count> 0) {String contactDetails = '' while (cursor.moveToNext ()) { String columnId = ContactsContract.Contacts._ID int cursorIndex = cursor.getColumnIndex (columnId) String id = cursor.getString (cursorIndex) String name = cursor.getString (cursor .getColumnIndex (ContactsContract.Contacts.DISPLAY_NAME)) int numCount = Integer.parseInt (cursor.getString (cursor .getColumnIndex (ContactsContract.Contacts.HAS_PHONE_NUMBER))) if (numCount> 0) {Cursor phoneCursor = contentresolver.query (ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, CommonDataKinds.Phone.CONTACT? , new String [] {id}, null) while (phoneCursor.moveToNext ()) {String phoneNo = phoneCursor.getString (phoneCursor .getColumnIndex (ContactsContract.CommonDataKinds. Phone.NUMBER)) contactDetails + = 'Nome:' + nome + ', No. de telefone:' + phoneNo + ''} phoneCursor.close ()}}}

INSERÇÃO

Suponhamos que você queira inserir novos contatos em sua lista de endereços. Objeto ContentValues é usado para fazer essas inserções. As chaves do objeto ContentValue e as colunas do Provedor de conteúdo devem corresponder para isso. Aqui está um exemplo disso:

EXEMPLO DE CÓDIGO PARA Inserção:

  • A operação consiste em inserir uma nova entrada com o nome “Rajnikant” e o número “9988999888”
// Operação ArrayList ops = new ArrayList () int rawContactInsertIndex = ops.size () ops.add (ContentProviderOperation.newInsert (RawContacts.CONTENT_URI) .withValue (RawContacts.ACCOUNT_TYPE, nulo) .withValue (RawContacts.ACCOUNT_NAME). / ) ops.add (ContentProviderOperation.newInsert (Data.CONTENT_URI) .withValueBackReference (Data.RAW_CONTACT_ID, rawContactInsertIndex) .withValue (Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE) .withValue8. , Phone.TYPE_MOBILE) .build ()) getContentResolver (). ApplyBatch (ContactsContract.AUTHORITY, ops)

ATUALIZANDO

Para atualizar um provedor de conteúdo, os seguintes argumentos são usados:

1) ÓDIO: O URI do provedor de conteúdo

2) ContentValues: Contém os valores que substituiriam os dados existentes.

3) Cláusula de Seleção: Isso pode ajudar a selecionar os registros específicos para atualizar

4) Argumento de seleção: Você pode incluir “? S” na seleção, que será substituído pelos valores de selectionArgs, na ordem em que aparecem na seleção.

Mais uma vez, o as chaves do objeto ContentValues ​​devem corresponder às colunas no provedor de conteúdo caso contrário, a atualização não ocorreria.

EXEMPLO DE CÓDIGO PARA Atualização:

  • Atualizar o número de telefone onde o nome é “Rajnikant”
String where = ContactsContract.Data.DISPLAY_NAME + '=? 'String [] params = new String [] {“Rajnikant”} ArrayList ops = new ArrayList () ops.add (ContentProviderOperation.newUpdate (ContactsContract.Data.CONTENT_URI) .withSelection (onde, params) .withValue (ContactsContract.CommonDataKinds. Phone.NUMBER, “9876543210”) .build ()) getContentResolver (). ApplyBatch (ContactsContract.AUTHORITY, ops)

ELIMINAÇÃO

A exclusão usa os mesmos argumentos da atualização, com exceção do argumento ContentValues, que não é necessário, pois não haverá nenhum valor substituído.

EXEMPLO DE CÓDIGO PARA Exclusão:

  • Exclua o contato cujo nome é “Rajnikant”
String where = ContactsContract.Data.DISPLAY_NAME + '=? 'String [] params = new String [] {“Rajnikant”} ArrayList ops = new ArrayList () ops.add (ContentProviderOperation.newDelete (ContactsContract.RawContacts.CONTENT_URI) .withSelection (onde, params) .build ()) getContentResolver ( ) .applyBatch (ContactsContract.AUTHORITY, ops)

No caso da operação Insert, o URI deve ser baseado no diretório. Em todos os outros casos, os URIs podem ser baseados em ID ou em diretório.

Esperamos Tutorial Android para iniciantes: Parte 5 não foi muito difícil de entender! Discutiremos mais sobre os provedores de conteúdo em tutoriais subsequentes do Android. Divirta-se aprendendo o básico até então!

Você tem alguma dúvida neste tutorial Android? Pergunte-nos.

Aprendizagem feliz!

Os seguintes recursos foram usados ​​na criação deste Tutorial Android! Desenvolvedores oficiais do Android , Edureka.in

Você também pode gostar destas postagens relacionadas: