MediaStore API: τι είναι, δυνατότητες και εργασία με κοινά αρχεία πολυμέσων

Συγγραφέας: IT Sectr Δημοσιεύτηκε: 2026-07-10 Χρόνος ανάγνωσης: 7 λεπ

MediaStore API — είναι η διεπαφή Android για πρόσβαση στα κοινά αρχεία πολυμέσων της συσκευής: εικόνες, βίντεο, ήχος και έγγραφα. Σε αντίθεση με την άμεση πρόσβαση σε αρχεία, το MediaStore λειτουργεί μέσω μιας κεντρικοποιημένης βάσης δεδομένων πολυμέσων και ενός παρόχου περιεχομένου. Σύμφωνα με το Android Developers Documentation (2025), από το Android 10 το API έγινε ο κύριος μηχανισμός εργασίας με πολυμέσα αντί του ξεπερασμένου READ_EXTERNAL_STORAGE. Οι προγραμματιστές χρησιμοποιούν το MediaStore σε γκαλερί, προγράμματα αναπαραγωγής μουσικής, κάμερες και διαχειριστές αρχείων.

Κύρια σημεία

  • MediaStore — ο πάροχος περιεχομένου συστήματος Android για πρόσβαση στα κοινά αρχεία πολυμέσων της συσκευής.
  • Βάση δεδομένων πολυμέσων ευρετηριάζει κεντρικοποιημένα όλες τις εικόνες, βίντεο και ήχο στη συσκευή.
  • Android 10 έκανε το MediaStore τον μοναδικό τρόπο πρόσβασης σε κοινά αρχεία πολυμέσων.
  • Σύνδεσμοι Uri αντικαθιστούν τις άμεσες διαδρομές αρχείων, παρέχοντας ασφαλή πρόσβαση.
  • Άδειες ζητούνται ανά τύπο πολυμέσων: READ_MEDIA_IMAGES, READ_MEDIA_VIDEO, READ_MEDIA_AUDIO.

Τι είναι το MediaStore API;

MediaStore API — είναι ένας πάροχος περιεχομένου συστήματος στην πλατφόρμα Android, σχεδιασμένος για ευρετηρίαση, αποθήκευση και παροχή πρόσβασης σε αρχεία πολυμέσων της συσκευής. Το API αποτελεί μέρος του Android SDK και είναι διαθέσιμο από το API Level 1.

Το MediaStore λειτουργεί μέσω μιας ενιαίας βάσης δεδομένων πολυμέσων που σαρώνει αυτόματα τη συσκευή και συλλέγει μεταδεδομένα όλων των αρχείων πολυμέσων. Η βάση δεδομένων ενημερώνεται από το σύστημα κατά την προσθήκη, τροποποίηση ή διαγραφή αρχείων, έτσι οι εφαρμογές λαμβάνουν πάντα ενημερωμένες πληροφορίες χωρίς χειροκίνητη σάρωση.

Οι κύριοι πίνακες του MediaStore: Images (εικόνες), Video (βίντεο), Audio (ήχος) και Files (γενικά αρχεία). Κάθε πίνακας περιέχει στήλες με μεταδεδομένα: όνομα, ημερομηνία δημιουργίας, μέγεθος, τύπο MIME, συντεταγμένες GPS και άλλα χαρακτηριστικά.

Εξέλιξη του MediaStore στις εκδόσεις Android

Πριν από το Android 10, οι προγραμματιστές χρησιμοποιούσαν το READ_EXTERNAL_STORAGE για πρόσβαση σε όλα τα αρχεία της συσκευής. Android 10 (API 29) εισήγαγε το Scoped Storage: οι εφαρμογές απέκτησαν πρόσβαση μόνο στα δικά τους αρχεία και μέσω MediaStore. Το Android 11 ενίσχυσε την πολιτική, αποκλείοντας εντελώς την άμεση διαδρομή προς κοινόχρηστους καταλόγους.

Από Android 13 (API 33), η Google αντικατέστησε το READ_EXTERNAL_STORAGE με λεπτομερείς άδειες: READ_MEDIA_IMAGES, READ_MEDIA_VIDEO και READ_MEDIA_AUDIO. Αυτό επιτρέπει στον χρήστη να παρέχει πρόσβαση μόνο σε συγκεκριμένους τύπους πολυμέσων χωρίς να αποκαλύπτει ολόκληρο τον αποθηκευτικό χώρο.

