MediaProvider na Androidu: što je to, kako radi i zašto je toliko važan

  • MediaProvider je Androidov modul koji indeksira i izlaže fotografije, videozapise i audiozapise aplikacijama putem MediaStorea, poboljšavajući performanse i organizaciju.
  • Dio je Mainline modula, pa se ažurira s Google Playa kako bi se dodala kompatibilnost s novim formatima i ispravili sigurnosni nedostaci.
  • Ojačajte privatnost primjenom ograničene pohrane, kontrolom dopuštenja i skrivanjem osjetljivih metapodataka poput lokacije fotografije.
  • Proizvođači originalne opreme (OEM) i programeri mogu prilagoditi podržane formate, volumene za indeksiranje i iskoristiti napredne značajke poput kompatibilnog video transkodiranja.

MediaProvider Android multimedijska pohrana

Posljednjih godina Android se dramatično razvio u upravljanju datotekama i sigurnosti sustava. Jedan od najmanje objašnjenih - ali ključan za pravilnu pohranu i privatnost korisnika - elemenata je dobro poznati modul MediaProvider . Ako ste se ikada pitali što je ova komponenta, zašto se ponekad pojavljuje u sistemskim porukama, koja poboljšanja donosi sa svakom verzijom Androida ili kako utječe na vaš telefon, ovdje ćemo je detaljno objasniti.

Lako je naići na naziv MediaProvider prilikom navigacije kroz postavke telefona, provjere korištenja prostora za pohranu ili pregledavanja tehničkih foruma, ali većina ljudi nije sasvim sigurna što on radi ili zašto je bitan za nesmetano funkcioniranje aplikacija poput fotogalerija, glazbenih playera i upravitelja datoteka . Pogledajmo ga pobliže kako biste bili u potpunosti svjesni njegove uloge u vašem svakodnevnom Android iskustvu, bez obzira želite li jednostavno bolje razumjeti svoj telefon ili razvijati prilagođene aplikacije ili ROM-ove.

Što je MediaProvider i koja je njegova funkcija u Androidu?

Što je Android MediaProvider modul?

El Modul MediaProvider To je jedna od unutarnjih komponenti Android sustava odgovorna za upravljati, indeksirati i omogućiti pristup multimedijskim datotekama kao što su fotografije, videozapisi i glazba pohranjeni i na internoj memoriji i na vanjskim uređajima (SD kartice, USB pogoni itd.). To nije obična aplikacija, već Pružatelj sadržaja sustava koji se oslanja na javnu bazu podataka MediaStore kako bi druge aplikacije mogle brzo i sigurno pristupiti multimedijskom sadržaju.

Njegova glavna funkcija je analizirati datoteke, izdvajati njihove metapodatke i indeksirati ih u optimiziranim tablicama. Ovi metapodaci uključuju elemente kao što su vrsta datoteke, trajanje videa ili zvuka, razlučivost slike, datum snimanja, veličina, lokacija pohrane i, u nekim slučajevima, napredni EXIF ​​podaci za fotografije.

Zahvaljujući ovom modulu, aplikacije mogu prikazati cijelu vašu biblioteku bez potrebe za ručnim skeniranjem cijelog stabla mapa . Fotogalerija, na primjer, ne mora skenirati svaki direktorij: šalje upit MediaStoreu i u milisekundama dobiva paginirani popis svih slika, sortiranih i filtriranih prema potrebi. To značajno poboljšava performanse i vijek trajanja baterije u usporedbi s izravnim skeniranjem datotečnog sustava.

MediaProvider se također integrira s modelom pohrane s ograničenim dosegom . U praksi to znači da modul provodi sigurnosna pravila kako bi kontrolirao koje aplikacije mogu pregledavati i mijenjati određene datoteke. Na primjer, skriva ili uklanja osjetljive metapodatke , poput točne lokacije gdje je fotografija snimljena, kada aplikaciji nisu potrebni ti podaci ili nema potrebna dopuštenja.

Drugi ključni aspekt je da je MediaProvider dio takozvanih Mainline modula (ili modula koje je moguće ažurirati sustavom), što omogućuje Googleu i proizvođačima da ga neovisno ažuriraju putem Google Playa . Na taj način se ispravljaju sigurnosne ranjivosti, dodaje kompatibilnost s novim formatima datoteka i poboljšavaju se značajke bez čekanja na potpuno ažuriranje sustava.

