SD-kaardi tee hankimine Androidis. Mis juhtub, kui rakendus installitakse samasse seadmesse mitmele kasutajale? Kuidas uus loogika töötab

See on lõppenud! Tahvelarvutis, nimelt Asuses MeMO Pad 7, mille asendasin oma ausa töökaga, on saanud Android 5.0.1 värskenduse. Nüüd on mul seade Lollipopiga või, nagu Internetis öeldakse, Lollipopiga.


Värskendus saabus mõneti ootamatult. Ausalt öeldes ootasin aprillis uus püsivara telefoni (Asus ZenFone 5) - tema, poolt vähemalt, lubas. Keegi ei öelnud tahvelarvuti kohta midagi ja see on teie otsustada, hankige see ja allkirjastage see.

See heidutas mind (muidugi heas mõttes) ka seetõttu, et ostsin tahvelarvuti detsembris ja sellel oli versioon 4.3. See tähendab, et see on teine ​​oluline uuendus operatsioonisüsteemi(tegelikult oli värskendusi rohkem, kuid arv Androidi versioonid pole muutunud). Minu seadmete eelmine tootja – Samsung – ei saanud sellise tulekiirusega kiidelda, kuigi ka nemad uuendasid operatsioonisüsteemi kaks korda: Android 3.2-lt Android 4.1.2-le (4.0.1 kaudu). Kuid neid uusi versioone pidime ootama palju kauem.

No elagu üllatused! Olles saanud teate uue püsivara versiooni avaldamise kohta, laadisin selle kohe alla, mis on üle 700 meetri, ja käivitasin värskenduse. Kuna ma ei laadinud alla koduvõrk, ja mobiiltelefoni kaudu kulus kõige tegemiseks veidi rohkem aega: allalaadimise algusest kuni uuenduse lõpetamiseni möödus umbes tund. Värskendus ise kestis umbes paarkümmend minutit, kuid potentsiaalselt võib see võtta kauem aega – sest pärast operatsioonisüsteemi installimist järgneb värskendusprotsess installitud programmid. Minu loendur luges 205-ni. Kuid nüüd on protsess lõppenud ja on aeg näha, mis on muutunud.

Esimese asjana jäi silma keerukam graafika seadme avamisel. Teine on käsi teavitusalal. Paar päeva pidasin vastu, lootes, et juhuslikult näen kuskil midagi sellega seonduvat. Ma ei näinud seda. Siis hakkasin sihikindlalt otsima ja leidsin 4pda pealt sellele seletuse. Selgub, et teated jagunevad olulisteks ja mitte nii olulisteks ning on võimalik määrata, milliseid teateid soovitakse saada. Kui määrate valiku Alati teavitada , siis käsi kaob, kui valik Ainult olulised hoiatused , siis ilmub käsi. Ausalt öeldes eemaldasin mitu korda oma käe, kuid millegipärast tuli see aina tagasi. Miks? Ma ei tea veel.

Siin on tegelikult selle käe "eemaldamise" protseduur:

Ülaltoodud meetod ei ole üldse keeruline. Kuid saate tulemuse saavutada veelgi kiiremini ja lihtsamalt: vajutage ühte kahest helitugevuse nupust – ekraanile ilmub aken, mis võimaldab teil muuta helitugevuse taset. erinevaid komponente süsteeme ning ka tähelepanu, haldamist Hoiatusrežiimid . Tõsi, millegipärast need samad Hoiatusrežiimid kuvatakse sel viisil kiire variant mitte alati. Ma pole veel mustrit leidnud, aga ausalt öeldes ei otsinud ma seda väga.

Paar sõna installitud programmide kohta. Kuigi enne värskendusprotsessi alustamist sain hoiatuse, et mõned programmid kustutatakse, kuna need ei sisaldu uude püsivarasse, jäi enamik programme siiski alles.


Ainus, millest mul on natuke kahju, on programm ebatüüpilise nimega "Kaks rakendust". Kuigi pean tunnistama, et ma isegi ei saanud kohe aru, millest jutt: mõtlesin, millised kaks rakendust kustutatakse, kas nimesid on tõesti võimatu märkida.

Jah, programm, mis ilmus versioonis 4.4.2 ja võimaldas jagada ekraani kahe samaaegselt töötava rakenduse vahel, on unustuse hõlma vajunud. Ausalt öeldes oli selle funktsionaalsus üsna nõrk, kuna korraga oli võimalik käivitada väga piiratud hulk rakendusi. Kui mälu ei peta, kasutasin seda ainult korra või kaks, et näha, milline see on. Võib-olla jääb keegi selle programmi pakutavatest võimalustest kasutamata, aga millegipärast ma eriti ei ärritunud. Kuigi mulle muidugi väga ei meeldi, kui nad võtavad minult ära selle, mida nad mulle varem andsid.

Veel paar kommentaari programmide kohta. Pärast seda, kui ma kolisin uus tahvelarvuti, kulutasin mõnda aega sellele programmide installimisele, mida kasutasin oma eelmises seadmes. Mõned neist juhtusid, kuid me ei räägi neist praegu. Me räägime nendest programmidest, mille käitumises on midagi muutunud. Muidugi pole ma veel kõike proovinud, kuid siin on see, mida ma seni avastasin.

