Kako podesiti pametne telefone i računare. Informativni portal
  • Dom
  • Sigurnost
  • Način zaštite od neovlaštenog kopiranja datoteka u korijen fleš kartice za korisnike OS WINDOWS. Gdje je korijen memorijske kartice

Način zaštite od neovlaštenog kopiranja datoteka u korijen fleš kartice za korisnike OS WINDOWS. Gdje je korijen memorijske kartice

1. Preuzmite instalacionu datoteku na uređaj SAS4Android.apk

2. Omogućite na svom uređaju (telefonu, tabletu, itd.) dozvolu za instaliranje aplikacija trećih strana (ne sa Marketa). Ovo možete učiniti u postavkama vašeg uređaja: Postavke - Sigurnost - Nepoznati izvori- označite polje Dozvolite instalaciju aplikacija iz nepoznatih izvora(nakon instaliranja SAS4Android, ovo polje za potvrdu se može poništiti). Kopirajte datoteku SAS4Android.apk na svom uređaju i pokrenite instalaciju.

3. Pokrenite datoteku SAS4Android.apk .

4. Prilikom prvog pokretanja pojavljuje se prozor u kojem se traži putanja do korijena CD kartice i slažete se s uvjetima korištenja. Kliknite UREDU. Takođe, pri prvom pokretanju automatski se kreira radni folder aplikacije - SAS4Android i u njemu se nalazi fascikla rad. Ovo je radna mapa programa u kojoj će biti pohranjeni potrebni podaci. Imajte na umu da morate navesti put do korena SD kartica (a ne u bilo koji drugi folder) - ovo je važno!

Podrazumevano, struktura foldera programa je sljedeća:

root_sd-card/SAS4Android/work - radni folder - kreiran automatski;

root_sd-card/SAS4Android/cache - cache folder - kreiran od strane korisnika.

Ako se koristi podrazumevana struktura fascikli, program automatski određuje putanje do potrebnih fascikli i datoteka. Ako se koristi drugačija struktura foldera, staze se moraju navesti ručno. Na uređajima sa verzijama Androida starijim od 4.3.x, preporučuje se korištenje zadane strukture mapa.

Put do kartice možete odrediti na sljedeći način: Prije umetanja SD kartice u uređaj, kreirajte (na računaru) na njoj folder sa vama razumljivo naslov, na primjer ime.
Odspojite uređaj sa računara, inače SD kartica u režimu masovne pohrane neće biti dostupna za Android i sve programe. (Pogodnije je koristiti program MyPhoneExplorer za komunikaciju sa računarom, koji vam omogućava da uređujete informacije o uređaju preko računara i SD kartica ostaje dostupna svima). Otvorite bilo koji upravitelj datoteka na svom uređaju i prijavite se najviše root imenik uređaja. Biće nekoliko direktorijuma. Pregledavajući njihov sadržaj, pronađite "svoj" folder u jednom od njih. Putanja koju upravitelj datoteka prikazuje prije root ovaj direktorij, i tu je ono što vam treba. Zapamtite ili zapišite. Na različitim uređajima i verzijama Androida moguće su različite opcije za lokaciju i naziv foldera SD kartice. Ako postoji folder mnt na primjer mnt/sdcard , ili mnt/external_sd , ili mnt/extSdcard . Fascikle na nekim uređajima mnt možda neće biti. U ovom slučaju, folder montiran na karticu obično leži direktno u korijenu uređaja, ovako: /sd kartica ili /sdcard1 ili /extSdcard . Na Android verzijama 4. i novijim, ovaj folder se obično nalazi: pohrana/SD kartica ili pohrana/SD kartica1 ili pohrana/spoljni_sd ili storage/extSdcard .
Dakle, recimo da smo utvrdili da je naša SD kartica montirana kao /mnt/external . To je upravo put koji treba da unesete (ili bolje da izaberete otvaranjem dijaloga datoteke pomoću dugmeta […]) kada prvi put pokrenete program pre nego što se pojavi meni.

Pokrenite funkcije na Androidu 4.4 i novijim

Na Androidu 4.4 i novijim verzijama, dozvola aplikacije za pisanje na SD karticu je uklonjena. Ako proizvođač nije ispravio firmver tokom sastavljanja, tada aplikacija na uređaju bez root-a neće moći pisati na SD karticu. U tom slučaju, sam program će pokušati pronaći gdje da smjesti radni direktorij. Najvjerovatnije će to biti direktorij u odjeljku podataka aplikacije interne memorije (non-storage) uređaja.
U tom slučaju, program će raditi, podaci će biti upisani u mapu rad , čitajte odatle. Ali korisnik neće moći ništa uzeti iz foldera rad ili stavite nešto unutra. Naravno, govorimo o uređaju bez root-a. Ako ovo stanje odgovara korisniku, onda ništa drugo ne treba raditi. U suprotnom ćete morati raditi rukama.
Moramo pronaći mjesto na uređaju gdje program može pisati podatke, a mi možemo uzeti te podatke odatle i dodati svoje ako je potrebno.
Eksperimentalno uspio pronaći takvo mjesto. Postupak instalacije:

1. Uređaj povezujemo USB kablom sa računarom i kreiramo ga u direktorijumu interna memorija folder Podaci . Ili u samom uređaju radimo isto pomoću upravitelja datoteka. Put mora biti storage/sdcard0/Data . U folder Podaci stavi fajl .nomedia .
Pažnja! Svi pokušaji kreiranja foldera rad(vidljivo i može se uređivati ​​na računaru) na drugim lokacijama/folderima interne memorije neuspješno. Možete kreirati, pa čak i kada prvi put pokrenete SAS4Android, možete odrediti putanju do željene mape. Ali nakon instalacije, pristup ovoj mapi postaje nemoguć. Uređaj možete vidjeti preko upravitelja datoteka, ali dodavanje nečega (trake, novi licencni ključ, konfiguracije mape/sloja, itd.) sa izmjenjive kartice ili računara, kao i kopiranje na prijenosnu karticu ili računar je nemoguće.
Zašto je odabrano ime za folder "Podaci" ? Trik je u tome što odgovara imenu Podaci , prihvaćen u standardnoj terminologiji uređaja, a osim toga, Android razlikuje velika i mala slova. Kao rezultat toga, Android sistem ovaj folder doživljava kao svoj i ne ograničava njegov sadržaj u pravima.

Evo već pripremljenog dokazanog načina da zaobiđete ograničenja Androida 4.4x. Korisniku nije zabranjeno eksperimentirati s lokacijom i imenom ove mape.

Sada folder koji smo kreirali storage/sdcard0/Data će igrati ulogu, put do koje se mora specificirati kada prvi put pokrenete program.
2. Kreirajte u korijenu vanjski Fascikla SD kartice SAS4Android , au ovom folderu - folder skladiste . Stavili smo keš tamo. Put do keša će biti .
3. Prilikom prvog pokretanja, program će tražiti put do korijena SD kartice. Navedite putanju do mape koju smo kreirali: storage/sdcard0/Data . U folderu Podaci program će kreirati folder SAS4Android , a u njemu i folder rad sa standardnim osnovnim skupom datoteka. Sada će svi radni fajlovi programa biti smešteni u fasciklu storage/sdcard0/Data/SAS4Android/work i imaćemo pristup njima.
4. Sada treba da kažete programu putanju do keš memorije, pošto se razlikuje od podrazumevane putanje. Da biste to učinili, u pokrenutom programu unesite Postavke - Mapa cache direktorija i koristite dijalog datoteke da odredite putanju storage/sdcard1/SAS4Android/cache .Instalacija završena.
#!!! Brojne provjere su pokazale da se ovom instalacijom SAS4Androida u uređaje koji koriste Android 4.4.4, uz daljnje nadogradnje ili čak potpuno uklanjanje i ponovnu instalaciju aplikacije, direktorij storage/sdcard0/Data ostaje radna, zadovoljna rad nije izgubljen ili pokvaren, pristup uređivanju rad i preko uređaja i preko računara je otvoren. Testirano na Sony Xperia Z, kao i Z3 compact i WinXP/Win7.
#!!! To je radni direktorij rad je primoran da se pojavi na internoj memoriji uređaja, postoji jedan značajan plus - u slučaju kvara / ispadanja SD kartice na terenu, a to se može dogoditi svakome, gubite (privremeno) samo keš memoriju, i zapisnik i drugi sadržaji rad ostati netaknut i raditi.
Savjet : uvijek je dobro imati ekstremnu sigurnosnu kopiju - periodično, nakon pojavljivanja važnih novih staza i tačaka, kopiram/sačuvam ovaj izmijenjeni rad rad na SD karticu u izvorni folder SAS4Android, pored skladiste . Tamo rad, naravno, ne radi - to je samo spremanje. I odjednom zvijer pokvari - tada će kartica pomoći u djelomičnom oporavku.

#!!! U Androidu 4.4.x (ako proizvođač nije ispravio firmver tokom sklapanja) online swap mapiranje podataka u nekomprimiranu keš memoriju od usluga trećih strana koristeći skripte napisane u JavaScript-u, bez root-a moguće samo u internu memoriju. Za preuzimanje keš memorije online morat ćete dodatno kreirati drugi folder skladiste u radnom direktoriju programa storage/sdcard0/Data/SAS4Android/ i stavite u njega unaprijed potreban broj foldera s nazivima izvora mapa/slojeva i sa skriptama smještenim u njima. Morat ćete se naviknuti na prebacivanje između dva direktorija keš memorije ovisno o trenutnim potrebama: raditi bez zamjene - s glavnim skladiste , a sa zamjenom - prebacite na skladiste u internoj memoriji.

Izađite u meni postavki programa.

Nakon pokretanja programa, izađite u meni podešavanja pritiskom na sistemsko dugme „Meni“. To može biti ili hardversko dugme ili dugme na ekranu na dnu ekrana ( tri vertikalne tačke). Ovisno o vašem uređaju i verziji Androida na njemu, ovo može biti ili hardversko dugme ili dugme na ekranu na dnu ekrana. Na mnogim novim uređajima sa Android verzijama 4 i novijim, ovo dugme je kombinovano sa dugmetom za listu pokrenutih aplikacija ( dva poravnata pravougaonika). U ovom slučaju, dovoljno je da izađete iz menija pritisnite i držite dugme pokrenutih aplikacija dok se ne pojavi meni podešavanja.