Kako MediaProvider utječe na vaš svakodnevni život

MediaProvider u svakodnevnoj upotrebi

Iako ga ne možete vidjeti, MediaProvider neprestano radi u pozadini. Neki jasni primjeri kako utječe na vaše svakodnevno iskustvo su:

  • Brzo otvaranje galerije: Kada otvorite aplikaciju za fotografije, ona šalje upit MediaStoreu i, zahvaljujući prethodnom indeksiranju modula, može gotovo trenutno prikazati vaše slike.
  • Pretražuje po datumu, vrsti ili albumu: Mnoge galerije omogućuju filtriranje po videozapisima, selfijima, snimkama zaslona ili određenim datumima. Sve te informacije dolaze iz metapodatke kojima upravlja MediaProvider.
  • Glazbeni i podcast playeri: Popisi po izvođaču, albumu, žanru ili popisima za reprodukciju temelje se na podacima koje je MediaProvider prikupio i normalizirao iz audio datoteka.
  • Aplikacije za razmjenu poruka i društvene mreže: Kada dijelite fotografiju s WhatsAppa, Telegrama ili Instagrama pomoću alata za odabir slika, one su zapravo čitanje kataloga MediaStorea i filtriranje prema vrsti traženog sadržaja.
  • Upravitelji datoteka: Neki preglednici koriste MediaStore upite za brzo popisivanje svih multimedijskih sadržaja, umjesto ručnog pregledavanja tisuća mapa i datoteka.

Čak i manje vidljivi zadaci, poput fotografije snimljene kamerom koja se pojavljuje u galeriji ili oblaku unutar nekoliko sekundi, obično se koordiniraju s MediaProviderom, koji je odgovoran za registraciju nove stavke, izdvajanje njezinih metapodataka i obavještavanje zainteresiranih aplikacija o promjenama.

Evolucija MediaProvidera: Od Androida 10 do Androida 11 i dalje

Ažuriranja pružatelja medija

Veliki skok u evoluciji MediaProvidera započeo je dolaskom ograničene pohrane u Androidu 10. Od tog trenutka nadalje, sustav je reorganizirao način na koji se medijske datoteke identificiraju i kako su izložene aplikacijama, prisiljavajući MediaProvider da postane mnogo pametniji i sigurniji.

Promjene uvedene počevši od Androida 10

