Mumakore achangopfuura, Android yakashanduka zvakanyanya mukutarisira faira uye kuchengetedzeka kwehurongwa. Chimwe chezvinhu zvisingatsananguriki - asi chakakosha kuchengetedza kwakakodzera uye kuvanzika kwevashandisi - ndiyo ine mukurumbira MediaProviderKana iwe wakambozvibvunza kuti chikamu ichi chii, nei ichimboonekwa mumameseji ehurongwa, chii chinounzwa neshanduro yega yega yeAroid, kana kuti inobata sei foni yako, ramba uchiverenga nekuti tichazvitsanangura zvakadzama pano.
Zviri nyore kuwana zita reMediaProvider paunenge uchitsvaga kuburikidza nenharembozha kana kutarisa maforamu ehunyanzvi, asi vanhu vazhinji havana kujeka kuti chii chaizvo chazvinoita kana kuti nei chiri. zvakakosha kuti zvikumbiro zvakaita semafoto gallery, mimhanzi inoridza kana mafaera maneja kuti ashande zvakanakaNgatitarisei zvakanyanya kuti Android inoshanda sei kwauri kuti iwe unyatsoziva zvese zvainounza kuhupenyu hwako hwemazuva ese.
Chii chinonzi MediaProvider uye chii chinoshanda mu Android?
El MediaProvider Module Icho chimwe chezvikamu zveiyo Android system inotarisira maneja, indekisi, uye upe mukana kune multimedia mafaera senge mafoto, mavhidhiyo uye mimhanzi zvakachengetwa mukati memukati mendangariro uye ekunze zvishandiso (semuenzaniso SD makadhi kana USB madhiraivha). Basa rayo guru ndere gadzirisa metadata yemafaira aya uye ita kuti zviwanikwe kune zvikumbiro kuburikidza neMediaStore yeruzhinji API.
Nekuda kweiyi module, maapplication anogona kuita zviito zvakaita sekuratidza mafoto ako ese pasina kutenderera nemaoko kuburikidza nega yega system folda, izvo zvinowedzera kukurumidza uye kushanda kwemibvunzo iyi. Pamusoro pezvo, MediaProvider inoshandisa yakavanzika-yakatarisana yekuchengetedza modhi, inovanza inonzwisisika metadata senge kamera nzvimbo, kunyanya kubva pakaburitswa Android 10. Izvi zvinodzivirira ruzivo rwako pachako kubva pakuwana zvisina kufanira nevechitatu-bato zvikumbiro.
Chimwe chinhu chakakosha ndechekuti MediaProvider chikamu chezvinonzi Mainline Modules (kana inogadziridzwa system modules), ichibvumira Google nevagadziri kuti vazvichengetedze kusvika parizvino kuburikidza nekuzvimiririra zvigadziriso kubva kuGoogle Play, pasina kumirira izere vhezheni ye Android.
Iko Evolution yeMediaProvider: Kubva kuAndroid 10 kuenda kuAndroid 11 uye Beyond
Iko kusvetuka kukuru mukushanduka kweMediaProvider kwakauya neApple 10, payakagadziridzwa kuti ienderane neiyo pfungwa yemamodule anogadzirisika uye yakaunza shanduko dzakakura kufaira nemvumo manejimendi. Izvi zvakakonzera kuvandudzwa kunooneka kune vese vashandisi nevagadziri:
- Kubva Android 10, iyo system inozivisa mhando yefaira re media kubva pakuwedzera kana MIME mhando (semuenzaniso, "mufananidzo/png"), zvichibvumira tsananguro iri nani yemvumo dzakabatana uye maitiro.
- Iyo inodzivirira kusachengeteka kwemaitiro ekuona nzira uye inotsamira pane typology migove yeese Android neLinux-based masisitimu, ayo anosimbisa chengetedzo nekuvimbika.
- Inobvumira mapurogiramu kuti awane metadata yakakodzera achishandisa MediaMetadataRetriever yevhidhiyo/odhiyo, uye ExifInterface yemifananidzo.
Nekusvika kweApple 11, MediaProvider yatowedzera kusimba. Pakati pezvinhu zvitsva zvinonyanya kuzivikanwa ndezvi:
- Se yakavandudza faira uye metadata indexing process, kusanganisira makoramu matsva mudhatabhesi akadai sekuti “is_favorite” (kumaka zvaunofarira) uye “is_trashed” (kuona mafaera mumarara).
- Iye zvino zvinoita kuita zviito zvakawanda pamusoro pemafaira akawanda kamwechete, sekudzima, kumaka seanofarira, kana kutumira kumarara, zvese zvine mushandisi mumwe chete.
- Makoramu akaita se "GENERATION_ADDED" uye "GENERATION_MODIFIED" awedzerwa kuitira kuti maapuro aone nekukurumidza kuti ndeapi zvinhu zvachinja kubva pawirirano yekupedzisira.
- Kubatanidzwa kurinani nezvimwe zvikamu zvehurongwa, sekuvandudzwa ExifInterface kugadzirisa mamwe mafomati (PNG, WebP) uye kuzivisa zuva rekutanga pane zvidzitiro.
Panyaya yekuvaka, MediaProvider yakaendeswa kune "APK-in-APEX" fomati, ichiibvumira kuti inakirwe nemabhenefiti eAPEX mapakeji: yekutanga gadziriso pasystem boot uye kutonga kwakawanda pamusoro pekutsamira kwayo.
MediaProvider uye Mainline Module: Standalone Updates pa Android
Sechikamu chezano reGoogle kurwisa kupatsanuka uye kuve nechokwadi chekuchengetedza uye yunifomu michina, iyo Mainline modules. Kubva Android 10, aya mamodule (akadai seMediaProvider, ART, Conscrypt, Tethering, Wi-Fi, pakati pevamwe) anogona kuvandudzwa zvakasiyana kuburikidza neGoogle Play. Izvi zvinoreva kuti Kuvandudzwa kwekuchengetedza, maficha matsva, uye rutsigiro rwemamwe marudzi efaira anogona kusvika nekukurumidza uye pasina kumirira OTA kubva kumugadziri..
MediaProvider, pamwe chete nezvimwe zvikamu, yakanakidzwa nekugona uku kubva kuAndroid 11. Saka, kana Google ikaona kukanganisa kwekuchengetedza kana kudiwa kwerutsigiro rwemafomati matsva enhau, inogona kupeta nekuiparadzira nekukurumidza, kuchengetedza data rako uye kubvumira vanogadzira kutora mukana wezvinhu zvitsva pasina kutsamira pamagadzirirwo akareba.
Kugadzirisa uye Kuwedzera: MediaProvider yeVagadziri uye Vagadziri
Imwe yeakanyanya simba-uye isingazivikanwe-maficha eMediaProvider kugona gadzirisa maitiro akoKana iwe uri mugadziri weROM mugadziri, mugadziri, kana kungoita tekinoroji kufarira, heano mashoma matunhu aunogona kugadzirisa:
- Tsigiro yetsika midhiya mafomati: Iwe unogona kuwedzera rutsigiro rwemafomu matsva nekunyoresa inowirirana yekuwedzera uye MIME mhando nehurongwa. Ongorora: Hazvigoneke kunyora pamusoro mafomati atotsanangurwa ne Android.
- Para mavhidhiyo uye mafaira ekuteerera, MediaProvider inotumira metadata kubvunza MediaMetadataRetriever, nepo yemifananidzo inovimba nayo ExifInterface -inotsigira mawedzero etsika metadata.
- Kusarudza midziyo yekuchengetera index: Zvinogoneka kudoma kuti ndeapi makadhi eSD, madhiraivha e USB, kana zvikamu zvichange zvichinyorwa semidhiya inotenderwa masosi. Chenjera kuti usasanganise "zvichipfuura" zvishandiso zvinogona kubviswa zvisingatarisirwi (senge USB OTG mudziyo) kudzivirira kusawirirana nyaya.
- Kutsiva uye kugadzirisa iyo MTP stack: Mu Android 11 uye gare gare, iyo MTP (Media Transfer Protocol) logic inoparadzaniswa kubva kumodule pachayo, ichibvumira kubatanidzwa kwakawanda kuchinjika chero vachiremekedza kushandiswa kweruzhinji maAPI.
MediaProvider Dependencies uye Technical Requirements
Paunenge uchigadzirisa MediaProvider, pane zvimwe zvinhu zvekufunga nezvazvo: technical dependencies kuti module ishande nemazvo:
- Paunenge uchishandisa asiri-standard midhiya faira mafomati (semuenzaniso, kana kamera yako app ikagadzira mafomu emuridzi), yega yega fomati itsva inofanirwa kunyoreswa mairi MimeUtils uye muMedia Extractor kuitira kuti MediaProvider igone kuzvinyora nemazvo.
- Kana iwe ukashandisa tsika yekuchengetedza vhoriyamu manejimendi, ita shuwa yekumaka zvishandiso nemureza wakakodzera (VolumeInfo.MOUNT_FLAG_INDEXABLE), saka MediaProvider inovaziva kana ichiratidza zviri mukati.
- Tsika MTP kuita kunofanirwa kushanda chete kushandisa veruzhinji uye system APIs kuchengetedza kuenderana neMediaStore.
MediaProvider uye kuvanzika kwemushandisi
Imwe yei Imwe yebudiriro huru yakaunzwa neMediaProvider mushanduro dzichangoburwa dzeAndroid kuchengetedza kuvanzika. Kudzivirirwa kwemushandisi kubva kune isina kutenderwa app kuwana kune yavo mafaera. Nekuda kwekubatanidzwa kwayo neMediaStore uye nekutonga kwakaringana kwemvumo, vanogadzira vanogona ikozvino kuwana chete anodiwa midhiya mafaera uye, kazhinji, havakwanise kuwana ruzivo rwakadzama senge nzvimbo yemufananidzo kana data rekushandisa ravaimbowana nyore kuwana.
Izvi zvakare zvinoita kuti manejimendi ave nyore kune vashandisi: ivo vanogona ikozvino kumaka mafaera seanofarira, kudzima zvinhu zvakawanda kamwechete, kana kudzoreredza mafaira ehurongwa zviri nyore kubva kumagalari maapplication anowedzera maAPI matsva.
API uye mienzaniso yekushandisa: Mashandisiro anoita maapplication neMediaProvider
Maapplication anowana midhiya mafaera nekubvunza iyo MediaStore -iyo inoshanda seruzhinji interface kuMediaProvider- kuburikidza nenhevedzano yezviito uye nharo dzinotsanangurwa mumaAPI ayo:
- Mifananidzo nemavhidhiyo zvinogona kutorwa zvakananga, kana mafaira aripo pane mudziyo anogona kusarudzwa, uchishandisa akasiyana vavariro inotsanangurwa neMediaStore (yakadai seActionImageCapture, ActionPickImages, ActionVideoCapture…)
- Mapurogiramu anogona kusefa mivhunzo achishandisa nharo dzakadai QUERY_ARG_MATCH_FAVORITE (kuwana zvido) kana QUERY_ARG_MATCH_TRASHED (kuwana mafaira mumarara).
- Vagadziri vanogona kuita zviito zvakawanda pamafaira emidhiya nenzira dzakadai createDeleteRequest, createFavoriteRequest o createTrashRequest.
- Iyo Exif interface inobvumidza iwe kuti uverenge uye ushandise metadata yemifananidzo, senge kutariswa, mhando yekamera, nzvimbo, nezvimwe.
MediaProvider Testing uye Diagnostics
Muhupenyu hwezuva nezuva, MediaProvider inowanzoenda isingaoneki, asi pane mamiriro ezvinhu apo inogona kukonzera matambudziko-semuenzaniso, kuvharwa kusingatarisirwi kana kukanganisa paunenge uchiverenga mamwe mafaira. Kuti uone kushanda kwayo chaiko, iyo Android ecosystem ine bvunzo dzakabatanidzwa Chemhondoro CtsProviderTestCases (yeruzhinji APIs) uye MediaProviderTests (yezvikamu zvemukati). Kana iwe uri mugadziri kana tekinoroji, unogona kuamhanyisa nemirairo yakaita se "test -test-mapping mapakeji/vanopa/MediaProvider" kuti uwane kuongororwa kwakaringana.
Mamwe maforamu ehunyanzvi ataura Tsaona dzinogara dzichiitika muMediaProvider Idzi nyaya dzakabatana nenyaya dzendangariro (OutOfMemoryError), kunyanya kana uchitarisa mamwe marudzi emafaira evhidhiyo kana pakubata zvakakanganisika zvekuchengetera zvikamu. Muzviitiko izvi, kazhinji ipfungwa yakanaka kutarisa mamiriro ekunze ekuchengetedza kwako (yemukati ndangariro, SD kadhi, nezvimwewo) uye chengetedza system yako kusvika parizvino kudzivirira kusawirirana.
Zvishandiso zvinoenderana uye zvinoshandiswa: Mainline Updater uye Media-Provider-Manager
Kana iwe uchida kuziva kuti ndeapi Mainline modules inotsigira foni yako, pane zvishandiso zvakaita se yemahara Mainline Updater app, iyo inokutendera iwe kuti uone rondedzero yemazuva ano yemamodule akaiswa uye nyore kuwana sarudzo dzekuvandudza system. Google PlayNenzira iyi, unogona kutarisa kana MediaProvider yako yazvino uye kubatsirwa nekuvandudzwa kwayo.
Kune rumwe rutivi, kune zvinoshandiswa zvakadai se Media Provider Manager (yakavhurika-sosi Xposed module) iyo inokutendera iwe kuti utarise kana kudzikamisa mashandisirwo ekushandisa kweMedia Store, ichipa yakawedzera granular kutonga pamusoro pekuvanzika kwako uye kushandiswa kwekuchengetedza. Aya marudzi ezvishandiso akakosha munzvimbo dzepamberi kana kana iwe uchida kudzivirira mamwe maapplication kubva kushandisa zvisina kunaka media faira system.
Ndeapi mamwe Mainline modules aripo uye MediaProvider ine hukama sei nawo?
MediaProvider ingori imwe yeakawanda Mainline modules izvo zvinotsvaga kuvandudza kuchengetedzeka, kuchinjika, uye kugona kwe Android zvigadziriso. Mamwe ma module akakosha anosanganisira:
- ART: Inogadzirisa mamiriro ekuita kweapp.
- Conscrypt: Inovandudza cryptographic chengetedzo.
- DNS Resolver: Inogadzirisa kugadziriswa kwekero yewebhu.
- Media Codecs: Inochengeta odhiyo nemavhidhiyo decoder anoenderana.
- Wi-Fi: Inokutendera iwe kuvandudza isina waya yekubatanidza pasina kusimudzira iyo yese system.
Kuve neMediaProvider pachishandiso chako, sechikamu cheaya mamodule, inovimbisa iwe kukurumidza kuwana kune zvitsva maficha uye chengetedzo zvigamba zvekugadzirisa mafaera emultimedia, pasina zvinoenderana nesarudzo yekuvandudza yemugadziri.
Kuti uone kuti ndezvipi zvikamu zvefoni yako zvinokwidziridzwa, unogona kutarisa Mainline module rondedzero uchishandisa yakatsaurwa maturusi kana nekutarisa masisitimu ekugadzirisa sarudzo muGoogle Play.