MediaStore API: cos'è, funzionalità e lavoro con file multimediali condivisi

Autore: IT Sectr Pubblicato: 2026-07-10 Tempo di lettura: 7 min

MediaStore API è un'interfaccia Android per accedere ai file multimediali condivisi del dispositivo: immagini, video, audio e documenti. A differenza dell'accesso diretto ai file, MediaStore funziona attraverso un database multimediale centralizzato e un content provider. Secondo la documentazione Android Developers (2025), a partire da Android 10 l'API è diventata il meccanismo principale per lavorare con i media, sostituendo il deprecato READ_EXTERNAL_STORAGE. Gli sviluppatori utilizzano MediaStore in gallerie, lettori musicali, fotocamere e gestori di file.

Punti chiave

  • MediaStore è il content provider di sistema Android per l'accesso ai file multimediali condivisi del dispositivo.
  • Database multimediale indicizza centralmente tutte le immagini, i video e l'audio del dispositivo.
  • Android 10 ha reso MediaStore l'unico modo per accedere ai file multimediali condivisi.
  • URI sostituiscono i percorsi di file diretti, garantendo un accesso sicuro.
  • Autorizzazioni vengono richieste per tipo di media: READ_MEDIA_IMAGES, READ_MEDIA_VIDEO, READ_MEDIA_AUDIO.

Cos'è MediaStore API?

MediaStore API è un content provider di sistema sulla piattaforma Android progettato per indicizzare, archiviare e fornire accesso ai file multimediali del dispositivo. L'API fa parte dell'Android SDK ed è disponibile dal API Level 1.

MediaStore opera attraverso un database multimediale unificato che scansiona automaticamente il dispositivo e raccoglie metadati di tutti i file multimediali. Il database viene aggiornato dal sistema quando i file vengono aggiunti, modificati o eliminati, quindi le applicazioni ricevono sempre informazioni aggiornate senza scansione manuale.

Le tabelle principali di MediaStore sono: Images (immagini), Video (video), Audio (audio) e Files (file generali). Ogni tabella contiene colonne con metadati: nome, data di creazione, dimensione, tipo MIME, coordinate GPS e altri attributi.

Evoluzione di MediaStore nelle versioni Android

Prima di Android 10, gli sviluppatori usavano READ_EXTERNAL_STORAGE per accedere a tutti i file del dispositivo. Android 10 (API 29) ha introdotto Scoped Storage: le applicazioni potevano accedere solo ai propri file e tramite MediaStore. Android 11 ha inasprito ulteriormente la politica, bloccando completamente il percorso diretto alle directory condivise.

A partire da Android 13 (API 33), Google ha sostituito READ_EXTERNAL_STORAGE con autorizzazioni granulari: READ_MEDIA_IMAGES, READ_MEDIA_VIDEO e READ_MEDIA_AUDIO. Ciò consente agli utenti di concedere l'accesso solo a tipi specifici di media senza esporre l'intero archivio.

Come funziona MediaStore: architettura e database multimediale

MediaStore è costruito su un'architettura di content provider: ogni applicazione vi accede tramite ContentResolver e Uri. Lo scanner multimediale di sistema — MediaScannerConnection — indicizza automaticamente tutti i file del dispositivo all'avvio, alla connessione USB o al riavvio.

Il database multimediale è memorizzato nel database di sistema e contiene record per ogni file multimediale. Le colonne differiscono per tipo: le immagini hanno ORIENTATION e DATE_TAKEN, i video hanno DURATION, i file audio hanno ARTIST e ALBUM. Gli sviluppatori possono eseguire query simili a SQL con query, projection e selection per filtrare.

kotlin
val projection = arrayOf(
    MediaStore.Images.Media._ID,
    MediaStore.Images.Media.DISPLAY_NAME,
    MediaStore.Images.Media.DATE_ADDED
)

val cursor = contentResolver.query(
    MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
    projection,
    null,
    null,
    MediaStore.Images.Media.DATE_ADDED + " DESC"
)

cursor?.use {
    while (moveToNext()) {
        val name = getString(getColumnIndexOrThrow(MediaStore.Images.Media.DISPLAY_NAME))
    }
}