Muide, TuniIn Radio Pro, mille ostsin, ei töötanud KitKatis absoluutselt. Kõik läks libedalt – kuni tuli otse raadiojaama kuulamiseni. See tähendab, et programm käivitati, valisin rühma raadiojaamu, näiteks kohalikud raadiojaamad, valisin konkreetse jaama (näiteks RockFM, Radio Jazz või mis tahes jaam üldiselt), mille järel programm jooksis kokku viga. Mõnikord oli isegi heli, kuid programm jooksis ikkagi kokku. Aeg läks, TuneIn Radio värskendused avaldati, kuid midagi ei muutunud. Pärast A-le uuendamist aga kadusid probleemid võluväel ning nüüd toimib kõik vähimategi kaebusteta.

Veel üks positiivne muutus - kontorikomplekt SoftMaker Office HD, samuti ausalt ostetud. Selles sisalduvad programmid töötasid Samsungi tahvelarvutis normaalselt. Kui ma need programmid uude tahvelarvutisse installisin, ei käivitunud need üldse. Mõne aja pärast ilmus selle kontori värskendus ja olukord paranes mõnevõrra: programmid hakkasid käivituma, kuigi töö ajal, menüüalal (ülemine rida programmi aken), kogunes kummalisi graafilisi artefakte. Töölauale (või mõnele muule rakendusele) ja tagasi lülitudes kadusid artefaktid, kuid mitte kauaks. Pärast Androidi värskendused Kõik paketis sisalduvad programmid töötavad nagu kellavärk.

Noh, väike negatiivne punkt. Kasutan väga aktiivselt programmi nimega DVR. Maksin ka selle eest raha. Programm töötas uuel tahvelarvutil kenasti, kaebusi polnud, pluss funktsioonid, mida eelmisel tahvelarvutil polnud, töötasid näiteks video stabiliseerimine. Pärast OS-i värskendamist hakkas programm salvestamise alustamisel pidevalt kokku jooksma. Alguses arvasin, et mälukaardile salvestamisega on probleeme - olin seadistatud välisele MicroSD-kaardile programmikataloogi kirjutama. Kuid pärast seda, kui sain programmi enda salvestuskataloogi alamkataloogi luua, sai selgeks, et välise kaardi kasutamisel pole sellega midagi pistmist. Seejärel otsustasin ühe programmi funktsiooni korraga keelata ja esimese asjana puudutas sõrm stabiliseerimise märkeruuduga märkeruutu. Pärast valiku väljalülitamist hakkas programm videot salvestama, kuid selle kvaliteet langes. Ei, eraldusvõime ja voolukiirus – kõik jäi samaks, aga pilt salvestusel hõljus lainetena. Programmis on säte, mis üritab seda efekti siluda ja põhimõtteliselt aitab selle sisselülitamine mõnevõrra kaasa, kuid millegipärast programmi uuesti sisenedes jääb märk, et valik on sisse lülitatud, kuid pilt hõljub, nagu valik oleks keelatud . Kui klõpsate juba lubatud valikul, naaseb kõik kohe normaalseks. Tõenäoliselt on see programmi viga, teatan sellest arendajale ja võib-olla parandab autor selle vea. Kuid asjaolu, et video stabiliseerimine ei tööta, on veidi tüütu. Esiteks sellepärast personaliprogramm Kaameral on seadetes stabiliseerimisvõimalus ja sisselülitamisel toimub salvestamine vigadeta.

Programmidega seotud erijuhtudest liigun edasi süsteemi üldisemate omaduste juurde. Noh, esiteks, arv vaba mälu. Nagu ma juba kirjutasin, jäi kogu minu tarkvara paigale. Samas pean ütlema, et kurnan tabletti päris palju. Mitte selle poolest, et ma pidevalt mänge mängin, vaid selle poolest, et mul on rippumas palju teenuseid, millest mõnda ma võib-olla ei kasuta, aga jätan igaks juhuks alles. Me räägime ennekõike igasugustest e-kirjadest - Outlook, Yandex Mail, GMail, täpsemalt nüüd Inbox. Järgmiseks mitmesugused pilvesalvestus- Yandexi ketas, OneDrive, Google Drive, Dropbox, Box, Asus WebStorage. Paar sotsiaalvõrgustikud- Odnoklassniki ja Google+. Kõikvõimalikud muud sõnumitoojad – Viber, ICQ, Skype, Hangouts. Kõik need programmid söövad ühel või teisel viisil seadme mälu, isegi kui te neid ei kasuta. Kuid põhimõtteliselt saan aru, millesse ma puutun.

Asuse seadmete kasutajad teavad, et Androidi kardinas on rakendus, mis võimaldab vähemalt ajutiselt mälu tühjendada. Esiviisikus kannab see nime Puhastamine, KitKatis aga fantaasiarikkamalt - Tugevdamine. Kui avate kardina, näitab selle rakenduse ikoon vaba ruumi suurust. hetkel mälu. Niisiis, kui tahvelarvutisse installiti Androidi versioon 4.4.2, kõikus see arv vahemikus 200–300 MB ja ikoon oli enamasti kollane. Nüüd varieerub vaba mälu maht 400–600 MB ja ikoon on peaaegu kogu aeg roheline. See muutus on tõenäoliselt tingitud muutusest virtuaalne masin, mida kasutatakse Lollipopis, kuid võib-olla on püsivaras endas midagi muutunud, näiteks Asus on midagi eemaldanud. Üldiselt peame selle välja mõtlema.

