Provedores de conteúdo Android

Os provedores de conteúdo do Android facilitam o compartilhamento de dados entre diferentes aplicativos, gerenciando um tipo específico de dados que podem ser consultados, inseridos, atualizados ou excluídos.

Ele atua como uma interface entre a fonte de dados e o aplicativo que requer os dados, garantindo assim o compartilhamento seguro e seguro dos dados.

Os provedores de conteúdo fornecem uma interface comum para acessar dados armazenados em bancos de dados, arquivos ou na Internet.

Acessar um provedor de conteúdo requer conhecer o URI ( Uniform Resource Identifier ) ​​do provedor, que consiste na autoridade do provedor e no caminho para os dados.

O Android fornece provedores de conteúdo integrados, como provedor de contatos, provedor de mídia e provedor de registro de chamadas, enquanto os desenvolvedores também podem criar seus próprios provedores de conteúdo para compartilhar dados entre seus aplicativos ou com outros aplicativos.



Criando um provedor de conteúdo

Os desenvolvedores devem estender a classe ContentProvider e implementar vários métodos para criar um provedor de conteúdo.

Usando esses métodos, você pode gerenciar a fonte de dados, lidar com consultas, inserir, atualizar e excluir dados.

Os seguintes métodos podem ser implementados em um provedor de conteúdo:

Métodos Visão geral
onCreate() Quando o provedor de conteúdo é criado, esse método é chamado. Ele cria a fonte de dados.
consulta() Um aplicativo chama esse método quando solicita dados do provedor de conteúdo. Os dados são retornados como um objeto Cursor.
inserir() O método insert() é chamado quando um aplicativo deseja inserir dados no provedor de conteúdo. O URI dos dados recém-inserido é retornado.
atualizar() O método update() é chamado quando uma aplicação deseja atualizar os dados do Provedor de Conteúdo. O número de linhas afetadas pela atualização é retornado.
excluir() O aplicativo chama esse método para excluir dados do provedor de conteúdo. O número de linhas afetadas pela exclusão é retornado.
getType() Retorna o tipo MIME dos dados gerenciados pelo provedor de conteúdo.

Aqui está um exemplo de um provedor de conteúdo simples que gerencia uma lista de livros.

Defina a classe do contrato:

public final class BookContract {
// Authority for the Content Provider
public static final String AUTHORITY = "com.example.bookprovider";
// Base URI for the Content Provider
public static final Uri BASE_URI = Uri.parse("content://" + AUTHORITY);
// Path for the books table
public static final String PATH_BOOKS = "books";

public static final class BookEntry implements BaseColumns {
// URI for the books table
public static final Uri CONTENT_URI = BASE_URI.buildUpon().appendPath(PATH_BOOKS).build();
// Table name
public static final String TABLE_NAME = "books";
// Column names
public static final String COLUMN_TITLE = "title";
public static final String COLUMN_AUTHOR = "author";
public static final String COLUMN_PRICE = "price";
}
}

Crie um banco de dados SQLite:

public class BookDatabase extends SQLiteOpenHelper {

private static final String DATABASE_NAME = "books.db";
private static final int DATABASE_VERSION = 1;

public BookDatabase(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}

@Override
public void onCreate(SQLiteDatabase db) {
// Create the books table
String CREATE_BOOKS_TABLE = "CREATE TABLE " + BookContract.BookEntry.TABLE_NAME + "("
+ BookContract.BookEntry._ID + " INTEGER PRIMARY KEY,"
+ BookContract.BookEntry.COLUMN_TITLE + " TEXT,"
+ BookContract.BookEntry.COLUMN_AUTHOR + " TEXT,"
+ BookContract.BookEntry.COLUMN_PRICE + " REAL" + ")";
db.execSQL(CREATE_BOOKS_TABLE);
}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// Upgrade the database schema
db.execSQL("DROP TABLE IF EXISTS " + BookContract.BookEntry.TABLE_NAME);
onCreate(db);
}
}

Crie o provedor de conteúdo:

