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 |