Virtuaalse masina muutmine oleks pidanud mõjutama veel kahte parameetrit – jõudlust ja energiatarbimist. Mida ma võin jõudluse kohta öelda? Mitte midagi, ilmselt. Ma ei mängi mänguasjadega, mulle ei meeldi väga võistelda papagoidega (Antutu jne). Tahvelarvuti ise on üsna võimas, nii et ma ei märganud ei KitKatis ega nüüd ka Lollipopis mingeid aeglustusi. Kõik on sujuv ja kaebusteta. Kui ma sõidan, töötavad DVR, Strelka, Maps (kas Yandex või Google), kuulan muusikat ka Kodi abil ja peale kõike seda reageerib see ikkagi töölauale lülitumisele, mõne muu programmi käivitamisele üldiselt , on metsaline.

Ja energiatarbimisest... Põhimõtteliselt võttis KitKati viimane uuendus minult võimaluse kurta seadme ebaefektiivsuse üle. Kui pärast esialgne paigaldamine KitKati tahvelarvuti kaotas öö kohta 20-30 protsenti oma energiavarudest, kuid pärast 31. püsivara versioonile uuendamist muutusid kaod üsna vastuvõetavaks – kahelt viiele protsendile öö kohta. Lollipopile värskendamine ei halvendanud selles mõttes midagi ja suur aitäh selle eest. Mis puudutab koormuse all tarbimist, siis siinkohal võin taas tuua kasutuskogemuse autos: kõik samad esialgsed - DVR, Strelka, Yandex Navigator, Kodi, ekraani heledus on umbes 75-80 protsenti - helge, päikeseline päev, pluss kõik juhtmevabad liidesed sisse lülitatud ja nii oli reisi ajal – umbes kaks tundi – aku tühjenenud 57 protsendini. Minu arust täitsa väärt. Muide, KitKati all oli umbes sama.

Noh, viimane asi - loetletud järjekorras, kuid mitte tähtsuse järjekorras - on see, mida tahaksin märkida. Räägime välise mälukaardiga töötamisest. Mina, kui olin välja tulemas olukorrast, mille põhjustasid KitKati välisele mälukaardile salvestamise piirangud. Ilmselt oli negatiivsuse laine nii tugev, et Google pidi kuulama ja midagi muutma. Või äkki nad lihtsalt muutsid midagi, kedagi kuulamata. Aga jätame selle vahele oluline küsimus kõrvale (nad kuulasid / ei kuulanud), liigume edasi muutuste endi juurde.

Google lubas kolmanda osapoole programmid kirjutage mälukaardile. Põhimõtteliselt ta seda varem ei keelanud, lihtsalt load anti nii, et kui normaalsetes tingimustes, oli ainult natiivsel failihalduril kirjutusõigus kogu välisele kaardile. Noh, võib-olla lubasid mõned tootjad juurdepääsu oma teistele programmidele, kuid ma puutusin kokku ainult failihalduriga. Nüüd saab kirjutada iga programm, kuid selleks peavad olema täidetud mitmed tingimused.

Esiteks peab programm kasutama Storage Access Frameworki uusi funktsioone, nimelt kasutama kavatsust OPEN_DOCUMENT_TREE ja mitmeid uusi või värskendatud SDK funktsioone.

Teiseks peab kasutaja ise otsustama, millisele failisüsteemi harule (või harudele) ta sellele või teisele rakendusele juurdepääsu annab. See tähendab, et saate anda juurdepääsu kogu kaardile, kui vastuseks juurdepääsutaotlusele määrate selle juure või saate anda juurdepääsu ainult konkreetne kaust ja tema lapselemendid. Üldiselt peate enda eest vastutuse võtma ja kui midagi juhtub, võite ka ainult ennast süüdistada.

Kolmandaks on õnn. Minu tahvelarvutis töötas kõik nagu peab, mu sõbra oma HTC One M8 - ei töötanud, kuigi võrgus seal on video, kuidas kõik sellel nutitelefonimudelil suurepäraselt töötab. Siiski eeldatakse, et see ei toiminud, kuna tema telefoni kaart oli kuidagi valesti vormindatud, võib-olla ilma helitugevuse nime märkimata või võib-olla valesti failisüsteem.

Tegelikult on see ühtaegu rõõmus ja kurb uudis. Rõõmustav – sest nüüd ei pea te seadmele juurjuurdepääsu hankima ja te ei pea piirduma ainult rakenduste kataloogiga. Kurb – sest seni, kuni arendajad ei ole nõus uut API-t kasutama ja oma programmide uusi versioone välja laskma, ei tööta miski. Minu kogemusest: failihaldur ES Explorer on juba omandanud uue API-toe ja ma sain anda talle kirjutamisõigused kogu välisele SD-kaardile, kuid Total Commanderi failihaldur ei kirjutanud ega saa ka praegu MicroSD-kaardile kirjutada – kuhugi peale enda kataloogi. nagu see.

Tegelikult on kogu selles välisele mälukaardile salvestamise loos päris palju nüansse. Näiteks andsite mõnele programmile juurdepääsu, kuid unustasite teised. Kust vaadata? Nagu ma aru saan, siis praegu - mitte kusagil. See tähendab, et põhimõtteliselt saate vaadata, kuid mitte tahvelarvutist endast, vaid arvutist, kui ühendate tahvelarvuti sellega ja kasutate adb-programmi. Siin on käsk, mida vajate:

Adb shell dumpsys tegevuse pakkujad

Kuid ma ei ole leidnud, kuidas sama asja tahvelarvutis hankida.