Content URI e loro significato

Ogni file multimediale è identificato da un Content URI come content://media/external/images/media/1234. L'URI esterno punta all'archivio condiviso, mentre quello interno punta ai file multimediali di sistema. Usare URI invece di percorsi di file è un vantaggio chiave di MediaStore: l'applicazione non necessita di accesso al file system e funziona tramite un content provider sicuro.

Tipi di file multimediali in MediaStore

MediaStore supporta quattro tipi principali di media, ciascuno con la propria tabella e set di metadati. Gli sviluppatori selezionano la tabella appropriata in base al tipo di contenuto con cui lavora l'applicazione.

  • MediaStore.Images — foto, screenshot e immagini. Colonne: BUCKET_DISPLAY_NAME, IS_PRIVATE, LATITUDE, LONGITUDE.
  • MediaStore.Video — registrazioni video e film. Colonne: DURATION, RESOLUTION, IS_DRM.
  • MediaStore.Audio — tracce musicali e file audio. Colonne: ARTIST, ALBUM, COMPOSER, TRACK.
  • MediaStore.Files — documenti e altri file. Disponibile da Android 10 per l'accesso condiviso.

Oltre alle colonne standard, ogni tabella contiene campi di sistema: _ID, DATA (deprecato), SIZE, MIME_TYPE, DATE_ADDED, DATE_MODIFIED. Da Android 10, il campo DATA è deprecato e gli sviluppatori devono lavorare aprendo un InputStream tramite URI.

Autorizzazioni per lavorare con MediaStore

MediaStore richiede autorizzazioni esplicite, che differiscono in base alla versione di Android. Prima di Android 13, veniva utilizzata l'autorizzazione singola READ_EXTERNAL_STORAGE. A partire da Android 13 (API 33), Google ha introdotto autorizzazioni granulari per ogni tipo di media.

Tipo di mediaAutorizzazione (API 33+)Precedente (API 29–32)
ImmaginiREAD_MEDIA_IMAGESREAD_EXTERNAL_STORAGE
VideoREAD_MEDIA_VIDEOREAD_EXTERNAL_STORAGE
AudioREAD_MEDIA_AUDIOREAD_EXTERNAL_STORAGE
ScritturaWRITE_EXTERNAL_STORAGEWRITE_EXTERNAL_STORAGE

Scrivere in MediaStore richiede anche WRITE_EXTERNAL_STORAGE per Android 9 e versioni precedenti. A partire da Android 10, un'applicazione può scrivere i propri file in MediaStore senza autorizzazioni aggiuntive — il sistema concede automaticamente l'accesso quando si inserisce un record tramite ContentResolver.insert.

Richiedere autorizzazioni in fase di esecuzione

Le autorizzazioni di MediaStore vengono richieste tramite il meccanismo standard ActivityResultContracts.RequestMultiplePermissions. L'utente può rifiutare la richiesta e l'applicazione deve gestire correttamente questo scenario. Si raccomanda di verificare l'autorizzazione tramite ContextCompat.checkSelfPermission prima di ogni accesso a MediaStore.

Esempi di codice: lettura e scrittura tramite MediaStore

MediaStore consente non solo di leggere ma anche di scrivere file multimediali. Per scrivere un'immagine o un video, lo sviluppatore usa ContentResolver.insert e apre un OutputStream per l'URI restituito. Il sistema aggiunge automaticamente il file al database multimediale e lo indicizza.

kotlin
val values = ContentValues().apply {
    put(MediaStore.Images.Media.DISPLAY_NAME, "photo_2025.jpg")
    put(MediaStore.Images.Media.MIME_TYPE, "image/jpeg")
    put(MediaStore.Images.Media.RELATIVE_PATH, "Pictures/MyApp")
}

val uri = contentResolver?.insert(
    MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values
)

uri?.let {
    val outputStream = contentResolver?.openOutputStream(it)
    outputStream?.use { stream ->
        // scrivere byte nel flusso
    }
}

Eliminare file multimediali tramite MediaStore