Karakteristike omogućavanja i onemogućavanja SAS4Android

Kada se program pokrene, svi režimi su uključeni: prikaz karata, navigacija, snimanje dnevnika puta (pokretanje usluge). Moguće je izaći iz aplikacije (prebaciti je u stanje mirovanja) bez zaustavljanja usluge, tj. unose u dnevnik praćenja. U zavisnosti od podešavanja (režim snimanja evidencije staza, režim zaustavljanja usluge), ako je potrebno, pokrenite bilo koji drugi program, uputite ili odgovorite na poziv dok čuvate pokrenutu uslugu, koristite ili dugme nazad, ili dugme "home" u obliku kućice.

Za zaustavljanje usluge, u zavisnosti od podešavanja, koristite dupli klik na dugme "Nazad", ili spustite "zavesu", na listi pokrenutih aplikacija, kliknite na liniju SAS4Android, pritisnite dugme Stani.

#!!! Kod tableta se najčešće statusna traka nalazi na dnu. Na njegovoj desnoj strani su grupisane ikone pokrenutih aplikacija. Ako kliknete na bilo koju ikonu, pojavit će se prozor sa ravnalom sa ikonama "Brze postavke" (zvuk, WiFi svjetlina, BT, mreža, lokacija itd.), a ispod je red po red lista pokrenutih aplikacija .

Karakteristike distribucije programa

Program SAS4Android distribuiraju besplatno.

Ograničenje trajanja aplikacije - napomena autora.

Nakon uzastopnog i zlonamjernog kršenja autorskih prava od strane nekih nepoštenih dilera navigatora, autor je morao uvesti ograničenje - nakon instaliranja (ili sljedećeg ažuriranja) programa SAS4Android radi ispravno 1 mjesec od datuma ažuriranja, a zatim se djelimično "pokvari" - pokvaren. Ovo se izražava u smanjenju vremena neprekidnog snimanja traga (obično u roku od 20-30 minuta), nakon čega se snimanje zaustavlja, a na ekranu se pojavljuje odgovarajuća poruka. Zatim ostaje samo ponovo pokrenuti program (zatvorite aplikaciju i uslugu i ponovo ih pokrenite). I tako nepredvidiv broj puta do kraja putovanja. Numere se snimaju, ali sa pauzama. Jednostavno, ali problematično rješenje ovog problema je redovno ažuriranje jednom mjesečno. Svako novo ažuriranje ima kasniji "truli" datum, pa ažurirajte i krenite...

Ali postoji bolji način.

Program sadrži algoritam za uklanjanje ograničenja - ključ licence.dat, koji onemogućuje "fading". Autor poklanja ključeve u znak zahvalnosti onima koji su podržali projekat. Zato ne pitajte "koliko" i "kako kupiti". Idite na bilo koju stranicu foruma i pažljivo pogledajte "zaglavlje".

Ključevi nisu na prodaju! Donacije sa bilo kakvim spominjanjem ključeva ili kupovine u komentarima će biti vraćene pošiljaocima.

Za generiranje ključa potrebna vam je datoteka deviceld.txt . Generiše ga sam SAS4Android program i stavlja ga u fasciklu rad .

Prvo provjerite je li datoteka na vašem uređaju deviceld.txt jesti.

Ako ga nema, tada neće biti moguće kreirati ključ za vaš navigator (nažalost, postoje neki ozbiljno skraćeni modeli na kojima ovaj mehanizam ne radi).

Ako imate fajl deviceld.txt prazan ili ne radi (ostalo od stare verzije programa prije vraćanja na fabrička podešavanja ili ažuriranja sistema).

1. Uklonite stari deviceld.txt .

2. Pokrenite program.

3. Čekamo da se sateliti uhvate (linija koordinata će postati crna).

4. Zatvorite program. U folderu bi se trebao pojaviti važeći ID rad .

Obratite pažnju na činjenicu da je ključ vezan za ID uređaja. Na Androidu, instaliranje ažuriranja sistema mijenja ID uređaja. Resetovanje na fabrička podešavanja takođe dovodi do ovoga. (Zašto? Pitajte proizvođače vašeg uređaja).

Dakle, ako ažurirate sistem ili izvršite resetovanje na fabrička podešavanja, ključ će prestati da radi.

Međutim, i ovo se može riješiti zamjenom ključa. Sva pitanja o uklanjanju ograničenja pitajte autora programa lično.

Mislim da su se svi suočili sa problemom zlih "autora". A postoji mnogo načina da se to riješi: softver otvorenog koda, skripte, "ples s tamburom" itd. Želim ponuditi jednostavan algoritam rješenja za korisnike OS Windows koji ne zahtijeva intervenciju treće strane. Da bismo postigli cilj, potrebno nam je nekoliko koraka – tačnije dva.

Korak #1 - priprema

Formatiranje sistema medijskih datoteka u NTFS koristeći OS.

Prilikom odabira opcija formatiranja ne postoji NTFS