public class BookProvider extends ContentProvider {

private static final int BOOKS = 1;
private static final int BOOK_ID = 2;

private static final UriMatcher sUriMatcher = new UriMatcher(UriMatcher.NO_MATCH);

static {
sUriMatcher.addURI(BookContract.AUTHORITY, BookContract.PATH_BOOKS, BOOKS);
sUriMatcher.addURI(BookContract.AUTHORITY, BookContract.PATH_BOOKS + "/#", BOOK_ID);
}

private BookDatabase mDatabase;

@Override
public boolean onCreate() {
mDatabase = new BookDatabase(getContext());
return true;
}

@Nullable
@Override
public Cursor query(@NonNull Uri uri, @Nullable String[] projection, @Nullable String selection,
@Nullable String

A classe “UserContract” define o contrato para os dados gerenciados pelo provedor de conteúdo.

A classe “UserProvider” estende a classe “ContentProvider” e implementa métodos para executar operações CRUD nos dados.

A classe também é registrada no arquivo AndroidManifest.xml. Na MainActivity, um objeto ContentResolver é obtido e usado para executar uma operação de consulta no provedor de conteúdo, criando um objeto Uri com o URI do provedor de conteúdo e chamando o método query(). O resultado é exibido em um TextView.


Registro do provedor de conteúdo do Android

Um provedor de conteúdo deve ser registrado no arquivo AndroidManifest.xml antes de poder ser usado por outros aplicativos.

O registro inclui a autoridade do provedor e o caminho para seus dados.

O exemplo a seguir define a sintaxe de registro de um provedor de conteúdo:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.myapp">

<application
android:name=".MyApplication"
android:icon="@drawable/app_icon"
android:label="@string/app_name">

<provider
android:name=".MyContentProvider"
android:authorities="com.example.myapp.provider"
android:exported="true"/>

...

</application>

</manifest>

Defina o provedor no arquivo AndroidManifest.xml usando o elemento <provider>. Os seguintes atributos precisam ser definidos

  • android:name: O nome totalmente qualificado da classe Content Provider.
  • android:authorities: Uma string única que identifica o Provedor de Conteúdo para o sistema Android.
  • android:exported: se outros aplicativos podem acessar o provedor de conteúdo. Defina-o como true se desejar que outros aplicativos o acessem.

Acessando um provedor de conteúdo

Para acessar um provedor de conteúdo, um aplicativo precisa de seu URI.

O aplicativo pode acessar o provedor usando um objeto ContentResolver depois de obter o URI.

Para acessar um provedor de conteúdo, siga estas etapas:

  1. Obtenha um objeto ContentResolver chamando getContentResolver() .
  2. Um objeto Uri é criado com o URI do provedor de conteúdo.
  3. Usando o objeto ContentResolver, chame o método apropriado para executar a operação ( query, insert, update, delete ).

Suponha que criamos um provedor de conteúdo personalizado que fornece informações sobre livros.

O provedor tem um URI de “content://com.example.booksprovider/books” e tem as seguintes colunas: “_id” (ID do livro), “title” (título do livro) e “author” (autor do livro).

Para recuperar todos os livros do provedor, podemos usar o seguinte código:

// Step 1: Get a ContentResolver object
ContentResolver resolver = getContentResolver();

// Step 2: Create a Uri object with the URI of the Content Provider
Uri uri = Uri.parse("content://com.example.booksprovider/books");

// Step 3: Call the query() method on the ContentResolver object to retrieve all books
Cursor cursor = resolver.query(uri, null, null, null, null);

// Iterate through the cursor to retrieve the book information
if(cursor != null && cursor.getCount() > 0) {
while(cursor.moveToNext()) {
int bookId = cursor.getInt(cursor.getColumnIndex("_id"));
String bookTitle = cursor.getString(cursor.getColumnIndex("title"));
String bookAuthor = cursor.getString(cursor.getColumnIndex("author"));

// Do something with the book information
}
}

// Close the cursor
if(cursor != null) {
cursor.close();
}

Neste exemplo, a primeira etapa é obter um objeto ContentResolver chamando o método getContentResolver() . Em seguida, um objeto Uri é criado com o URI do provedor de conteúdo (“content://com.example.booksprovider/books”).

Depois disso, o método query() é chamado no objeto ContentResolver para recuperar todos os livros. O método query() retorna um objeto Cursor que contém as informações do livro. O cursor é iterado para recuperar as informações do livro usando o método getColumnIndex().

Por fim, o cursor é fechado para liberar os recursos.

Nós valorizamos o seu feedback.
+1
0
+1
0
+1
0
+1
0
+1
0
+1
0
+1
0

Assine a nossa newsletter
Digite seu e-mail para receber um resumo semanal de nossos melhores posts. Saber mais!
ícone