L'eliminazione viene eseguita tramite ContentResolver.delete con l'URI del file. Il sistema verifica i diritti di accesso: se il file appartiene all'applicazione corrente, l'eliminazione avviene senza autorizzazioni aggiuntive. Per i file di altre applicazioni su Android 10+, è richiesta la conferma dell'utente tramite un dialogo di sistema.

MediaStore vs accesso diretto ai file

MediaStore API differisce fondamentalmente dall'accesso diretto ai file tramite File API. Invece di percorsi di file, vengono utilizzati Content URI, e invece di operazioni sui file, vengono utilizzati metodi ContentResolver. Ciò offre tre vantaggi principali: sicurezza, indicizzazione automatica e interfaccia unificata.

L'accesso diretto ai file è limitato su Android 10+ per le directory condivise. MediaStore rimane l'unico modo per leggere media da Pictures, DCIM, Movies, Music e Download. Per i file specifici dell'applicazione (app-specific storage), l'accesso diretto è preservato — si tratta delle cartelle in Android/data e Android/media.

La scelta tra MediaStore e accesso diretto dipende dal tipo di contenuto. MediaStore è obbligatorio per i file multimediali condivisi accessibili da altre applicazioni. La File API diretta è adatta per file interni dell'applicazione e cache. Storage Access Framework viene utilizzato per selezionare documenti arbitrari tramite il selettore di sistema.

Domande frequenti

Cos'è MediaStore API in Android?

MediaStore API è il content provider di sistema Android per accedere ai file multimediali del dispositivo: immagini, video, audio e documenti. L'API fornisce un'interfaccia unificata tramite ContentResolver e un database multimediale che indicizza automaticamente tutti i file.

Quali tipi di media supporta MediaStore?

MediaStore supporta Images (immagini), Video (video), Audio (audio) e Files (documenti). Ogni tipo ha la propria tabella con il proprio set di metadati: le immagini hanno ORIENTATION, i video hanno DURATION, i file audio hanno ARTIST.

Quali autorizzazioni sono necessarie per MediaStore su Android 13?

Su Android 13+ vengono utilizzate autorizzazioni granulari: READ_MEDIA_IMAGES per le immagini, READ_MEDIA_VIDEO per i video e READ_MEDIA_AUDIO per l'audio. L'utente può concedere l'accesso solo a tipi specifici di media.

Come scrivere un file tramite MediaStore?

Per scrivere, crea ContentValues con nome e tipo MIME, chiama ContentResolver.insert per ottenere un URI, quindi apri un OutputStream tramite ContentResolver.openOutputStream. Il sistema indicizza automaticamente il nuovo file.

In cosa MediaStore differisce da Storage Access Framework?

MediaStore fornisce accesso programmatico a tutti i file multimediali del dispositivo tramite un database multimediale. Storage Access Framework apre un dialogo di selezione file di sistema e restituisce un URI — l'utente seleziona un file o una cartella specifici.

Riepilogo

  • MediaStore API è il meccanismo principale per accedere ai file multimediali Android, funzionante tramite un content provider e un database multimediale.
  • Database multimediale indicizza automaticamente immagini, video, audio e documenti, fornendo accesso ai metadati tramite ContentResolver.
  • Android 10 ha reso MediaStore l'unico modo per accedere ai file multimediali condivisi, limitando l'accesso diretto ai file.
  • Android 13 ha introdotto autorizzazioni granulari READ_MEDIA_IMAGES, READ_MEDIA_VIDEO e READ_MEDIA_AUDIO invece del singolo READ_EXTERNAL_STORAGE.
  • Content URI sostituisce i percorsi di file, garantendo accesso sicuro senza privilegi di root ai file di altre applicazioni.
  • Scrittura tramite MediaStore viene eseguita tramite ContentResolver.insert e openOutputStream con indicizzazione automatica nel database multimediale.
  • Scelta tra MediaStore e SAF dipende dall'attività: MediaStore per operazioni batch sui media, SAF per la selezione di file individuali da parte dell'utente.

Svilupperemo un'applicazione mobile chiavi in mano

IT Sectr crea applicazioni iOS e Android per startup e aziende dal 2017. Ti consulteremo e ti proporremo la soluzione migliore.

Discuti il progetto

Leggi anche