Sobes.tech
Middle

Habla sobre receptores y proveedores de contenido en Android.

sobes.tech AI

Respuesta de la IA

Los receptores (Broadcast Receivers) reaccionan a mensajes de difusión del sistema, como notificaciones de batería baja, conexión de red o toma de fotos. No tienen interfaz visual y realizan tareas en segundo plano.

Existen dos tipos principales:

  • Registrados estáticamente: Se declaran en AndroidManifest.xml. El sistema inicia la aplicación al recibir el intent correspondiente, incluso si no está en ejecución.
  • Registrados dinámicamente: Se registran en el código mediante Context.registerReceiver(). Solo funcionan mientras el componente (por ejemplo, una actividad) exista.

Cada receptor implementa el método onReceive(Context context, Intent intent), donde se procesa el intent entrante.

Los proveedores de contenido (Content Providers) gestionan el acceso compartido a datos estructurados. Proporcionan una interfaz estandarizada CRUD (Crear, Leer, Actualizar, Borrar) para interactuar con datos almacenados en diversas fuentes (bases de datos SQLite, archivos, datos de red, etc.).

Métodos principales del proveedor de contenido:

  • onCreate(): Inicializa el proveedor.
  • query(): Obtiene datos de la fuente.
  • insert(): Añade nuevos datos.
  • update(): Actualiza datos existentes.
  • delete(): Elimina datos.
  • getType(): Devuelve el tipo MIME de los datos para un URI dado.

El acceso al proveedor de contenido se realiza a través de ContentResolver. URI (Identificador de Recursos Unificado) se usa para identificar un conjunto específico de datos.

Ejemplo de uso de ContentResolver para consultar datos:

// Uri para la tabla de contactos
Uri contactsUri = ContactsContract.Contacts.CONTENT_URI;

String[] projection = {
    ContactsContract.Contacts._ID,
    ContactsContract.Contacts.DISPLAY_NAME
};

// Consulta de datos
Cursor cursor = getContentResolver().query(
    contactsUri,
    projection,
    null, // selección
    null, // argumentos de selección
    null  // orden de clasificación
);

if (cursor != null) {
    while (cursor.moveToNext()) {
        long contactId = cursor.getLong(cursor.getColumnIndexOrThrow(ContactsContract.Contacts._ID));
        String displayName = cursor.getString(cursor.getColumnIndexOrThrow(ContactsContract.Contacts.DISPLAY_NAME));
        // Procesamiento de datos
    }
    cursor.close();
}

Ejemplo de registro de un receptor estático en AndroidManifest.xml:

<receiver
    android:name=".MyBroadcastReceiver"
    android:enabled="true"
    android:exported="true">
    <intent-filter>
        <action android:name="android.intent.action.BATTERY_LOW" />
    </intent-filter>
</receiver>

Ejemplo de implementación del receptor:

public class MyBroadcastReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        if (intent.getAction() != null && intent.getAction().equals(Intent.ACTION_BATTERY_LOW)) {
            // Acciones a realizar en caso de batería baja
        }
    }
}

Diferencias clave:

Característica Receptores (Broadcast Receivers) Proveedores de contenido (Content Providers)
Propósito Reacción a eventos de difusión Gestión del acceso a datos
Interfaz onReceive() Métodos CRUD a través de ContentResolver
Visualización No presente No presente
Acceso Reciben intents del sistema Proporcionan datos bajo solicitud