Järgmine küsimus. Andsite mõnele rakendusele juurdepääsu kausta kirjutamiseks ja siis mõtlesite ümber ja soovite selle ära võtta. Kas selline võimalus on olemas? Õnneks jah. Aga kaotustega. Esiteks väga radikaalne viis- Saate programmi eemaldada ja uuesti installida. Teine meetod pole nii radikaalne, kuid ka mitte ideaalne - seadme seadetes peate rakenduse andmed kustutama. Loomulikult kustutatakse koos juurdepääsuõigustega ka muud programmi andmed, mistõttu tekib loogiline küsimus selle meetodi praktilise rakendatavuse kohta. Võib-olla ei olnud veel võimalik avastada muid meetodeid. Saate kasutada mõlemat meetodit, kui varundate esmalt programmi andmed ja taastate need pärast ühe meetodi rakendamist. Siin aga tekib küsimus varukoopiate võimaluste kohta – kas varundatakse ainult andmeid või andmeid koos lubadega? Kui lubadega, siis pärast taastamist, noh, saate aru... See kõik sõltub suuresti konkreetsetest kasutatavatest rakendustest, seega peaksite olema väga ettevaatlik. Ja see on veel üks hea põhjus mõelda, enne kui näete iidset Moskvat, ilma vastavate võimude sanktsioonideta, andke mis tahes rakendusele õigused juurdepääsuks välise kaardi failisüsteemile.

Edasi - rohkem. Mis juhtub, kui vahetate tahvelarvuti pessa sisestatud kaardi? Vastus on, et igale seadmesse sisestatud kaardile peate eraldi juurdepääsu andma. Põhimõtteliselt on see ilmselt loogiline. See tähendab, et andsite failihaldurile juurdepääsu kaardi juurtele, seejärel võtsite selle välja ja sisestasite teise. Failihaldur ei kirjuta uuele kaardile, peate uuesti juurdepääsu andma. Kuid kui tagastate esimese kaardi tahvelarvutisse, kirjutab failihaldur sellele probleemideta.

Veel üks küsimus. Nii et andsite rakendusele juurdepääsu mõnele kaustale, mitte juurkaustale. Aeg möödus ja teil oli vaja lubada samale programmile kirjutusõigus sama kaardi teises kaustas. Kas seda saab teha? Põhimõtteliselt on see eelmise juhtumi tagajärg, seega vastus on: jah, see on võimalik. See tähendab, et iga rakenduse puhul jätab süsteem meelde kataloogide loendi, millele olete andnud kirjutamisõiguse.

Nüüd on iga kasutaja jaoks, kelle profiil on seadmes loodud, tahvelarvutisse installitud rakendustega seotud nüanss. Ka siin on kõik loogiline - iga seadme kasutaja jaoks on salvestatud oma juurdepääsuõigused rakendustele, see tähendab, et igaüks on oma õnne arhitekt, või kui soovite, siis oma kuri Pinocchio.

Ja loomulikult sõltub palju arendajate kvalifikatsioonist. Võib juhtuda, et annad mõnele programmile õigused välisele kaardile kirjutamiseks ligi pääseda ja peale tahvelarvuti taaskäivitamist avastad, et ligipääsu pole. Sellises olukorras on süüdi vaid programmi arendaja – ta ei hoolitsenud saadud loa säilitamise eest. Võib-olla peaksite selle üle mõtlema ja otsima sellele programmile alternatiivi, sest kunagi ei tea, mida selline programmeerija ette ei näinud.

Oh jah, see on salvestusõiguste väljastamise protsess microSD-kaart ES juhtmestiku jaoks:

Vajame välist kaarti

Proovime luua midagi otse kaardi juurtes






Peame kuvama SD-kaardi


Siin see on, meie väline mälukaart



Noh, see selleks korraks.

P.S. Juhtus nii, et selle materjali kirjutamisest on möödas päris palju aega. Oleksin võinud selle juba mitu korda avaldada, kuid lükkasin seda pidevalt edasi ja pole selge, miks. Täpsemalt, ma tean, miks – ma otsustasin ikka veel, kuidas konkreetset protsessi kirjeldavat ekraanipiltide seeriat kõige paremini esitada: kas lihtsalt sisestatud piltide jada või slaidiseansina. Lõppkokkuvõttes otsustati kasutada (vähemalt praegu) piltide jada. Kuidas see kõik juhtus, on juba eraldi postituse teema. Praeguseks jääb kõik nii nagu on, kahju ainult, et palju aega raisati. Ainus lohutus on see, et see polnud asjata. Lisaks juhtus meeldiv sündmus. Kirjutasin selles sõnumis, et juurdepääs väline kaart mälu on saadaval ainult siis, kui programmi autorid hakkavad uut API-t kasutama. Näitena programmi kohta, milles uut API-t ei kasutata, tõin Täielik komandör. Nii et kui ma avaldamisega viivitasin, värskendati Total Commanderit ja nüüd saab see töötada ka välise mälukaardiga stiilis Android Lollipop. Allpool pakun ekraanipilte, mis kirjeldavad uue kataloogi loomise protsessi välise mälukaardi juurtes koos kasutades Total Komandör:

Välise mälukaardi valimine
ja valige menüüst soovitud üksus
See on praeguseks ilmselt kõik.

Probleem

Sõnum suunab teid külastama kahte veebisaiti:

See näeb välja nagu sisemine näide (võib-olla näidatakse seda hiljem API demodes), kuid on üsna raske aru saada, mis toimub.

See ametlik dokumentatsioon uues API-s, kuid sellel pole piisavalt teavet selle kasutamise kohta.

Seda ütleb ta teile:

Kui tõesti vaja täielik juurdepääs kogu dokumendi alampuule, alustage käsuga ACTION_OPEN_DOCUMENT_TREE, et kasutaja saaks kataloogi valida. Seejärel edastage saadud getData() faili fromTreeUri(Context, Uri), et alustada tööd kasutaja valitud puuga.