Πώς λειτουργεί το MediaStore: αρχιτεκτονική και βάση δεδομένων πολυμέσων

MediaStore είναι χτισμένο στην αρχιτεκτονική παρόχου περιεχομένου: κάθε εφαρμογή έχει πρόσβαση σε αυτό μέσω ContentResolver και Uri. Ο σαρωτής πολυμέσων συστήματος — MediaScannerConnection — ευρετηριάζει αυτόματα όλα τα αρχεία στη συσκευή κατά την εκκίνηση, σύνδεση USB ή επανεκκίνηση.

Η βάση δεδομένων πολυμέσων αποθηκεύεται στη βάση δεδομένων συστήματος και περιέχει εγγραφές για κάθε αρχείο πολυμέσων. Οι στήλες διαφέρουν για διαφορετικούς τύπους: οι εικόνες έχουν ORIENTATION και DATE_TAKEN, τα βίντεο — DURATION, ο ήχος — ARTIST και ALBUM. Οι προγραμματιστές μπορούν να εκτελούν SQL-όμοια ερωτήματα μέσω query με projection και selection για φιλτράρισμα.

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 και η σημασία τους

Κάθε αρχείο πολυμέσων αναγνωρίζεται από ένα Content URI της μορφής content://media/external/images/media/1234. Το εξωτερικό URI (external) αναφέρεται στον κοινόχρηστο αποθηκευτικό χώρο, το εσωτερικό (internal) — στα αρχεία πολυμέσων συστήματος. Η χρήση URI αντί για διαδρομές αρχείων — βασικό πλεονέκτημα του MediaStore: η εφαρμογή δεν απαιτεί πρόσβαση στο σύστημα αρχείων και λειτουργεί μέσω ασφαλούς παρόχου περιεχομένου.

Τύποι αρχείων πολυμέσων στο MediaStore

MediaStore υποστηρίζει τέσσερις κύριους τύπους πολυμέσων, ο καθένας με ξεχωριστό πίνακα και σύνολο μεταδεδομένων. Οι προγραμματιστές επιλέγουν τον κατάλληλο πίνακα ανάλογα με τον τύπο περιεχομένου με τον οποίο εργάζεται η εφαρμογή.

  • MediaStore.Images — φωτογραφίες, στιγμιότυπα οθόνης και σχέδια. Στήλες: BUCKET_DISPLAY_NAME, IS_PRIVATE, LATITUDE, LONGITUDE.
  • MediaStore.Video — εγγραφές βίντεο και ταινίες. Στήλες: DURATION, RESOLUTION, IS_DRM.
  • MediaStore.Audio — μουσικά κομμάτια και αρχεία ήχου. Στήλες: ARTIST, ALBUM, COMPOSER, TRACK.
  • MediaStore.Files — έγγραφα και υπόλοιπα αρχεία. Διαθέσιμο από Android 10 για γενική πρόσβαση.

Εκτός από τις τυπικές στήλες, κάθε πίνακας περιέχει πεδία συστήματος: _ID, DATA (ξεπερασμένο), SIZE, MIME_TYPE, DATE_ADDED, DATE_MODIFIED. Από την έκδοση Android 10, το πεδίο DATA έχει επισημανθεί ως deprecated και οι προγραμματιστές πρέπει να εργάζονται μέσω ανοίγματος InputStream βάσει URI.

Άδειες για εργασία με το MediaStore

MediaStore απαιτεί ρητές άδειες που διαφέρουν ανάλογα με την έκδοση Android. Πριν από το Android 13 χρησιμοποιείτο η ενιαία άδεια READ_EXTERNAL_STORAGE. Από Android 13 (API 33), η Google εισήγαγε λεπτομερείς άδειες για κάθε τύπο πολυμέσων.