Ako ne postoji opcija za formatiranje sistema datoteka u NTFS, što je slučaj na Windows XP-u, uradite sljedeće:

  1. Idite na svojstva fleš diska;
  2. Idite na karticu "Oprema";
  3. Odaberite našu flash karticu i kliknite na dugme svojstva;
  4. Idite na karticu "Politika";
  5. Odaberite opciju za korištenje keša;
  6. Prihvatite promjene i format u NTFS;
  7. Zatim se vraćamo na "Brzo brisanje".

Korak broj 2 - diferencijacija prava

Sada kreiramo fasciklu („radnu fasciklu“) u korenu i odmah postavljamo ime (nemoguće je promeniti ime fascikle u budućnosti), sve informacije će biti pohranjene u njemu. Ali korijen foldera će biti samo za čitanje. Sada razlikujemo prava:
  1. Idemo u sigurnost - otvorite svojstva fleš diska, karticu "Sigurnost";

    Ako ne postoji takva kartica, učinite sljedeće

    1. Idite na "Folder Options", koja se nalazi u "Control Panel";
    2. Na kartici Prikaz na listi "Napredne opcije" nalazimo parametar koji sadrži riječi "dijeljenje" i "(preporučeno)";
    3. Uklonimo daw.
    Kartica je sada
  2. Pritisnite dugme "Napredno";
  3. U prozoru koji se otvori idite na karticu "Vlasnik" i kliknite na dugme "Promeni";

    Za XP

  4. Označite kućicu "Zamijeni vlasnika podkontejnera i objekata";
  5. Sami biramo i postajemo vlasnik objekta;
  6. Zatvaramo dijaloške okvire na zahtjev OS-a sa tipkom "OK", a zatim ponovo otvaramo "sigurnost" i "napredno";
  7. Promijenite dozvole - da biste to učinili, idite na sigurnost i na kartici "Dozvole" kliknite na dugme "Promijeni dozvole", izbrišite postojeća prava;

    Za XP

    (u Windows XP ne postoji dugme "Promeni dozvole", tu delujemo odmah)

  8. Dodajte grupu "Sve" - ​​pritisnite dugmad "Dodaj", "Napredno", "Traži", izaberite grupu "Sve", "OK", "OK" sa liste;
  9. U prozoru koji se otvori postavite dozvole za grupu "Svi":
    • "Primijeni: Za ovaj folder, njegove podmape i datoteke";
    • Postavite sljedeće potvrdne okvire u polju "Dozvole":
      1. Dozvoli: "Puna kontrola";
      2. Zabraniti: "Promijeni vlasništvo", "Promijeni dozvole", "Izbriši", "Izbriši podfoldere i datoteke", "Piši dodatne atribute", "Piši atribute", "Kreiraj fascikle / dodaj podatke", "Kreiraj datoteke / upiši podatke".
  10. Prihvatamo promjene, idemo u prethodno kreiranu mapu u korijenu flash kartice i radimo gotovo iste operacije;
  11. Promjena vlasništva - prema poznatom obrascu;
  12. Uklanjanje postojećih prava tako što ćete poništiti izbor "Dodaj dozvole naslijeđene od nadređenih objekata" na kartici "Dozvole";
  13. U dijaloškom okviru koji se pojavi odaberite "Izbriši";
  14. Dodajte grupu "Svi" (već znamo kako) i postavite parametre dozvole:
    • "Primijeni: Za ovaj folder, njegove podmape i datoteke" ;
    • Postavite potvrdni okvir Dozvoli: "Potpuni pristup".
  15. Dodajte ponovo grupu "Svi" i postavite dozvole:
    • "Primijeni: samo za ovaj folder";
    • Postavite sljedeće okvire za potvrdu "Onemogući" u polju "Dozvole":
      Promjena vlasnika, promjena dozvola, brisanje, pisanje dodatnih atributa, pisanje atributa
pros
+ Ne postoji mogućnost kreiranja/brisanja fajlova i fascikli u korenu fleš kartice. Shodno tome, praznina za "autore" je zatvorena.
+ U "radnom folderu" puni pristup - ono što želimo, onda se vraćamo (naglasak uredite sami).
+ NFTS sistem datoteka - taman za ličnu upotrebu. (IMHO)
Minusi
- Ne postoji način da koristite stavku menija "Pošalji" za kopiranje informacija na naš USB fleš disk, jer. u korijenski direktorij nije moguće pisati. Mora se kopirati u "radni folder".
- Ne postoji način da se preimenuje "radni folder" - root je samo za čitanje.
- NTFS sistem datoteka - nije pogodan za uređaje koji čitaju samo FAT (muzički/video plejeri, pametni telefoni, kamere, itd.).
Napomene
  • Ovu operaciju je najbolje uraditi na "zdravoj mašini". A onda možete kreirati immortal-autorun;
  • Na Windows XP-u, kada sam pokušao da izbrišem „radni folder“, ostao je (kako i treba), ali je sve iznutra obrisano;
  • Ali na Window 7, sve datoteke ostaju kada pokušate da izbrišete "radni folder";
  • Unutar "radnog foldera" vas ne spašava od zlonamjernog softvera koji kreira exe s imenom foldera kada ga otvorite.