DocumentFile'i eksemplaride puus navigeerimisel saate alati kasutada getUri() alusdokument selle objekti kasutamiseks koos openInputStream(Uri) jne.

Koodi lihtsustamiseks seadmetes, milles töötab KITKAT või varasem, võite kasutada faili fromFile(File), mis emuleerib DocumentProvideri käitumist.

Küsimused

Mul on uue API kohta mõned küsimused:

2 vastust

Paljud head küsimused, las ma mõistan :)

Kuidas sa seda kasutad?

Siin on suurepärane õpetus KitKati salvestusruumi juurdepääsuraamistikuga suhtlemiseks:

Suhtlemine uued API-d Lollipop on väga sarnane. Et paluda kasutajal valida kataloogipuu, saate käivitada sellise kavatsuse järgmiselt:

Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE);

startActivityForResult(intent, 42);

Seejärel saate rakenduses onActivityResult() edastada kasutaja valitud Uri uude DocumentFile'i abiklassi. Siin on lühike näide, mis loetleb valitud kataloogis olevad failid ja loob seejärel uue faili: Public void onActivityResult(int taotlusKood, int resultCode, Intent resultData) ( if (resultCode == TULEMUS_OK) ( Uri treeUri = resultData.getData(); DocumentFile pickedDir = DocumentFile.fromTreeUri(this, treeUri); // Loetlege kõik olemasolevad failid sees valitud kataloog (dokument: pickedDir.listFiles()) ( Log.d(TAG, "Leitud fail " + file.getName() + " suurusega " + file.length()); ) // Looge uus fail ja kirjutage sinna DocumentFile newFile = pickedDir.createFile("tekst/lihtne", "Minu romaan");

OutputStream out = getContentResolver().openOutputStream(newFile.getUri()); out.write("Kaua aega tagasi...".getBytes()); out.close();

) )

Kui soovite sellele Urile juurde pääseda aadressilt

enda kood

, saate kutsuda välja ContentResolver.openFileDescriptor() ja seejärel kasutada traditsioonilise POSIX-i täisarvulise failikirjelduse hankimiseks kasutada ParcelFileDescriptor.getFd() või detachFd().

Kuidas kontrollida juurdepääsu failidele/kaustadele?

Vaikimisi ei säilitata Storage Access Frameworki võimaluste poolt tagastatud Urist taaskäivitamise ajal. Platvorm "pakub" luba salvestamise võimalust, kuid soovi korral tuleb siiski luba "võtta". Meie ülaltoodud näites helistaksite:

GetContentResolver().takePersistableUriPermission(treeUri, Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);

ContentResolver.getPersistedUriPermissions() API kaudu saate alati teada saada, millised püsivad toetused on teie rakenduse jaoks saadaval. Kui te ei vaja enam salvestatud Uri-le juurdepääsu, saate selle vabastada, kasutades ContentResolver.releasePersistableUriPermission() .

Kas see on KitKatis saadaval?

Ei, me ei saa platvormi vanematele versioonidele tagasiulatuvalt uusi funktsioone lisada. Kas ma saan näha, millistel rakendustel on juurdepääs failidele/kaustadele? Praegu pole seda näitavat kasutajaliidest, kuid leiate teavet adb shell dumpsys tegevuste pakkujate väljundi jaotisest Granted Permissions Uri. Mis juhtub, kui rakendus installitakse samasse seadmesse mitmele kasutajale? Uri eraldusvõime load on kasutaja kohta isoleeritud, nagu kõik muud mitme kasutaja platvormi funktsioonid. See tähendab, et sama rakendus töötab kahe all

erinevate kasutajate poolt

, ei sisalda ülekatteid või üldised load Uri.

Load tühistatakse ka siis, kui taotluse andmed kustutatakse mis tahes toetuses osaleva rakenduse kohta.

Kas päring käivitatakse valitud kaustas rekursiivselt?

Jah, kavatsus ACTION_OPEN_DOCUMENT_TREE annab teile rekursiivse juurdepääsu olemasolevatele ja äsja loodud failidele ja kataloogidele.

Kas see pakub mitut võimalust?

Jah, mitut valikut on toetatud alates KitKatist ja saate selle lubada, kui määrate oma ACTION_OPEN_DOCUMENT kavatsuse käitamisel EXTRA_ALLOW_MULTIPLE. Valitavate failitüüpide kitsendamiseks saate kasutada Intent.setType() või EXTRA_MIME_TYPES:

Kas emulaator saab uut API-t proovida?

Jah, peamine salvestusseade peaks ilmuma ehitajas, isegi emulaatoris. Kui teie rakendus kasutab jagatud salvestusruumile juurdepääsuks salvestusruumi juurdepääsu raamistikku, ei vaja te enam READ/WRITE_EXTERNAL_STORAGE õigusi ja saate need eemaldada või kasutada funktsiooni android:maxSdkVersion taotlemiseks ainult raamistiku varasemates versioonides.

Mis juhtub, kui kasutaja asendab SD-kaardi teisega?

Kui kaasatud on füüsiline meedium, siis UUID (nt seerianumber FAT) kirjutatakse alati tagastatud Uri-sse. Süsteem kasutab seda kasutaja valitud meediumiga ühenduse loomiseks, isegi kui kasutaja vahetab kandjat mitme pesa vahel.