Od te verzije, Android je uveo nekoliko ključnih poboljšanja vezanih uz identificiranje i izdvajanje podataka iz multimedijskih datoteka :

  • Sustav određuje tip sadržaja datoteke pomoću prvog dijela MIME tipaNa primjer, on zna da image/png y image/x-newly-invented-format Oboje su vrste slikaTo omogućuje bolji opis dopuštenja i povezanih ponašanja za korisnika.
  • Da biste poboljšali sigurnost, zaključiti MIME tip samo iz ekstenzije iz datoteke, izbjegavajući tehnike otkrivanja sadržaja koje bi mogle otvoriti ranjivosti.
  • MIME-ova odluka temelji se na kombinacija tablica naslijeđenih iz Debian Linuxa i vlastitih definicija AndroidaTo rezultira mnogo pouzdanijim i dosljednijim otkrivanjem neobičnih formata.
  • MediaProvider delegira akviziciju naprednih metapodataka specijaliziranim alatima: MediaMetadataRetriever za datoteke video/* y audio/*, I ExifInterface za datoteke image/*, čime se dobiva trajanje, brzina prijenosa, razlučivost, orijentacija, informacije o kameri i druge korisne informacije.

Ovaj skup promjena omogućio je aplikacijama da prime pouzdanije i standardiziranije metapodatke , a istovremeno je ojačao sigurnosne mjere i postavio temelje za poboljšane dozvole pristupa kakve danas poznajemo.

Poboljšanja uvedena počevši od Androida 11

S Androidom 11, MediaProvider je nadogradio te temelje i napravio daljnji korak u organizaciji sadržaja, performansama i mogućnostima za aplikacije :

  • Su napravljeni značajna poboljšanja u indeksiranju datoteka i metapodataka. Modul sada usklađuje dostupne metapodatke s onim što otkrivaju MediaStore API-ji, bolje usklađujući ono što je interno pohranjeno s onim što aplikacije mogu upitati.
  • U bazu podataka dodani su novi stupci, kao što su is_favorite i argument za konzultacije QUERY_ARG_MATCH_FAVORITETo omogućuje aplikacije galerijskog tipa Brzo filtrirajte sadržaj označen kao favorit od strane korisnika.
  • MediaProvider je započeo metapodaci indeksnog prostora bojatemeljno za rukovanje HDR sadržajem, fotografije koje su realističnije i točniji prikaz na naprednim zaslonima.
  • Kolumna je predstavljena is_trashed i argument QUERY_ARG_MATCH_TRASHED jasno razlikovati datoteke koje se nalaze u koš za smećešto galerijama omogućuje izvorno upravljanje tom kantom za smeće.
  • Pojavili su se Novi API-ji za skupne operacije na nekoliko elemenata s jednim dijaloškim okvirom za potvrdu korisnika, uključujući:
    • createDeleteRequest() za brisanje više datoteka odjednom.
    • createFavoriteRequest() označiti ili poništiti označavanje više favorita jednom radnjom.
    • createTrashRequest() za slanje skupina datoteka izravno u smeće.
    • createWriteRequest() zatražiti dozvole za pisanje za više stavki.
  • Dodani su novi stupci kao što su GENERATION_ADDED y GENERATION_MODIFIED koje dopuštaju aplikacije brzo otkriti što se promijenilo od prethodne sinkronizacije. bez potrebe za ponovnim skeniranjem cijele biblioteke.
  • Jedan je dodan Javni API od GROUP BY što vam omogućuje grupiranje rezultata po albumu, datumu ili drugim metapodacima bez potrebe za složenom naknadnom obradom u aplikaciji.
  • Bilo je poboljšano ExifInterface za Izdvajanje metapodataka iz PNG i WebP spremnika, proširujući broj formata slika obrađenih na napredan način.
  • SystemUI je počeo pisati metapodatke DateTimeOriginal na snimkama zaslona, ​​tako da MediaProvider može kako bi se bolje organizirale i prikazale ove vrste slika unutar galerija.

Što se tiče arhitekture, MediaProvider je migriran u APK-in-APEX format . To znači da je Java kod zapakiran kao APK unutar APEX kontejnera na razini sustava. Prednost je u tome što se modul može učitati vrlo rano u procesu pokretanja , čak i prije mnogih dijelova okvira, a istovremeno ima koristi od brzih ažuriranja putem Google Playa.

MediaProvider i Mainline moduli: Samostalna ažuriranja na Androidu

Glavni moduli u Androidu

Jedna od glavnih Googleovih strategija za borbu protiv fragmentacije i ponudu sigurnijih uređaja je stvaranje Mainline modula . To su sistemske komponente koje se mogu ažurirati neovisno s Google Playa, bez izravne intervencije proizvođača ili potrebe za instaliranjem potpunog OTA ažuriranja.

Ti moduli uključuju MediaProvider, kao i druge poput ART-a (okruženje za izvođenje aplikacija), Conscrypt-a (kriptografska biblioteka), Media , Media Codecs , Wi-Fi , Tethering i mnoge druge. Zajedno omogućuju Androidu da ispravi kritične greške, poboljša performanse i doda značajke bez da bude u potpunosti ovisan o rasporedu izdanja svakog proizvođača.

Važno je pojasniti da, iako se modularna arhitektura počela uvoditi s Androidom 10, MediaProvider je, konkretno, imao koristi od glavnih ažuriranja počevši od Androida 11. Zahvaljujući tome, ako se otkrije sigurnosna ranjivost, nekompatibilnost s novim multimedijskim formatima ili problem s performansama indeksiranja, Google to može zakrpati i objaviti ažuriranje baš kao i bilo koju drugu aplikaciju na Google Playu. Na taj način vaš telefon ostaje sigurniji i dosljedniji s ostatkom ekosustava, čak i ako vaš proizvođač ne objavljuje osobito brzo nove verzije Androida.

Koji drugi Mainline moduli postoje i kako je MediaProvider povezan s njima?

Glavni moduli povezani s MediaProviderom

MediaProvider je samo jedan od mnogih Mainline modula osmišljenih kako bi sustav bio modularniji, sigurniji i lakše nadogradiv. Neki od najvažnijih, posebno oni koji se odnose na multimedijsko i mrežno iskustvo, su:

  • Mediji: Obavlja obradu multimedijskih datoteka na mobilnom uređaju, uključujući usluge reprodukcije, snimanja i upravljanja streamingom.
  • Medijski kodeci: Održava audio i video kodeke ažurnima, omogućujući poboljšanu kompatibilnost i sigurnost dekodiranja i kodiranja bez dodirivanja cijelog sustava.
  • UMJETNOST: Upravlja okruženjem za izvođenje aplikacije (kompilacija, optimizacija bajtkoda itd.). Poboljšanja u ovom modulu izravno utječu na performanse aplikacije.
  • Šifriranje: Ažurira kriptografski dio sustava, ključan za sigurne veze, certifikate i šifriranje.
  • Wi-Fi: Sadrži logiku povezivanja putem Wi-Fi-ja, što omogućuje primjenu Poboljšanja stabilnosti, kompatibilnosti i sigurnosti bez potpunog OTA-a.
  • Povezivanje: Kontrolirajte dijeljenje Wi-Fi, USB, Bluetooth ili Ethernet veza putem svog mobilnog uređaja.
  • Kontroler dopuštenja: Ažurirajte modul koji upravlja dopuštenjima i elementima sučelja za privatnost za korisnike.

MediaProvider blisko surađuje s modulima Media i Media Codecs , budući da su ovi potonji moduli odgovorni za dekodiranje i obradu sadržaja koji MediaProvider indeksira. Kada se objave novi formati ili se ažuriraju postojeći kodeci, MediaProvider može početi prepoznavati i katalogizirati te novije formate (na primjer, nove HEVC varijante, HDR ili audio kodeke) bez potrebe za potpunim ažuriranjem Androida, pod uvjetom da su i ostali medijski moduli ažurirani.

Da biste saznali koje Mainline module vaš telefon podržava, možete koristiti alate poput besplatne aplikacije Mainline Updater , koja prikazuje koji su moduli prisutni i jednim gumbom vas vodi do odjeljka Ažuriranja sustava na Google Playu . Tamo ćete vidjeti postoje li zakrpe na čekanju koje utječu, između ostalog, na MediaProvider.

MediaProvider, privatnost i sigurnost pohrane

Pružatelj usluga privatnosti i medija

Jedan od najvećih nedavnih napredaka vezanih uz MediaProvider je zaštita privatnosti korisnika . Prije su mnoge aplikacije mogle pristupiti cijelim mapama na vanjskoj pohrani i čitati vrlo detaljne metapodatke - uključujući GPS lokaciju ugrađenu u fotografije - bez finog podešavanja od strane sustava.

Kombinacijom opsega pohrane + MediaProvider + MediaStore , stvari su se promijenile:

  • Aplikacije imaju ograničen pristup na fotografije, videozapise i audiozapise. Na primjer, aplikacija za uređivanje fotografija može pristupiti određenoj slici koju je korisnik odabrao putem birač fotografijaali ne i ostatak vaše galerije.
  • Pružatelj medija može urediti ili ograničiti osjetljive metapodatke, kao što su točna lokacija snimanja ili podaci s interne kamere, ako aplikaciji nisu potrebni ti podaci.
  • Dozvole postaju sve više granularno i prozirnoViše se ne radi o dopuštanju ili odbijanju potpunog pristupa pohrani, već o odobravanju pristupa određene vrste sadržaja (slike, videozapisi, audiozapisi) ili čak datoteke koje je odabrao korisnik.
  • Pojačana je zaštita od zlonamjernih aplikacija koje pokušavaju skenirati pohranu u potrazi za privatnim dokumentima ili osjetljivim sadržajem. MediaProvider djeluje kao filter i sudac onoga što se može vidjeti ili modificirati.

Sve je to kombinirano s mogućnostima naprednih iskustava, kao što su najnoviji alat za odabir fotografija i pružatelji medijskog sadržaja u oblaku , čiji je dio u protoku podataka i MediaProvider.

API-ji i primjeri upotrebe: Kako aplikacije komuniciraju s MediaProviderom

Aplikacije koje koriste MediaProvider

Korisničke aplikacije ne komuniciraju izravno s MediaProviderom, već putem MediaStorea , javnog API-ja koji djeluje kao sučelje. Ovaj API nudi kompletan ekosustav namjera, konstanti i metoda upita za pristup medijskim datotekama na standardizirani način.

Pokušaji snimanja i odabira sadržaja

Među najistaknutijim namjerama koje koriste prednosti MediaStorea (i, posljedično, MediaProvidera) su:

  • MediaStore.ACTION_IMAGE_CAPTURE: Omogućuje vam pokretanje kamere za snimanje slike i njezino vraćanje u aplikaciju koja vas poziva.
  • MediaStore.ACTION_IMAGE_CAPTURE_SECURE: Slično prethodnom, ali dizajnirano za okruženja u kojima je uređaj zaštićen (PIN, uzorak, biometrijski podaci) i gdje se mora održavati siguran kontekst.
  • MediaStore.ACTION_VIDEO_CAPTURE: Pokrenite kameru u video načinu rada i vratite rezultat aplikaciji koja poziva.
  • MediaStore.ACTION_PICK_IMAGES: otvori birač fotografija moderni Android, koji nudi objedinjeno iskustvo odabira slika i videozapisa iz različitih izvora (lokalna pohrana, oblak itd.).
  • MediaStore.ACTION_PICK_IMAGES_SETTINGS: To vodi do postavki povezanih s odabirom fotografija i pružateljima medijskih sadržaja.
  • MediaStore.ACTION_REVIEW y MediaStore.ACTION_REVIEW_SECURE: Omogućuju vam pregled ili pretpregled novo snimljenog multimedijskog sadržaja u kontroliranom kontekstu.

Uz ove namjere, MediaStore definira dugi popis dodataka i konstanti koje MediaProvider poštuje i koristi za primjenu određenih pravila. Neki primjeri:

  • EXTRA_DURATION_LIMIT: maksimalno dopušteno vrijeme snimanja prilikom snimanja videa.
  • EXTRA_SIZE_LIMIT: maksimalna veličina izlazne datoteke.
  • EXTRA_OUTPUT: URI gdje će se pohraniti rezultirajuća slika ili videozapis.
  • EXTRA_PICK_IMAGES_MAX: maksimalan broj stavki koje korisnik može odabrati u sesiji odabira.

Napredni upiti za MediaStore

Aplikacije koje trebaju čitati medijsku biblioteku koriste upite MediaStoreu s raznim argumentima i filterima. Neke funkcionalnosti koje MediaProvider pruža putem MediaStorea su:

  • Filtrirano po favoritima i smeću: koristeći argumente QUERY_ARG_MATCH_FAVORITE y QUERY_ARG_MATCH_TRASHEDaplikacije mogu dobiti samo stavke označene kao favoriti ili one koje su u smeću.
  • Detekcija inkrementalnih promjena: stupci poput GENERATION_ADDED y GENERATION_MODIFIED Omogućuju vam da brzo vidite koji su elementi dodani ili izmijenjeni od prethodne sinkronizacije, što je ključno za aplikacije za sigurnosno kopiranje ili napredne galerije.
  • Korisnički kontrolirane skupne operacije: metode kao što su createDeleteRequest(), createTrashRequest(), createFavoriteRequest() o createWriteRequest() dopusti aplikacije predložiti promjene u serijamaAli sustav je taj koji korisniku prikazuje dijalog za potvrdu kako bi imao posljednju riječ.
  • Čitanje i pisanje EXIF-a: kroz ExifInterfaceAplikacije mogu čitati polja kao što su orijentacija, vrijeme snimanja, model kamere, lokacija (ako je dostupna i ako je korisnik to dopustio) i ostali metapodaci. To je ključno za ispravno rotirati fotografije, kronološki ih poredati ili prikazati podatke o snimanju.

MediaProvider, pohrana u oblaku i alat za odabir fotografija

Pružatelj medijskih usluga i pohrana u oblaku

Dolaskom modernog alata za odabir fotografija i pružatelja medijskih usluga u oblaku , uloga MediaProvidera postala je još relevantnija u tijeku rada za odabir fotografija i videozapisa.

Android omogućuje određenim aplikacijama, obično uslugama za fotografije u oblaku koje imenuju proizvođači, da djeluju kao CloudMediaProviders . Ove aplikacije isporučuju sadržaj pohranjen u oblaku alatu za odabir fotografija tako da korisnik može birati ne samo lokalne datoteke već i one pohranjene na udaljenim uslugama.

U ovom scenariju, MediaProvider i Photo Picker rade ruku pod ruku:

  1. Sustav inicijalizira preferiranog pružatelja usluga u oblaku i periodično ga sinkronizira. multimedijski metapodaci s pozadinskim dijelom za odabir fotografija.
  2. Kada aplikacija pokrene Birač fotografija koristeći namjere poput ACTION_PICK_IMAGES o ACTION_GET_CONTENT, selektor spojiti u jednu mrežu lokalni elementi koje pruža MediaProvider i udaljeni elementi koje pruža CloudMediaProvider.
  3. Dok se korisnik pomiče, selektor prikazuje upite optimizirane minijature dobavljačima, kako bi utovar bio brz i učinkovit.
  4. Nakon završetka odabira, ako je odabran sadržaj u oblaku, sustav generira Sigurni URI-ji A MediaProvider koordinira, putem FUSE-a i drugih slojeva, pristup stvarnim podacima, uvijek štiteći dopuštenja i privatnost.

CloudMediaProvider, sa svoje strane, nudi metode kao što su onQueryMedia(), onQueryDeletedMedia(), onQueryAlbums(), onOpenMedia() u onOpenPreview()koje alat za odabir fotografija koristi za popisivanje stavki, albuma, izbrisanog sadržaja te za otvaranje pregleda i cijele datoteke. Iako su ove metode implementirane izvan MediaProvidera, medijski modul sustava integrira se s njima kako bi ponudio dosljedno iskustvo pristupa lokalnim i oblačnim medijima.

MediaProvider i kompatibilno video transkodiranje

Video transkodiranje i pružatelj medijskih usluga

Još jedna napredna značajka u kojoj MediaProvider igra ključnu ulogu jest transkodiranje kompatibilnog medijskog sadržaja . Ova značajka omogućuje uređajima korištenje modernih, učinkovitih video formata - poput HEVC-a ili određenih HDR profila - bez narušavanja kompatibilnosti sa starijim aplikacijama koje razumiju samo klasične formate poput AVC-a (H.264).

Mehanizam funkcionira na sljedeći način:

  • Proizvođači i korisnici mogu konfigurirati kameru tako da snimanje u HEVC formatu prema zadanim postavkama ili druge formate koji su učinkovitiji u pogledu prostora i propusnosti.
  • Kada aplikacija koja ne podržava HEVC Kada pokušate otvoriti videozapis putem MediaStorea i MediaProvidera, sustav može presresti čitanje datoteke zahvaljujući korištenju FUSE-a (Datotečni sustav u korisničkom prostoru).
  • Ako se otkrije da aplikacija ne podržava format, MediaProvider, zajedno s Usluga transkodiranja medija, pokreće pozadinsku pretvorbu za generiranje verzije u AVC ili drugom kompatibilnom formatu.
  • Aplikacija prima deskriptor datoteke koji upućuje na već transkodiranu verziju (ili original, ako aplikacija podržava format), na način koji je potpuno transparentan za programera.

Ovaj proces transkodiranja reguliran je vremenskim i resursnim ograničenjima kako bi se spriječila zlouporaba: na primjer, obrađuju se samo videozapisi do određene duljine, a broj uzastopnih sesija ili ukupno vrijeme obrade po aplikaciji je ograničen. Ako se ta ograničenja prekorače, sustav vraća izvornu, neobrađenu datoteku.

Da bi se to postiglo, arhitektura uključuje nekoliko komponenti:

  • Upravitelj transkodiranja medija: Sistemski API koji omogućuje MediaProvideru i drugim dijelovima okvira komunikaciju s uslugom transkodiranja.
  • Usluga transkodiranja medija: usluga koja upravlja redovima transkodiranja, aktivnim sesijama i dodjelom resursa kodeka.
  • Medijski transkoder: izvorna biblioteka koja izvodi pretvorbu između formata, oslanjajući se na MediaCodec i u mogućim OEM dodacima za operacije poput HDR → SDR konverzije.

MediaProvider je u središtu cijelog ovog toka: to je modul koji presreće pokušaj čitanja datoteka , odlučuje je li transkodiranje potrebno prema mogućnostima aplikacije i konačno isporučuje ispravan deskriptor, bilo izvornoj datoteci ili transkodiranoj.

Prilagodba i proširenje: MediaProvider za razvojne programere i proizvođače

Razvojni programeri i pružatelji medijskih usluga

Jedna od najmoćnijih - i najmanje poznatih - značajki MediaProvidera je mogućnost prilagodbe njegovog ponašanja . To je od posebnog interesa za programere prilagođenih ROM-ova, OEM-ove i proizvođače , ali također pomaže u razumijevanju zašto se neki uređaji ponašaju donekle drugačije s određenim formatima ili putanjama pohrane.

Prilagođeni medijski formati

Proizvođači mogu dodati podršku za vlasničke ili neuobičajene medijske formate . Za svaku novu vrstu moraju:

  • Registrirajte se jedinstvena ekstenzija datoteke i povezati ga s određenim MIME tipom pomoću MimeUtils.
  • Konfigurirajte modul Ekstraktor medija kako bi mogao čitati metapodatke u tom formatu, kako bi ga MediaProvider mogao ispravno indeksirati.
  • U slučaju video/* y audio/*, i dalje se oslanjati na MediaMetadataRetriever kako bi se otkrili relevantni metapodaci.
  • U slučaju image/*proširiti ili koristiti android.media.ExifInterface izvući i vratiti normalizirani EXIF ​​​​metapodaci čak i u prilagođenim formatima slika.

Važno je napomenuti da redefiniranje ekstenzija ili MIME tipova koji su već definirani u AOSP-u nije dopušteno kako bi se izbjegle nedosljednosti ili sukobi između uređaja.

Odabir uređaja za pohranu za indeksiranje

MediaProvider indeksira, prema zadanim postavkama, sve volumene koje vraća StorageManager.getStorageVolumes() gdje StorageVolume.getMediaStoreVolumeName() Nije null. Međutim, proizvođači originalne opreme mogu precizirati koji su svesci indeksirani uspostavljanje brenda VolumeInfo.MOUNT_FLAG_INDEXABLE na onim uređajima koji žele da se pojave u medijskoj biblioteci.

Preporučuje se izbjegavanje označavanja privremenih volumena kao indeksiranih - poput određenih USB OTG pogona koji se često spajaju i odspajaju - kako bi se spriječile nedosljednosti u bazi podataka ili pogreške uzrokovane iznenadnim nestankom volumena.

Zamjena i prilagodba MTP stoga

Logika iza MTP-a (Media Transfer Protocol), koji se koristi za prijenos datoteka između mobilnog uređaja i računala putem USB-a , odvojena je od modula MediaProvider. Počevši od određenih verzija, MTP stog se nalazi u potpunosti izvan modula i zajamčeno funkcionira samo pomoću javnih i sistemskih API-ja.

To omogućuje proizvođačima kojima su potrebna specifična rješenja za prijenos da zamijene ili prilagode svoj MTP stog, sve dok održavaju kompatibilnost s ugovorima MediaStore i MediaProvider , tako da iskustvo kopiranja i čitanja datoteka s računala ostane dosljedno.

Zadane mape i popis izuzeća

Kada se volumen za pohranu prvi put aktivira, MediaProvider obično stvara niz standardne mape kao Music/, Podcasts/, Ringtones/, Alarms/, Notifications/, Pictures/, Movies/, Download/, DCIM/, Documents/, Audiobooks/ y Recordings/ (Ovo posljednje nije dostupno u nekim starijim verzijama).

Za uređaje koji imaju specifične organizacijske zahtjeve, proizvođači originalne opreme mogu pružiti popis mapa koje treba izostaviti tijekom početnog stvaranja putem preklapanja resursa config_foldersToSkipInDefaultCreationTako bi, na primjer, mogli spriječiti stvaranje mapa prema zadanim postavkama. Notifications/ o Ringtones/ ako već imaju alternativni sustav za njih.

Ovisnosti i tehnički zahtjevi pružatelja medija

Tehnički zahtjevi MediaProvidera

Prilikom prilagodbe MediaProvidera, proizvođači originalne opreme moraju uzeti u obzir niz tehničkih ovisnosti kako bi osigurali da sve i dalje ispravno funkcionira:

  • Pri korištenju nestandardni formati multimedijskih datotekaSvaki format mora biti registriran u oba MimeUtils kao u modulu od Ekstraktor medijaU suprotnom, MediaProvider ih neće moći indeksirati ili pružiti potpune metapodatke.
  • Kako bi se osiguralo indeksiranje prilagođenog skupa uređaja za pohranu (SD utori, ugrađeni USB priključci itd.), implementacija StorageManagerService Željene volumene morate označiti s VolumeInfo.MOUNT_FLAG_INDEXABLE.
  • Ako se koristi prilagođeni MTP stog, mora se temeljiti isključivo na Javni i sistemski API-ji kako bi ostali kompatibilni s MediaStoreom i ne bi prekidali interakciju između računala i medijske biblioteke uređaja.

Nadalje, u kontekstu video transkodiranja, uređaji moraju ispunjavati određene minimalne hardverske zahtjeve : omogućena podrška za HEVC kodiranje u izvornoj kameri, dovoljne performanse čitanja i pisanja u pohrani te kodeci sposobni za postizanje visokih brzina obrade u zadacima pretvorbe.

Testiranje, dijagnoza i uobičajene pogreške MediaProvidera

Uobičajeni problemi s MediaProviderom

U normalnoj upotrebi, MediaProvider obično prolazi nezapaženo. Međutim, kao i svaka komponenta sustava, može doći do problema: neočekivanih gašenja , pogrešaka pri čitanju određenih datoteka, kvarova pri ažuriranju metapodataka ili rušenja prilikom skeniranja oštećenih diskova.

U Android ekosustavu postoji nekoliko automatiziranih testova za provjeru njegovog ispravnog funkcioniranja:

  • CtsProviderTestCases: testni skup od Komplet za testiranje kompatibilnosti koji provjerava ponašanje javnih API-ja MediaStorea u odnosu na MediaProvider.
  • Testovi pružatelja medija: interni testovi usmjereni na specifično ponašanje modula i njegovih komponenti.

Programeri ili tehničari mogu pokrenuti ove testne pakete naredbama kao što su:

atest --test-mapping packages/providers/MediaProvider

Na tehničkim forumima, neki su korisnici prijavili Ponavljajući rušenja MediaProvidera zbog memorijskih grešaka (OutOfMemoryError), posebno prilikom skeniranja vrlo velikih video kolekcija ili rukovanja oštećenim particijama SD kartice. U tim slučajevima preporučljivo je:

  • Provjeri fizičko stanje unutarnje i vanjske memorije (formatirajte ili zamijenite karticu ako ima grešaka).
  • Održavanje sustava i ažurirani glavni moduli s Google Playa za primanje ispravaka.
  • Provjerite generira li neka aplikacija oštećene datoteke ili datoteke s anomalnim metapodacima koji uzrokuju greške u indeksiranju.

Alati i uslužni programi povezani s MediaProviderom

Alati za pregled glavnih modula

Ako želite saznati više o tome kako se MediaProvider ažurira ili koje ste Mainline module instalirali, možete koristiti neke alate:

  • Glavni ažurirač: jednostavna aplikacija koja navodi Glavni moduli prisutni na vašem uređaju Također pruža prečace do ploče ažuriranja sustava Google Play. To je korisno za provjeru jesu li vaš MediaProvider i ostale ključne komponente ažurne.
  • Voditelj medijskog pružatelja usluga: Xposed modul otvorenog koda koji omogućuje Pratite i ograničite korištenje MediaStorea od strane aplikacija. Pomoću njega napredni korisnici mogu pregledati koje aplikacije šalju najviše zahtjeva, koja dopuštenja koriste, pa čak i ograničiti određeni pristup kako bi poboljšali privatnost.

Ove vrste alata nisu bitne za prosječnog korisnika, ali pružaju dodatni stupanj kontrole onima koji žele detaljnije upravljati multimedijskim ponašanjem i privatnošću na svom Android uređaju.

MediaProvider je postao središnja komponenta Android sustava: učinkovito organizira sav multimedijski sadržaj, bolje štiti privatnost pohranom s velikim rasponom mogućnosti, olakšava transkodiranje modernih formata i neovisno se ažurira zahvaljujući Mainline modulima. Razumijevanje načina rada ove nevidljive komponente objašnjava zašto danas vaša galerija, glazbene aplikacije i usluge u oblaku funkcioniraju brže, dosljednije i mnogo sigurnije nego u prethodnim generacijama sustava.


Dodaj kao preferirani izvor na Googleu