Compartilhar via


Como funcionam os provedores de conteúdo

Há duas classes envolvidas em uma ContentProvider interação:

  • ContentProvider – Implementa uma API que expõe um conjunto de dados de forma padrão. Os principais métodos são Query, Insert, Update e Delete.

  • ContentResolver – Um proxy estático que se comunica com um ContentProvider para acessar seus dados, de dentro do mesmo aplicativo ou de outro aplicativo.

Um provedor de conteúdo normalmente é apoiado por um banco de dados SQLite, mas a API significa que o código de consumo não precisa saber nada sobre o SQL subjacente. As consultas são feitas por meio de um Uri usando constantes para fazer referência a nomes de coluna (para reduzir as dependências na estrutura de dados subjacente) e um ICursor é retornado para o código de consumo iterar.

Consumindo um ContentProvider

ContentProvidersexpor sua funcionalidade por meio de um Uri registrado no AndroidManifest.xml do aplicativo que publica os dados. Há uma convenção em que o Uri e as colunas de dados expostas devem estar disponíveis como constantes para facilitar a vinculação aos dados. Todos os integrados do Android fornecem classes de ContentProviders conveniência com constantes que fazem referência à estrutura de dados no Android.Providers namespace.

Provedores internos

O Android oferece acesso a uma ampla gama de dados do sistema e do usuário usando ContentProviders:

  • Navegador – favoritos e histórico do navegador (requer permissão READ_HISTORY_BOOKMARKS e/ou WRITE_HISTORY_BOOKMARKS).

  • CallLog – chamadas recentes feitas ou recebidas com o dispositivo.

  • Contatos – informações detalhadas da lista de contatos do usuário, incluindo pessoas, telefones, fotos e grupos.

  • MediaStore – conteúdo do dispositivo do usuário: áudio (álbuns, artistas, gêneros, listas de reprodução), imagens (incluindo miniaturas) e vídeo.

  • Configurações – configurações e preferências de todo o dispositivo em todo o sistema.

  • UserDictionary – conteúdo do dicionário definido pelo usuário usado para entrada de texto preditivo.

  • Correio de voz – histórico de mensagens de correio de voz.

Visão geral das aulas

As classes primárias usadas ao trabalhar com um ContentProvider são mostradas aqui:

Class diagram of Content Provider application and Consuming application interactions

Neste diagrama, o implementa ContentProvider consultas e registra URIs que outros aplicativos usam para localizar dados. O ContentResolver atua como um 'proxy' para os ContentProvider (métodos Query, Insert, Update e Delete). O SQLiteOpenHelper contém dados usados pelo ContentProvider, mas não é diretamente exposto ao consumo de aplicativos. O CursorAdapter cursor passa o ContentResolver retornado pelo para exibir em um ListViewarquivo . O UriMatcher é uma classe auxiliar que analisa URIs ao processar consultas.

O objetivo de cada aula é descrito abaixo:

  • ContentProvider – Implemente os métodos dessa classe abstrata para expor dados. A API é disponibilizada para outras classes e aplicativos por meio do atributo Uri que é adicionado à definição de classe.

  • SQLiteOpenHelper – Ajuda a implementar o armazenamento de dados SQLite exposto pelo ContentProvider.

  • UriMatcher – Use UriMatcher em sua ContentProvider implementação para ajudar a gerenciar o Uris que são usados para consultar o conteúdo.

  • ContentResolver – O código de consumo usa um ContentResolver para acessar uma ContentProvider instância. As duas classes juntas cuidam dos problemas de comunicação entre processos, permitindo que os dados sejam facilmente compartilhados entre aplicativos. O consumo de código nunca cria uma ContentProvider classe explícita, em vez disso, os dados são acessados criando um cursor com base em um Uri exposto pelo ContentProvider aplicativo.

  • CursorAdapter – Use CursorAdapter ou SimpleCursorAdapter exiba dados acessados por meio de um ContentProviderarquivo .

A ContentProvider API permite que os consumidores executem uma variedade de operações nos dados, como:

  • Consultar dados para retornar listas ou registros individuais.
  • Modificar registros individuais.
  • Adicionar novos registros.
  • Excluir registros.

Este documento contém um exemplo que usa um , fornecido ContentProviderpelo sistema, bem como um exemplo simples somente leitura que implementa um ContentProviderarquivo .