Android Storage Access Framework: listar archivos sin pedir acceso total al almacenamiento
Una herramienta de archivos necesita una estrategia para acceder a documentos que respete el modelo de permisos moderno de Android. Solicitar acceso indiscriminado a todo el almacenamiento puede ser innecesario para muchas tareas.
El problema y el alcance del ejemplo
La ficha de FileManager: Gestor Archivos resume su función así: «Gestor de archivos para organizar, limpiar y proteger tu almacenamiento.» FileManager ofrece gestión de carpetas y archivos según su descripción pública. Nuestro ejemplo elige una carpeta concreta mediante el selector del sistema y lista su contenido. Es una alternativa educativa para funciones acotadas; no pretende explicar cómo está implementado FileManager.
Cómo reproducir la idea
Crea una Activity Android con Kotlin y agrega androidx.documentfile:documentfile y androidx.activity:activity en versiones compatibles con tu proyecto. Este ejemplo es una Activity mínima que presenta el selector de carpetas.
import android.app.Activity
import android.content.Intent
import android.os.Bundle
import android.widget.TextView
import androidx.activity.result.contract.ActivityResultContracts
import androidx.activity.ComponentActivity
import androidx.documentfile.provider.DocumentFile
class MainActivity : ComponentActivity() {
private lateinit var result: TextView
private val pickFolder = registerForActivityResult(
ActivityResultContracts.OpenDocumentTree()
) { uri ->
if (uri == null) return@registerForActivityResult
contentResolver.takePersistableUriPermission(
uri, Intent.FLAG_GRANT_READ_URI_PERMISSION
)
val folder = DocumentFile.fromTreeUri(this, uri)
val names = folder?.listFiles()?.mapNotNull { it.name }.orEmpty()
result.text = names.joinToString("\n").ifBlank { "Carpeta vacía" }
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
result = TextView(this).apply {
text = "Toca para elegir una carpeta"
setPadding(24, 24, 24, 24)
setOnClickListener { pickFolder.launch(null) }
}
setContentView(result)
}
}
Qué demuestra el código
OpenDocumentTree permite elegir un directorio y recibir una URI autorizada. DocumentFile trabaja con documentos mediante esa URI, no suponiendo que tienen una ruta local convencional. Conservar permiso de lectura facilita volver a abrir ese árbol mientras el proveedor siga disponible.
Pruebas recomendadas
Prepara una carpeta con dos archivos y ábrela desde el selector. Deben aparecer sus nombres. Repite con una carpeta vacía y luego con un proveedor remoto: observarás que los tiempos y capacidades cambian según el origen.
Límites que conviene reconocer
El ejemplo lista archivos en el hilo principal (aceptable únicamente para la demo de pocos elementos); usa coroutines y un repositorio en producción. El acceso a ciertas ubicaciones está restringido por Android; un proveedor puede revocar permisos y no todos permiten escritura.
Qué aprendemos
Un gestor de archivos robusto diseña alrededor de URI y proveedores, no alrededor de una única ruta del teléfono. Esto mejora compatibilidad y limita el alcance de los permisos.
Contexto y enlaces del autor
El tema se relaciona con las funciones declaradas públicamente de FileManager: Gestor Archivos, una aplicación Android de AppInitDev. El código anterior es un ejemplo independiente: no se ha inspeccionado el repositorio privado ni se afirma que sea la implementación interna de la app. La referencia aparece al final para ofrecer contexto, no como requisito para completar el tutorial.
- Google Play: FileManager: Gestor Archivos
- Página de la aplicación: https://file-explorer.appinitdev.com/
- Sitio del desarrollador: AppInitDev

Top comments (0)