Τύπος πολυμέσωνΆδεια (API 33+)Παλιά (API 29-32)
ΕικόνεςREAD_MEDIA_IMAGESREAD_EXTERNAL_STORAGE
ΒίντεοREAD_MEDIA_VIDEOREAD_EXTERNAL_STORAGE
ΉχοςREAD_MEDIA_AUDIOREAD_EXTERNAL_STORAGE
ΕγγραφήWRITE_EXTERNAL_STORAGEWRITE_EXTERNAL_STORAGE

Η εγγραφή στο MediaStore απαιτεί επίσης WRITE_EXTERNAL_STORAGE για Android 9 και παλαιότερα. Από Android 10, η εφαρμογή μπορεί να γράφει τα δικά της αρχεία στο MediaStore χωρίς πρόσθετες άδειες — το σύστημα παρέχει αυτόματα πρόσβαση κατά την εισαγωγή εγγραφής μέσω ContentResolver.insert.

Αίτηση αδειών κατά το runtime

Οι άδειες MediaStore ζητούνται μέσω του τυπικού μηχανισμού ActivityResultContracts.RequestMultiplePermissions. Ο χρήστης μπορεί να απορρίψει το αίτημα και η εφαρμογή πρέπει να χειριστεί σωστά αυτό το σενάριο. Συνιστάται ο έλεγχος ύπαρξης άδειας μέσω ContextCompat.checkSelfPermission πριν από κάθε πρόσβαση στο MediaStore.

Παραδείγματα κώδικα: ανάγνωση και εγγραφή μέσω MediaStore

MediaStore επιτρέπει όχι μόνο ανάγνωση, αλλά και εγγραφή αρχείων πολυμέσων. Για εγγραφή εικόνας ή βίντεο, ο προγραμματιστής χρησιμοποιεί ContentResolver.insert και ανοίγει OutputStream στο επιστρεφόμενο URI. Το σύστημα προσθέτει αυτόματα το αρχείο στη βάση δεδομένων πολυμέσων και το ευρετηριάζει.

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 ->
        // εγγραφή byte στη ροή
    }
}

Διαγραφή αρχείων πολυμέσων μέσω MediaStore

Η διαγραφή γίνεται μέσω ContentResolver.delete με καθορισμό του URI του αρχείου. Το σύστημα ελέγχει τα δικαιώματα πρόσβασης: εάν το αρχείο ανήκει στην τρέχουσα εφαρμογή, η διαγραφή γίνεται χωρίς πρόσθετες άδειες. Για αρχεία άλλων εφαρμογών σε Android 10+ απαιτείται επιβεβαίωση χρήστη μέσω συστήματος διαλόγου.

MediaStore vs άμεση πρόσβαση σε αρχεία

MediaStore API διαφέρει θεμελιωδώς από την άμεση πρόσβαση σε αρχεία μέσω File API. Αντί για διαδρομές αρχείων χρησιμοποιούνται Content URI, και αντί για λειτουργίες αρχείων — μέθοδοι ContentResolver. Αυτό παρέχει τρία βασικά πλεονεκτήματα: ασφάλεια, αυτόματη ευρετηρίαση και ενοποιημένη διεπαφή.

Η άμεση πρόσβαση σε αρχεία είναι περιορισμένη σε Android 10+ για κοινόχρηστους καταλόγους. Το MediaStore παραμένει ο μοναδικός τρόπος ανάγνωσης πολυμέσων από Pictures, DCIM, Movies, Music και Download. Για τα δικά σας αρχεία εφαρμογής (app-specific storage) η άμεση πρόσβαση παραμένει — αυτοί είναι φάκελοι στο Android/data και Android/media.

Η επιλογή μεταξύ MediaStore και άμεσης πρόσβασης εξαρτάται από τον τύπο περιεχομένου. MediaStore είναι υποχρεωτικό για κοινά αρχεία πολυμέσων προσβάσιμα από άλλες εφαρμογές. Το άμεσο File API είναι κατάλληλο για εσωτερικά αρχεία εφαρμογής και προσωρινή μνήμη. Το Storage Access Framework χρησιμοποιείται για επιλογή αυθαίρετων εγγράφων μέσω του επιλογέα συστήματος.

Συχνές Ερωτήσεις

Τι είναι το MediaStore API στο Android;