Različite informacije u elektronskom obliku mogu se pohraniti na posebnom uređaju koji se zove memorijska kartica. Dizajniran je za skladištenje tekstualnih dokumenata, audio i video zapisa, slika. Glavna prednost ove vrste memorije je jednostavnost snimanja informacija i kompaktnost uređaja, uz značajne količine pohranjenih podataka.

Interna memorija je predstavljena operativnom, trajnom i keš memorijom. Njegove prednosti uključuju brzinu, a nedostatak je ograničena količina pohranjenih podataka.

Vrlo često se savremeni korisnik personalnog računara i druge elektronske opreme mora suočiti s takvim prijedlogom: „instaliraj u korijen memorijske kartice” ili „kopiraj u korijen kartice”. Može se naći bilo gdje, jer moderna tehnologija sve više počinje podržavati kartice trećih strana za povećanje interne memorije.

Memorijske kartice su standardizirane. Imaju određene ukupne dimenzije i raspored kontaktnih površina u zavisnosti od vrste uređaja za koji su namenjeni.

Ovo uključuje laptope, tablete, pametne telefone, digitalne kamere, pa čak i PSP i druge konzole za igre. Stoga, za ispravan rad s njima, ne može se bez jasne ideje ​​šta može značiti izraz "korijen memorijske kartice" i gdje se može nalaziti.

Naziv mjesta za čuvanje podataka na kartici dolazi od engleske riječi root - "root, root", što označava nešto iskonsko, iskonsko. U upotrebu je ušao na samom početku, kada su se prvi put pojavili računari. Na njima se sam sadržaj uređaja nazivao root, odnosno mjesto odakle je sistem pokrenut i gdje su podaci mogli biti pohranjeni. Zapravo, s obzirom na trenutne memorijske kartice, ova oznaka se uopće nije promijenila.

Root direktorij

Danas se sam direktorij, koji se nalazi na kartici, naziva korijenom memorijske kartice. Ovo je isti folder koji se pokreće kada kliknete na ikonu memorijske kartice na pametnom telefonu ili . Samo što je riječ root prevedena doslovno, a sada se njen ruski pandan koristi za označavanje same kartice. Dakle, ako se od vas traži da kopirate podatke u root, onda ne morate kreirati ništa dodatno na memorijskoj kartici, već jednostavno kopirajte potrebne datoteke na nju, u korijenski direktorij.

Tada se pojavio Android Lollipop, a sa njim i nove mogućnosti za rad sa SD karticom. Pojavio se SAF(Storage Acces Framework), pojavila se nova namjera ACTION_OPEN_DOCUMENT_TREE, sa kojom možete odabrati root SD kartice i zatim je koristiti za svoje potrebe. U stvari, SAF je još uvijek bio na KitKat-u, ali bez ove Namjere je bio od male koristi, jer za pristup fajlovima na mapi morali ste koristiti Intent ACTION_OPEN_DOCUMENT, koji, sudeći po nazivu, omogućava korisniku da odabere fajl koji on želi uređivati, ručno putem birača sistema. U redu, ako korisnik ima 5000 fajlova, hoće li to učiniti? br.

Identifikujte eksterne disk jedinice na uređaju

Počeću od najbolnije teme u radu sa memorijskim karticama. Imamo divnu metodu u Androidu

Datoteka Environment.getExternalStorageDirectory()

Kao što ime govori, ovo je ono što vam treba. "Vanjski" - prevodi se kao "spoljašnji", zar ne? Ali ne biste se trebali oslanjati na ovu metodu. Može vratiti putanju do interne memorije, možda do karte, ali se to događa drugačije na svakom uređaju. Ova situacija se uglavnom razvila zbog različitih proizvođača telefona i njihovih modificiranih firmvera i školjki. Želim da kažem da metoda getExternalStorage() može vratiti putanju ne do prave SD kartice, već do one koju proizvođač smatra eksternim diskom. Tu dolazi do zabune u definicijama. Eksterni disk nije nužno fleš disk: na nekim uređajima to je interna memorija, na nekima je to zaista SD kartica. Tačke postavljanja karte mogu biti bilo koje:

  • /storage/extSdCard/
  • /storage/sdcard1/
  • /storage/sdcard0/
  • /mnt/external_sd/
  • /mnt/vanjski/
  • /mnt/sdcard2/
  • /storage/sdcard0/external_sdcard/
  • /storage/removable/sdcard1/
  • /removable/microsd
  • /mnt/media_rw/sdcard1
  • /mnt/emmc

I to nije neki veliki problem dok se sami s njim ne suočite.

Na StackOverflow-u postoji mnogo tema u kojima mnogo različitih opcija za određivanje fleš diska, počevši od ponavljanja svih mogućih kombinacija tačaka montiranja, pokušaja da se dobiju varijable Java okruženja System.getenv("EXTERNAL_STORAGE") , System.getenv(" SECONDARY_STORAGE") i završava raščlanjivanjem sistemske datoteke /system/etc/vold.fstab . Ove metode rade, ali svaka samo u nekom posebnom slučaju. Nijedna metoda ne pokriva sve uređaje ili uopće ne radi. A ako se čini da su svi diskovi ispravno otkriveni, uvijek će postojati neki uređaj na kojem kartica nije otkrivena ovim metodama. Isprobala sam skoro sve metode.