Kui kasutaja muutub teisel kaardil, peate taotlema juurdepääsu uus kaart. Kuna süsteem jätab UUID-põhised toetused meelde, on teil endiselt juurdepääs algsele kaardile, kui kasutaja selle hiljem uuesti sisestab.

Minu Androidi projekt Allolevast Githubist leiate töötava koodi, mis võimaldab kirjutada extSdCardile Android 5-s. See eeldab, et kasutaja annab juurdepääsu kogu SD-kaardile ja lubab seejärel sellele kaardile kõikjale kirjutada. (Kui soovite juurde pääseda ainult üksikutele failidele, muutuvad asjad lihtsamaks.)

Põhikoodi katkendid

Salvestusplatvormi käivitamine:

@TargetApi(Build.VERSION_CODES.LOLLIPOP) private void triggerStorageAccessFramework() ( Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE); startActivityForResult(intent, REQUEST_CODE_STORAGE_ACCESS);

Vastuse töötlemine salvestusruumi juurdepääsuplatvormilt:

@TargetApi(Build.VERSION_CODES.LOLLIPOP) @Alista public final void onActivityResult(final int requestCode, final int resultCode, final Intent resultData) ( if (requestCode == SeadedFragment.REQUEST_CODE_STORAGE_ACCESS) ( Uri puu =Ureris = null; .RESULT_OK) ( // Hankige Uri Storage Access Frameworkist. treeUri = resultData.getData(); // Säilitage URI jagatud eelistuses, et saaksite seda hiljem kasutada. // Kasutage siin PreferenceUtili asemel oma raamistikku. PreferenceUtil.setSharedPreferenceUri (R.string.key_uri_extsdcard, treeUri) // Püsivad juurdepääsuõigused.

Faili väljundvoo hankimine salvestusruumi juurdepääsuplatvormi kaudu (kasutades salvestatud URL-i, eeldades, et see on välise SD-kaardi juurkausta URL)

DocumentFile sihtdokument = getDocumentFile(fail, false); OutputStream outStream = Application.getAppContext().

getContentResolver().openOutputStream(targetDocument.getUri());

Kasutatakse järgmisi abistamismeetodeid:< parts.length; i++) { DocumentFile nextDocument = document.findFile(parts[i]); if (nextDocument == null) { if ((i < parts.length - 1) || isDirectory) { nextDocument = document.createDirectory(parts[i]); } else { nextDocument = document.createFile("image", parts[i]); } } document = nextDocument; } return document; } public static String getExtSdCardFolder(final File file) { String extSdPaths = getExtSdCardPaths(); try { for (int i = 0; i < extSdPaths.length; i++) { if (file.getCanonicalPath().startsWith(extSdPaths[i])) { return extSdPaths[i]; } } } catch (IOException e) { return null; } return null; } /** * Get a list of external SD card paths. (Kitkat or higher.) * * @return A list of external SD card paths. */ @TargetApi(Build.VERSION_CODES.KITKAT) private static String getExtSdCardPaths() { ListAvalik staatiline dokumendifail getDocumentFile(lõplik failifail, lõplik tõeväärtus isDirectory) ( String aluskaust = getExtSdCardFolder(file); if (baseFolder == null) ( tagastamine null; ) String suhtelinePath = null; proovige ( String fullPath = file.getCanonicalPath(); relatiivnePath = fullPath.substring(baseFolder.length() + 1 püüdmine (IOException e) ( return null; ) Uri treeUri = PreferenceUtil.getSharedPreferenceUri(R.string.key_internal_uri_extsdcard if (treeUri) == null) ( return null); ; ) // alustage SD-kaardi juurega ja seejärel sõeluge läbi DocumentFile.<>teed = uus ArrayList< 0) { Log.w(Application.TAG, "Unexpected external file dir: " + file.getAbsolutePath()); } else { String path = file.getAbsolutePath().substring(0, index); try { path = new File(path).getCanonicalPath(); } catch (IOException e) { // Keep non-canonical path. } paths.add(path); } } } return paths.toArray(new String); } /** * Retrieve (); for (Failifail: Application.getAppContext().getExternalFilesDirs("external")) ( if (file != null && !file.equals(Application.getAppContext().getExternalFilesDir("external"))) ( int index = fail .getAbsolutePath().lastIndexOf("/Android/data");

See on lõppenud! Tahvelarvuti, nimelt Asus MeMO Pad 7, mille asendasin oma ausa töömehega, sai Android 5.0.1 värskenduse. Nüüd on mul seade Lollipopiga või, nagu Internetis öeldakse, Lollipopiga.

Värskendus saabus mõneti ootamatult. Ausalt öeldes ootasin aprillis telefonile (Asus ZenFone 5) uut püsivara – vähemalt lubati. Keegi ei öelnud tahvelarvuti kohta midagi ja see on teie otsustada, hankige see ja allkirjastage see.

See heidutas mind (muidugi heas mõttes) ka seetõttu, et ostsin tahvelarvuti detsembris ja sellel oli versioon 4.3. See tähendab, et see on operatsioonisüsteemi teine ​​oluline värskendus (tegelikult oli värskendusi rohkem, kuid Androidi versiooni number ei muutunud). Minu seadmete eelmine tootja – Samsung – ei saanud sellise tulekiirusega kiidelda, kuigi ka nemad uuendasid operatsioonisüsteemi kaks korda: Android 3.2-lt Android 4.1.2-le (4.0.1 kaudu). Kuid neid uusi versioone pidime ootama palju kauem.

No elagu üllatused! Olles saanud teate uue püsivara versiooni avaldamise kohta, laadisin selle kohe alla, mis on üle 700 meetri, ja käivitasin värskenduse. Kuna laadisin alla mitte koduvõrgu, vaid mobiilivõrgu kaudu, võttis kõik veidi rohkem aega: allalaadimise algusest kuni uuenduse lõpetamiseni möödus umbes tund. Värskendus ise kestis paarkümmend minutit, kuid potentsiaalselt võib see kesta kauemgi – sest peale operatsioonisüsteemi installimist järgneb installitud programmide uuendamise protsess. Minu loendur luges 205-ni. Kuid nüüd on protsess lõppenud ja on aeg näha, mis on muutunud.

Esimese asjana jäi silma keerukam graafika seadme avamisel. Teine on käsi teavitusalal. Paar päeva pidasin vastu, lootes, et juhuslikult näen kuskil midagi sellega seonduvat. Ma ei näinud seda. Siis hakkasin sihikindlalt otsima ja leidsin 4pda pealt sellele seletuse. Selgub, et teated jagunevad olulisteks ja mitte nii olulisteks ning on võimalik määrata, milliseid teateid soovitakse saada. Kui määrate valiku Alati teavitada , siis käsi kaob, kui valik Ainult olulised hoiatused , siis ilmub käsi. Ausalt öeldes eemaldasin mitu korda oma käe, kuid millegipärast tuli see aina tagasi. Miks? Ma ei tea veel.

Siin on tegelikult selle käe "eemaldamise" protseduur:

Ülaltoodud meetod ei ole üldse keeruline. Kuid saate tulemuse saavutada veelgi kiiremini ja lihtsamalt: vajutage ühte kahest helitugevuse reguleerimise nupust - ekraanile ilmub aken, mis võimaldab teil muuta erinevate süsteemikomponentide helitugevust, aga ka tähelepanu, juhtimist. Hoiatusrežiimid . Tõsi, millegipärast need samad Hoiatusrežiimid ei kuvata alati nii kiiresti. Ma pole veel mustrit leidnud, aga ausalt öeldes ei otsinud ma seda väga.

Ma ei leidnud ametlikelt veebisaitidelt ühtegi ametlikku Androidi värskendust (meie piirkonna jaoks).

Foorumitest leidsin infot, et Google andis Venemaale püsivara versiooni välja jaanuaris 2015. Kuid seda rakendatakse klientide seadmetes väga aeglaselt.

Nii saan oodata, kuni mu seade saab teate tarkvarauuenduse olemasolust. Pärast seda saan Androidi värskendada.

Uuendusega said kasutajad SD-kaartide kasutamisele mitmeid piiranguid. Kuni viimase ajani sai seda probleemi lahendada kohandatud püsivara abil või naasta rohkemale varajane versioon OS. Nüüd saab endiste võimaluste juurde tagasi pöörduda Android 4.4 KitKat. Lugege edasi, et teada saada, kuidas seda teha.

Esiteks peate oma juurduma Android seadmeid. Teiseks oluline tingimus- see rakendus SDFix. Laadige rakendus alla aadressil Android tasuta saate otse saidilt . Selleks kasutage allolevat linki.

Olles installinud SDFix omal käel Android, taastate oma endised võimalused mõne puudutusega. Rakenduse tööpõhimõte seisneb selles SDFix lisab Android UNIX-i rühma "media_rw". WRITE_EXTERNAL_STORAGE aastal seega kasutatud Android 4.4 KitKat XML fail muutub järgmiseks platform.xml. See loob varukoopia algseadistus platform.xml.original-pre-sdfix, mida saab kasutada piirangute taastamiseks. Süsteemi naasmiseks laoseisu seisukord, peate kasutama juurjuurdepääsu toetavat explorerit ja asendama platform.xml failiga platform.xml.original-pre-sdfix.

Eraldi tuleb märkida, et SD-d kasutavad rakendused saavad rohkem madal tase turvalisus. Oluline on ka asjaolu, et SDFix tulemuseks on püsivad muudatused, mis tähendab, et kui vanad õigused on taastatud, saab rakenduse kustutada.

ostsin uus telefon Samsung Galaxy S5 ja tekkis kohe probleem operatsioonisaalis Android süsteem. Täpsemalt versioon Android 4.4 KitKat. Seda Androidi versiooni tutvustati uus funktsioon Google'i arendajad.

Rakendustel on nüüd keelatud juurdepääs SD-kaardil olevate failide redigeerimisele!Seetõttu ei tööta mõned rakendused!

Ma ütlen teile, kuidas sellest probleemist mööda saada!

Tere pärastlõunast kallid lugejad meie blogi!

Üleeile ostsin endale uue telefoni! Samsung Galaxy S5!

NAUTIGE OMA UUT TELEFONI

Õnnitlen end eduka ostu puhul, millest olen juba mitu aastat unistanud! Telefon osutus märkimisväärselt kiireks, võimsaks, ilusaks ja mugavaks!

Mul oli see juba varem HTC telefon(ta on juba umbes 4-5 aastane) Android süsteemiga. Üks esimesi sellise süsteemiga telefone (ostuhetkel). Uurisin seda seest ja väljast, värskendasin süsteemi mitu korda ja valisin Androidi püsivara, mis oli funktsionaalsuselt palju parem kui tol ajal ametlik.

Kes ei tea, siis vilkumine on telefoni operatsioonisüsteemi asendus. No umbes nii Windowsi uuesti installimine arvutis.

Palju aega on möödas, Androidist on välja antud palju versioone (ostuhetkel oli mul Android 2.2). Uued versioonid ja telefonid, millele need installiti, on minu vanast nutitelefonist palju paremad. Seetõttu olin võimsuse, kiiruse ja funktsionaalsuse üle väga üllatunud.

Nautisin seda umbes 4 päeva. Siis leidsin probleemi!

PROBLEEM! Failisüsteem keelab faili redigeerimise!

Pärast järgmist uuendust uuendati telefoni operatsioonisüsteem ise Android 4.4-le.

Kujutage ette minu üllatust, kui ma ei saanud ühtegi faili redigeerida enda telefon! Algul olin tõrgetes süüdi, tegin end sisse erinevad kaustad, proovis faili arvutist redigeerida (ühendades kaabli telefoniga). Faile ei saanud kuidagi redigeerida!

Pärast operatsioonisüsteemi teabe vaatamist jaotises Seaded – Teave seadme kohta – SE olek Androidile, nägin sõna Jõustamine.

See on kood sõna Google tähendab Androidi versiooni, kus rakenduste õigused on piiratud operatsioonisüsteemi kerneli tasemel! EMAE! Noh, sain aru!

Pöördusin probleemi lahendamiseks Interneti poole

Siin on see, mida ma leidsin:

X Märkasin just, et mu telefon on täiesti uus, 5-aastase tootjagarantiiga!

Kui saad juurjuurdepääsu (administraatori õigused Androidi süsteemis), siis kaob ära tootjapoolne (Samsung) garantii. Tegelikult väidavad mõned häkkerite saidid, et on olemas spetsiaalsed meetodid tehase loenduri algsesse asendisse tagastamiseks. Juurjuurdepääsu saamisel lähtestatakse tehaseloendur nullile. See näitab teenindusettevõte et telefoni on häkitud ja see ei kuulu garantii alla.

Selle loenduri mõjutamiseks peate telefoni lahti võtma ja kiibidesse sattuma. Seetõttu ärge langege sellistesse pettustesse!

Kui saate juurjuurdepääsu, kaob teie garantii! Testitud mu vanal telefonil!


Android 5.0 uues versioonis kasutab Google välistele SD-mälukaartidele juurdepääsu blokeerimiseks teistsugust loogikat.

1. Kuidas uus loogika töötab?

Rakendused installitakse süsteemi kompileeritud kujul. Ehk siis käivitamiseks valmis kujul. See suurendab jõudlust, multitegumtöötlust ja vähendab aku tarbimist.

Ehk siis varem olid süsteemil distributsioonifailid (installifailid) ja süsteem kompileeris selle rakenduse käivitamisel enne käivitamist. Teisisõnu, failid pakiti, rakenduse töötamise ajal pakiti failid lahti ja käivitati.

Nüüd installitakse Android 5.0-s kõik rakendused kompileeritud lahtipakkitud kujul. Selle tulemusena kasutavad rakendused rohkem ruumi, kuid töötavad kiiremini!

2. Milleni see viib?

  1. Rakendusele määratakse juurdepääsuõigused PAIGALDAMISEL!
  2. Kasutajal on õigus määrata oma õigused konkreetne rakendus paigaldamise ajal.
  3. Kasutaja saab rakenduse õigusi muuta. Näiteks kui usaldate mõnda programmi, saate lubada sellel välisel mälukaardil olevaid faile redigeerida.

SOOVIN ANDROIDI VÄRSKEndada VERSIONILE 5.0, et probleem lahendada!

Kui uuendan operatsioonisüsteemi Ametlikku versiooni, SÄILITAN GARANTII!

Kuid mul on vaja Androidi versiooni Venemaa jaoks (spetsiaalselt selle jaoks, mitte mõne teise riigi jaoks), et mitte kannatada liidese ingliskeelsete sõnade pärast.

Ma püüan teda leida.

Ametlik programm Samsungi tugi Kies telefonidütleb, et mu telefoni on värskendatud uusim versioon Autor.

Ma ei leidnud ametlikelt veebisaitidelt ühtegi ametlikku Androidi värskendust (meie piirkonna jaoks).

Foorumitest leidsin infot, et Google andis Venemaale püsivara versiooni välja jaanuaris 2015. Kuid seda rakendatakse klientide seadmetes väga aeglaselt.

Nii saan oodata, kuni mu seade saab teate tarkvarauuenduse olemasolust. Pärast seda saan Androidi värskendada.

Saate uue püsivara ise ilma kutset ootamata vilkuda.

TÖÖTAV viis failide redigeerimiseks (arvuti abil) telefonis, millel on Android 4.4 versioon Enforcing.

Pärast otsustasin oodata ametlik värskendus, hakkas telefoni failisüsteemis tuhnima. Ja ma avastasin midagi imelikku:

  1. Teil on õigus kaustu redigeerida – teisaldage, nimetage ümber!
  2. Saate faile kustutada, teisaldada teistesse kaustadesse (koopiatena)
  3. Puuduvad õigused faile redigeerida!

Ja ma mõtlesin kohe välja toimiva viisi faili vahetamiseks vahekoopia abil! Süsteemi analüüs tegevuses...

See tähendab, mida me teeme:

  1. Faili avamine redigeerimiseks
  2. Salvestage see oma arvutisse (see ei lase teil koopiat oma telefoni salvestada!)
  3. faili telefonist kustutada
  4. kirjuta koopia ümber kustutatud faili asukohta!

Nii saame muudetud faili (kasutades vahekoopiat)!

Nii need asjad on, seltsimehed!

Kui on uudiseid, siis postitan kohe!

Ja nüüd hüvasti, näeme varsti!