MediaStore API — είναι ο πάροχος περιεχομένου συστήματος Android για πρόσβαση σε αρχεία πολυμέσων της συσκευής: εικόνες, βίντεο, ήχο και έγγραφα. Το API παρέχει ενοποιημένη διεπαφή μέσω ContentResolver και βάσης δεδομένων πολυμέσων που ευρετηριάζει αυτόματα όλα τα αρχεία.

Ποιους τύπους πολυμέσων υποστηρίζει το MediaStore;

Το MediaStore υποστηρίζει Images (εικόνες), Video (βίντεο), Audio (ήχο) και Files (έγγραφα). Κάθε τύπος έχει ξεχωριστό πίνακα με δικό του σύνολο μεταδεδομένων: οι εικόνες έχουν ORIENTATION, τα βίντεο — DURATION, ο ήχος — ARTIST.

Ποιες άδειες χρειάζονται για MediaStore σε Android 13;

Σε Android 13+ χρησιμοποιούνται λεπτομερείς άδειες: READ_MEDIA_IMAGES για εικόνες, READ_MEDIA_VIDEO για βίντεο και READ_MEDIA_AUDIO για ήχο. Ο χρήστης μπορεί να παρέχει πρόσβαση μόνο σε συγκεκριμένους τύπους πολυμέσων.

Πώς γράφω ένα αρχείο μέσω MediaStore;

Για εγγραφή, δημιουργήστε ένα ContentValues με όνομα και τύπο MIME, καλέστε το ContentResolver.insert για να λάβετε URI, στη συνέχεια ανοίξτε το OutputStream μέσω ContentResolver.openOutputStream. Το σύστημα ευρετηριάζει αυτόματα το νέο αρχείο.

Σε τι διαφέρει το MediaStore από το Storage Access Framework;

MediaStore παρέχει προγραμματική πρόσβαση σε όλα τα αρχεία πολυμέσων της συσκευής μέσω της βάσης δεδομένων πολυμέσων. Storage Access Framework ανοίγει ένα παράθυρο διαλόγου συστήματος για επιλογή αρχείου και επιστρέφει URI — ο χρήστης επιλέγει ένα συγκεκριμένο αρχείο ή φάκελο.

Σύνοψη

  • MediaStore API — ο κύριος μηχανισμός πρόσβασης σε αρχεία πολυμέσων Android, που λειτουργεί μέσω παρόχου περιεχομένου και βάσης δεδομένων πολυμέσων.
  • Βάση δεδομένων πολυμέσων ευρετηριάζει αυτόματα εικόνες, βίντεο, ήχο και έγγραφα, παρέχοντας πρόσβαση σε μεταδεδομένα μέσω ContentResolver.
  • Android 10 έκανε το MediaStore τον μοναδικό τρόπο πρόσβασης σε κοινά αρχεία πολυμέσων, περιορίζοντας την άμεση πρόσβαση σε αρχεία.
  • Android 13 εισήγαγε λεπτομερείς άδειες READ_MEDIA_IMAGES, READ_MEDIA_VIDEO και READ_MEDIA_AUDIO αντί του ενιαίου READ_EXTERNAL_STORAGE.
  • Content URI αντικαθιστούν τις διαδρομές αρχείων, παρέχοντας ασφαλή πρόσβαση χωρίς δικαιώματα root σε αρχεία άλλων εφαρμογών.
  • Εγγραφή μέσω MediaStore γίνεται μέσω ContentResolver.insert και openOutputStream με αυτόματη ευρετηρίαση στη βάση δεδομένων πολυμέσων.
  • Επιλογή μεταξύ MediaStore και SAF εξαρτάται από την εργασία: MediaStore — για μαζική εργασία με πολυμέσα, SAF — για επιλογή μεμονωμένων αρχείων από τον χρήστη.

Θα αναπτύξουμε μια εφαρμογή για κινητά έτοιμη για χρήση

Η IT Sectr δημιουργεί εφαρμογές iOS και Android για νεοφυείς επιχειρήσεις και επιχειρήσεις από το 2017. Θα σας συμβουλεύσουμε και θα προτείνουμε την καλύτερη λύση.

Συζήτηση έργου

Διαβάστε επίσης