Da bih shvatio razmjere problema, reći ću da sam se njime bavio oko četiri mjeseca. Ovaj problem postoji od 2011. godine, ali još uvijek nema tačnog rješenja. Neko vrijeme sam bio zadovoljan ovim manje-više funkcionalnim kodom:

ArrayList allPaths = new ArrayList<>(); ArrayList sdPaths = novi ArrayList<>(); for (Datoteka: mContext.getExternalFilesDirs("external")) (if (datoteka == null) (nastavi; ) int index = file.getAbsolutePath().lastIndexOf("/Android/data"); if (indeks > 0 ) ( Putanja niza = file.getAbsolutePath().substring(0, indeks); pokušaj (put = nova datoteka(path).getCanonicalPath(); ) catch (Izuzetak e) ( e.printStackTrace(); ) allPaths.add( put); if (!file.equals(mContext.getExternalFilesDir("external"))) ( sdPaths.add(path); ) )

Ali se također srušio na nekim uređajima. I još jednom, pošto sam dobio jedinicu na tržištu, krenuo sam u potragu.

Proganjao me sistemski android picker (upravitelj datoteka sa skraćenim radnim vremenom), u kojem su svi diskovi uvijek ispravno identificirani. Bez razmišljanja dvaput, izvukao sam sistemski apk koristeći Root i dekompilirao ga.

uvid

Otkrio sam da birač koristi klase StorageVolume i StorageManager. Iterira kroz sve elemente StorageVolume dobijene metodom StorageManger.getVolumeList() i za svaki poziva metode StorageVolume.getPath() i StorageVolume.getState(). Kvaka je u tome što su ove metode skrivene. Oni nisu privatni, ali su označeni @hide napomenom. Pa, šta da radimo, dobijamo našu refleksiju:

StorageManager getStorageManager() ( return (StorageManager) mContext.getSystemService(Context.STORAGE_SERVICE); ) /* Koristi refleksiju za otkrivanje svih skladišta jer android to vjerovatno ne radi sa USB-OTG radi samo na API 19+ */ javna lista getAllPaths() ( Lista allPaths = new ArrayList<>(); probaj (razredstorageVolumeClass = Class.forName("android.os.storage.StorageVolume"); Metoda getVolumeList = getStorageManager().getClass().getMethod("getVolumeList"); Metoda getPath = storageVolumeClass.getMethod("getPath"); Metoda getState = storageVolumeClass.getMethod("getState"); Objekt getVolumeResult = getVolumeList.invoke(getStorageManager()); finalna dužina int = Array.getLength(getVolumeResult); za (int i = 0; i< length; ++i) { Object storageVolumeElem = Array.get(getVolumeResult, i); String mountStatus = (String) getState.invoke(storageVolumeElem); if (mountStatus != null && mountStatus.equals("mounted")) { String path = (String) getPath.invoke(storageVolumeElem); if (path != null) { allPaths.add(path); } } } } catch (Exception e) { e.printStackTrace(); } return allPaths; }

Što postavlja pitanje, zašto ne postoji službeni način da se to uradi? Da, korištenje refleksije u borbenom projektu nije sasvim pouzdano, ali nema drugih opcija: ako sam sistem koristi ovaj kod, onda radi u svim slučajevima. Praksa to potvrđuje.

SAF (Storage Access Framework)

Službena dokumentacija:

SAF platforma olakšava korisnicima pronalaženje i otvaranje dokumenata, slika i drugih datoteka u spremištima svih dobavljača s kojima rade. Standardno korisničko sučelje omogućava korisnicima da koriste isti način za sve aplikacije i provajdere za traženje datoteka i pristup najnovijim dodanim datotekama.

p>SAF agregira dobavljače sadržaja (podklase klase DocumentProvider). To su, na primjer, Google Drive, razne galerije i upravitelji datoteka.

SAF izdaje URI dokumenata (fajlova) koji imaju dozvole za pisanje ili čitanje. Možemo reći da je ovo takav sloj iznad pristupa fajlu. Sama po sebi, klasa File ne zna ništa o SAF-u.

p> Da biste mogli uređivati ​​podatke na mapi, potrebno je da dobijete URI korijena SD kartice koja će imati prava uređivanja. Nadalje, koristeći ovaj URI, možete dobiti URI bilo koje datoteke na memorijskoj kartici. Da biste to učinili, trebate pokrenuti birač sistema koristeći Intent ACTION_OPEN_DOCUMENT_TREE i zamoliti korisnika da odabere korijen SD kartice (inače ništa neće raditi!).

na slikama:


@TargetApi(Build.VERSION_CODES.LOLLIPOP) void showDocumentTreeDialog() ( Namjera namjera = nova namjera(Intent.ACTION_OPEN_DOCUMENT_TREE); startActivityForResult(Intent.createChooser(intent, getString(R.string.permission_intent)),REDE CORPISSION_UEST_C);

Ovdje se dešavaju vrlo važne stvari: u onActivityResult obrađujemo izbor korisnika i stičemo njegovana prava za pristup mapi. Općenito, prava se daju do ponovnog pokretanja uređaja, a kako se korisnik ne bi ponovo slao po dozvolu nakon ponovnog pokretanja uređaja, potrebno je koristiti metodu

TakePersistableUriPermission(Uri uri, int modeFlags)

c zastavice za pisanje i čitanje. Nakon svih ovih mahinacija, primljenu SD karticu Uri morate sačuvati negdje za daljnji rad s njom, na primjer, u SharedPreferences.

@RequiresApi(api = Build.VERSION_CODES.KITKAT) @Override zaštićeni void onActivityResult(int requestCode, int resultCode, intent podaci) ( super.onActivityResult(requestCode, resultCode, podaci); if (requestCode == REQUEST_CODE_CODE_SD_CARD == &&RESultCode_CARD takePermission(getApplicationContext(), data.getData())) ( //radi svoje stvari ) ) @RequiresApi(api = Build.VERSION_CODES.KITKAT) privatni boolean takePermission(kontekst konteksta, Uri treeUri) ( /* Bilo bi korisno dodaj ček Ostaviću ovaj zadatak kao vježbu za čitaoce */ probaj ( if (treeUri == null) ( vrati false; ) context.getContentResolver().takePersistableUriPermission(treeUri, Intent.FLAG_GRANT_WRITE_URI_PERMISSION | Intent.FLAG_GRANT_PERSHA) .putString(SD_CARD_URI,treeUri.toString()); vrati true; ) catch (Izuzetak e2) ( e2.printStackTrace(); return false; ) )

Interakcija sa SD karticom

Čitalac verovatno već pretpostavlja da nećemo moći da komuniciramo sa fajlovima (poput file.renameTo(file2)) na normalan način. Ako pogledamo kod metode file.renameTo(File), nećemo vidjeti ništa sumnjivo, nikakve provjere. I s pravom, jer su provjere na nivou sistema datoteka. A ako pokušamo promijeniti datoteku koja se nalazi na SD kartici na uobičajen način, dobit ćemo sljedeći izuzetak:

Java.io.IOException: Ne mogu napraviti promjene u datoteci your_file.ext

Evo zanimljivog načina da odredite da li se datoteka može mijenjati:

Javni boolean isFileWritable(File file) (boolean upisiv; pokušajte (novi FileOutputStream(file, true).close(); writable = file.exists() && file.canWrite(); ) catch (IOException e) (writable = false; ) vrati upisiv; )

Ako je datoteka na mapi, dobit ćemo IOException.

Da bismo modificirali datoteku na memorijskom sticku, moramo dobiti DocumentFile koji predstavlja našu datoteku, ali sa dozvolama za pisanje koje smo dobili sa SAF-om.

Na početku članka sam govorio o dvije namjere za SAF: ACTION_OPEN_DOCUMENT_TREE i ACTION_OPEN_DOCUMENT . I rekao sam da nećemo koristiti drugu namjeru, jer to prisiljava korisnika da ručno traži datoteku. Ali imamo URI, koji smo dobili koristeći prvu namjeru, a to znači... Ne, ne postoji standardni API za dobivanje DocumentFile-a, sve se obrađuje.

Algoritam je ovaj:

  1. Imamo File
  2. Odredite naziv disk jedinice na kojoj se nalazi ova datoteka
  3. Odredite putanju datoteke u odnosu na disk na kojem se nalazi. Dobijamo liniju poput android/folder/file.txt
  4. Odvajanje niza simbolom «/»
  5. Petlja za svaki primljeni dio, pronađite DocumentFile koji predstavlja tu putanju, na osnovu DocumentFile-a za prethodni dio
  6. Ako je algoritam završen bez grešaka, imamo DocumentFile koji predstavlja našu datoteku kao izlaz

Public DocumentFile getDocumentFile(File file) (DocumentFile document = null; String baseFolder = null; for (Putanja niza: getAllPaths()) (File filePath = new File(path); if (filePath.getAbsolutePath().startsWith(file.getAbsolute ())) ( baseFolder = filePath.getAbsolutePath(); break; ) ) if (baseFolder == null) (vrati null; ) pokušajte ( String relativePath = file.getCanonicalPath().substring(baseFolder.length() + 1) ; Uri permissionUri = Uri.parse(sharedPreferences.getString(SD_CARD_URI)); document = getDocumentFileForUri(permissionUri,relativPath); ) catch (Exception e) ( e.printStackTrace(); ) return document; ) /* Metoda za dobivanje DocumentFile ( koraci 4-6) */ private DocumentFile getDocumentFileForUri(Uri treeUri, String relativePath) ( String parts = relativePath.split("/"); if (parts.length == 0) (vrati null; ) DocumentFile dokument = DocumentFile.fromTreeUri (mContext, treeUri); for (Dio niza: dijelovi) (DocumentFile nextDocument = document.fi ndFile(dio); if (nextDocument != null) ( document = nextDocument; ) ) vrati dokument; )

FileOutputStream outputStream = (FileOutputStream) mContentResolver.openOutputStream(documentFile.getUri());

Primjer kopiranja datoteke klase File u DocumentFile:

Public void copyFile(File sourceFile, DocumentFile dokument) (FileInputStream inputStream = null; FileOutputStream outputStream = null; pokušajte ( inputStream = new FileInputStream(sourceFile); outputStream = (FileOutputStream) mContentResolputStream) mOpennelResolputCeam(FileOutputStream). inputStream.getChannel(); FileChannel fileChannelOut = outputStream.getChannel(); fileChannelIn.transferTo(0, fileChannelIn.size(), fileChannelOut); //noinspection ResultOfMethodCallIgnored sourceFile.delete(); ) catch) (IOckTraceprint) (IOckTraceception) (); //noinspection ResultOfMethodCallIgnored sourceFile.delete(); ) konačno ( pokušajte ( if (inputStream != null) inputStream.close(); if (outputStream != null) outputStream.close(); ) uhvatiti (IOException e) (e.printStackTrace(); ) ) )

I također želim reći da će sada kod biti ispunjen takvim provjerama

Public void writeFile(File file) (boolean fileWritable = isFileWritable(file); boolean hasSdCardUri = !sharedPreferences.getString(SD_CARD_URI).isEmpty(); if (fileWritable || hasSdCardUri) ( /* možete normalno ili SAF uređivati ​​datoteku */ return; ) if (Build.VERSION.SDK_INT >= 21) ( /* dobrodošli! (pitaj korisnika za dozvolu) */ izbaci novi NoLollipopWritePermissionException(); ` ) else if (Build.VERSION.SDK_INT == 19) ( / * zbogom (ne mogu uređivati) */ izbaciti novi NoKitkatWritePermissionException(); ) )

Zaključak

Nadam se da će moje iskustvo opisano u članku pomoći onima koji još nisu radili sa SD karticom da izbjegnu dugo istraživanje i traženje.

Gdje se nalazi korijenski folder fleš diska ili memorijske kartice?

    Ako povežete bilo koji uređaj za skladištenje na računar, on će se pojaviti u Exploreru kao disk jedinica sa dodijeljenim engleskim slovom, ako otvorite ovaj disk, ovo će biti root folder. Možete kreirati druge foldere u njemu, u svakom od tih foldera možete redom kreirati druge foldere i tako dalje, au svakom folderu postoje fajlovi. Ovo se može zamisliti kao stablo sa deblom i granama koje se protežu iz njega - folderi - grane, fajlovi - listovi, a korijen ovog stabla je samo korijenski folder, otuda i naziv.

    Root folder nazivamo samo folderom određenog fleš diska ili memorijske kartice. Čim ubacite USB fleš disk, pred vama se prikazuje novi uređaj, otvaranjem kojeg prelazite u root folder diska (u root, znači u početni), koji može sadržati gomila drugih foldera.

    Korijen folder bilo kojeg diska je glavni folder tog pogona.

    Odnosno, kada se nalazite u root folderu diska, za vas izgleda kao da niste ušli ni u jednu fasciklu.

    To jest, adresa korijenskog foldera je:

    disk jedinice A: i B: su obično rezervisane za flopi disk jedinice (za flopi diskove), koje često više nisu instalirane u modernim računarima.

    za čvrsti disk, ovo je obično C:

    često rezervisan za DVD plejer je D:

    Ostatak se obično koristi za povezane vanjske uređaje.

    Na primjer, za fleš disk.

    Ali mislim da ne moraju biti tim redom. Neko na računaru može imati drugačiji redosled za uparivanje uređaja i imena diskova. Uđite u odjeljak Moj kompjuter(ako imate Windows) i vidjet ćete kako se nalazi za vas.

    Osnovni folder stranice ima sljedeću adresu: http://sitename/

    Iako je za kreatora sajta, na njegovom hostingu, isti folder najčešće predstavlja samo poddirektorijum, jer tu možete kreirati nekoliko sajtova, plus se pohranjuju različita podešavanja konfiguracije.

    Root folder se smatra folderom samog fleš diska, ili programa, ili diska. Odnosno, možda postoje i drugi (podfolderi). To jest, korijen znači original. A ako je, na primjer, naznačeno da se, na primjer, datoteka mora prevući u korijenski direktorij fleš diska, onda je samo trebate postaviti na sam flash pogon, a ne u neku drugu mapu na ovom flashu voziti. I također po analogiji s drugim resursima.

    Šta je root folder i kako do njega doći?

    U stvari, sve je vrlo jednostavno, root folder je folder koji se smatra originalnim. Ako, na primjer, uključite svoj fleš disk u uređaj, tada će vam se pojaviti meni kroz koji možete ići u korijensku mapu = ovo je sam fleš disk, u kojem mogu biti i mape i datoteke.

    Vrlo često možete čuti ili naići na frazu: instaliraj / premjesti / kopiraj određenu datoteku u korijen memorijske kartice ili u korijensku mapu fleš karticequot ;. Ali šta je i gdje je root folder ili samo root fleš diskovi?

    Odgovor je zapravo vrlo jednostavan. Ovo ime dolazi od korijenski direktorijquot ;. Odnosno, kada kliknemo na ikonu memorijske kartice / fleš kartice i pred nama se otvori prozor - ovo je isti root folderquot ;. Iako u stvari folder mi to tamo ne vidimo. Ovo je samo područje mape s drugim datotekama i drugim folderima smještenim na njemu. Root folder (ili root) fleš diska može se uporediti sa gornjim podom u hijerarhiji svih foldera na njemu.

Top Related Articles