Potrebna je dozvola za pisanje u vanjsku pohranu. Pohrana datoteka

Facebook Google Plus Pristup odbijen ili problem sa dozvolom za pristup datoteci/fascikli na eksternom disku

Ponekad kada povezujete eksterni disk sa računarom koji radi pod operativnim sistemom Windows 2000 Pro, XP ili Vista, morate da dodelite dozvole/privilegije. Budući da su fajlovi u vlasništvu drugog naloga, možda ćete dobiti grešku "Pristup odbijen" ili "Nedostupan" kada pokušate da otvorite disk ili fasciklu na njemu.

U nastavku pogledajte informacije o prijenosu vlasništva na trenutnog korisnika u XP Professional-u. Ova uputstva se odnose i na Windows Vista.
(XP Home.)

Za prijenos vlasništva na trenutnog korisnika u Windows XP HOME:

  • Pokrenite u Safe Mode.
  • Kliknite desnim tasterom miša na željenu datoteku/folder i otvorite odeljak Svojstva.
  • Kliknite Sigurnost > Napredno > Vlasnik i odaberite korisnički račun na računaru za koji želite da posjedujete ove datoteke i mape.
    Označite potvrdni okvir "Zamijeni vlasnika na podkontejnerima i fasciklama" kako biste dozvolili svim datotekama u fascikli da naslijede promjene (samo kada se dozvole za foldere promijene).
  • Ako dobijete poruku "Nemate dozvolu čitati sadržaj foldera [ naziv foldera]. Želite li promijeniti dozvole za ovaj folder tako da imate prava pune kontrole? Sve dozvole će biti zamijenjene ako kliknete na dugme "Da". Kliknite na dugme Da.
  • Pogledajte sljedeće članke Microsoft centra za podršku:

    Ako ne možete promijeniti dozvole, provjerite da li su vaše datoteke šifrirane pomoću funkcije Windows šifriranja. Umjesto uobičajene crne, imat će zeleni font:

    Da biste oporavili ove datoteke, potrebno je da ponovo povežete disk sa originalnim računarom. Datoteke su šifrirane bez korištenja softvera Seagate. Za više informacija pogledajte sljedeće članke Microsoftove baze znanja:

    Konačno, struktura datoteke može biti oštećena.

    • Pokrenite provjeru diska da pokušate popraviti oštećenje.
    • Ako je particija oštećena, slijedite gore opisane korake.

    INDIKACIJA TREĆIH PROGRAMERA I WEB STRANICA. Seagate identifikuje programere trećih strana i proizvode trećih strana samo u informativne svrhe i ne daje prednost niti preporučuje (direktno ili indirektno) nijednu od pomenutih kompanija. Seagate ne daje nikakve garancije bilo koje vrste (uključujući implicitne ili druge) u pogledu performansi ili pouzdanosti takvih kompanija ili proizvoda. Seagate nije povezan niti kontroliše nijednu od pomenutih kompanija i stoga ne preuzima nikakvu odgovornost u vezi sa njima i odriče se bilo kakve odgovornosti u vezi sa radnjama ili proizvodima pomenutih kompanija. Molimo izvršite vlastitu nezavisnu procjenu prije nego počnete poslovati s bilo kojom kompanijom. Za specifikacije i informacije o garanciji kontaktirajte direktno odgovarajućeg proizvođača. Ovaj dokument sadrži veze ka web lokacijama trećih strana koje Seagate ne kontrolira. Takvi linkovi su dati kao pogodnost i koriste se na vlastitu odgovornost korisnika. Seagate ne daje nikakve garancije ili odobrenja u vezi sa materijalima koji se nalaze na takvim web stranicama i ne preuzima nikakvu odgovornost za njih ili za korištenje takvih web stranica.

    Android sistem datoteka je vrlo sličan sistemima datoteka zasnovanim na disku koji se koriste u drugim sistemima. Ovaj vodič objašnjava kako raditi s Android sistemom datoteka, čitati i pisati datoteke koristeći klasu File.

    Biranje između interne i eksterne memorije

    Svi Android uređaji imaju dva prostora za pohranu datoteka: eksternu i internu memoriju. Ova imena su ostala od prvih Android uređaja. Većina uređaja koristila je hlapljivu memoriju (interna memorija) i prenosive uređaje kao što su microSD kartice (vanjska memorija). Na nekim uređajima trajni skladišni prostor je podijeljen između internih i eksternih particija, tako da ćemo i bez SD kartica imati i „unutrašnji“ i „eksterni“ prostor. U ovom slučaju, za API nije važno da li se vanjski prostor nalazi na prenosivom uređaju ili ne. Lista pruža opšte činjenice o obe vrste prostora:

    • Interna pohrana:
    • Uvijek na raspolaganju.
    • Podrazumevano, pristup datotekama je dozvoljen samo aplikacijama koje su kreirale datoteke.
    • Kada deinstalirate aplikaciju, svi fajlovi aplikacije se brišu iz interne memorije.
    • Interna pohrana je bolja ako želite biti sigurni da druge aplikacije neće pristupiti vašim podacima.
    • Eksterna pohrana:
    • Nije uvijek dostupno jer korisnik može ukloniti izmjenjivu memoriju iz uređaja.
    • Datoteke može čitati bilo koja aplikacija.
    • Kada deinstalirate aplikaciju, datoteke će biti izbrisane samo ako ste ih spremili u direktorij koji ste dobili metodom getExternalFilesDir().
    • Eksterna pohrana je odlično mjesto za datoteke kojima nije potrebna velika privatnost. Eksterna memorija također može pohraniti datoteke koje se mogu otvoriti na korisnikovom računalu ili one koje želite koristiti u nekoliko aplikacija odjednom.
    Dobivanje dozvola za eksternu pohranu

    Da pišete u vanjsku pohranu, morate zatražiti prava WRITE_EXTERNAL_STORAGE u manifest datoteci:

    ...

    < manifest . . . >

    < uses - permission android : name = "android.permission.WRITE_EXTERNAL_STORAGE" / >

    . . .

    < / manifest >

    Pažnja: Trenutno sve aplikacije imaju dozvolu za čitanje datoteka sa eksterne memorije bez dobijanja posebne dozvole. Međutim, to će se promijeniti u budućim verzijama. Ako vaša aplikacija mora čitati datoteke iz vanjske memorije (ali ne i pisati), mora joj se dodijeliti dozvola READ_EXTERNAL_STORAGE. Kako biste osigurali da vaša aplikacija uvijek radi kako očekujete, najavite dozvole za čitanje sada kako ne biste morali brinuti o tome u budućnosti:

    ...

    < manifest . . . >

    < uses - permission android : name = "android.permission.READ_EXTERNAL_STORAGE" / >

    . . .

    < / manifest >

    Međutim, ako vaša aplikacija koristi dozvolu za pisanje WRITE_EXTERNAL_STORAGE, dozvole za čitanje će biti implicitno postavljene.

    Ne morate pribavljati nikakve dodatne dozvole za spremanje datoteka u internu memoriju. Aplikacije uvijek imaju dozvole za pisanje i čitanje iz internih memorijskih direktorija.

    Spremanje fajlova u internu memoriju

    Prilikom spremanja datoteka u internu memoriju, možete dobiti odgovarajući direktorij kao objekt tipa File pozivanjem jedne od metoda:

    getFilesDir() Vraća objekt File koji predstavlja direktorij interne memorije za vašu aplikaciju. getCacheDir() Vraća objekt File koji predstavlja interni memorijski direktorij za pohranjivanje privremenih keš datoteka. Obavezno izbrišite sve datoteke čim vam više ne trebaju i postavite razumno ograničenje količine memorije koju koristite u bilo kojem trenutku, kao što je 1 MB. Ako vašem sistemu ponestane prostora za pohranu, može izbrisati vaše privremene datoteke bez upozorenja.

    Da biste kreirali novu datoteku u jednom od direktorija, možete koristiti File() konstruktor, prosljeđujući mu objekt tipa File koji je dobiven korištenjem odgovarajuće metode:

    Datoteka datoteka = nova datoteka(context.getFilesDir(), naziv datoteke);

    Datoteka datoteka = nova datoteka(kontekst. getFilesDir(), naziv datoteke);

    Također možete koristiti metodu openFileOutput() da dobijete FileOutputStream objekat koji upisuje datoteku u interni direktorij. Primjer pisanja teksta u datoteku:

    String filename = "myfile"; String string = "Zdravo svijete!"; FileOutputStream outputStream; pokušajte ( outputStream = openFileOutput(filename, Context.MODE_PRIVATE); outputStream.write(string.getBytes()); outputStream.close(); ) catch (Izuzetak e) ( e.printStackTrace(); )

    String filename = "myfile" ;

    String string = "Zdravo svijete!" ;

    FileOutputStream outputStream ;

    probaj (

    outputStream = openFileOutput (ime datoteke, kontekst. MODE_PRIVATE);

    outputStream. write(string. getBytes());

    outputStream. zatvori();

    ) uhvatiti (izuzetak e) (

    e. printStackTrace();

    Ili ako trebate kreirati privremenu datoteku, koristite createTempFile() . U sljedećem primjeru, metoda dobiva naziv datoteke iz URL-a i kreira datoteku s navedenim imenom u internom privremenom direktoriju:

    javna datoteka getTempFile(kontekst kontekst, string url) (datoteka; pokušajte (string fileName = Uri.parse(url).getLastPathSegment(); file = File.createTempFile(fileName, null, context.getCacheDir()); catch (IOException e) ( // Greška pri kreiranju datoteke ) vrati datoteku )

    javna datoteka getTempFile(kontekst kontekst, string url) (

    File file ;

    probaj (

    String fileName = Uri . parse(url) . getLastPathSegment();

    fajl = Fajl . createTempFile(fileName, null, context. getCacheDir());

    uhvatiti (IOException e) (

    // Greška pri kreiranju datoteke

    povratni fajl ;

    Napomena: Lokacija internog direktorija za pohranu vaše aplikacije u Android sistemu datoteka ovisi o nazivu paketa. Tehnički, druga aplikacija može čitati vaše interne datoteke ako postavite način pristupa na čitanje. Međutim, druga aplikacija će također morati znati naziv paketa vaše aplikacije i ime same datoteke. Druge aplikacije ne mogu vidjeti sadržaj interne memorije i nemaju dozvolu za čitanje ili pisanje osim ako je izričito navedeno da se datoteka može čitati ili pisati. Dakle, sve dok koristite oznaku MODE_PRIVATE za svoje datoteke u internoj memoriji, one neće biti dostupne drugim aplikacijama.

    Spremanje fajlova na eksternu memoriju

    Budući da eksterna pohrana možda neće biti dostupna – na primjer, kada povežete svoj uređaj sa računarom ili uklonite SD karticu – uvijek biste trebali provjeriti dostupnost particije prije nego što pokušate da je koristite. Možete postaviti upit o stanju eksterne memorije koristeći metodu getExternalStorageState(). Ako je metoda vratila stanje jednako MEDIA_MOUNTED, možete čitati i pisati svoje datoteke. Primjer metode za provjeru dostupnosti eksterne memorije:

    /* Provjerava dostupnost memorije za čitanje i upisivanje*/ public boolean isExternalStorageWritable() ( String state = Environment.getExternalStorageState(); if (Environment.MEDIA_MOUNTED.equals(state)) ( return true; ) return false; ) /* Provjerite eksterna memorija za dostupnost čitanja */ public boolean isExternalStorageReadable() ( String state = Environment.getExternalStorageState(); if (Environment.MEDIA_MOUNTED.equals(state) || Environment.MEDIA_MOUNTED_READ_ONLY.equals) ( return true false )

    /* Provjerite dostupnost memorije za čitanje i pisanje*/

    public boolean isExternalStorageWritable() (

    if (Okruženje. MEDIA_MOUNTED. jednako (stanje)) (

    return true ;

    return false ;

    /* Provjerite čitljivost eksterne memorije */

    public boolean isExternalStorageReadable() (

    String stanje = okruženje. getExternalStorageState();

    if (Okruženje. MEDIA_MOUNTED. jednako (stanje) ||

    Životna sredina. MEDIA_MOUNTED_READ_ONLY . jednako (stanje) ) (

    return true ;

    return false ;

    Iako sadržaj vanjske memorije može mijenjati korisnik ili druga aplikacija, postoje dvije kategorije datoteka koje možete pohraniti u nju:

    Javne datoteke Datoteke koje bi trebale biti dostupne drugim aplikacijama i korisnicima. Nakon što se aplikacija deinstalira, ove datoteke bi trebale ostati dostupne korisniku. To su, na primjer, fotografije snimljene u vašoj aplikaciji ili preuzete datoteke. Privatni fajlovi Datoteke koje s pravom pripadaju aplikaciji i treba ih izbrisati zajedno sa aplikacijom. Iako su ove datoteke tehnički dostupne korisniku i drugim aplikacijama jer se nalaze u vanjskoj memoriji, one zapravo ne izlažu svoje podatke izvan aplikacije. Kada deinstalirate aplikaciju, svi takvi fajlovi će također biti izbrisani. To su, na primjer, privremene medijske datoteke.

    Ako želite da sačuvate javne datoteke u eksternu memoriju, koristite metodu getExternalStoragePublicDirectory() da biste dobili objekat File koji odgovara direktorijumu. Kao argument, metoda uzima tip fajla koji želite da sačuvate, logično se može organizovati sa drugim javnim fajlovima, na primer direktorijumima muzike (DIRECTORY_MUSIC) ili slika (DIRECTORY_PICTURE). Na primjer:

    public File getAlbumStorageDir(String albumName) ( // Dobivanje javnog direktorija slika File file = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), albumName); if (!file.mkdirs()) ( Log.e(LOG_TAG, "Direktorijum nije kreiran");

    javna datoteka getAlbumStorageDir(String albumName) (

    // Dobivanje javnog kataloga slika

    Datoteka fajl = nova datoteka(Okruženje. getExternalStoragePublicDirectory(

    Životna sredina. DIRECTORY_PICTURES), naziv albuma);

    if (! fajl . mkdirs () ) (

    Dnevnik. e(LOG_TAG, "Direktorij nije kreiran");

    povratni fajl ;

    Ako želite pohraniti privatnu datoteku aplikacije, koristite metodu getExternalFilesDir() i proslijedite ime tipa direktorija. Svaki direktorij kreiran na ovaj način dodaje se u korijenski direktorij vaše aplikacije i prikuplja sve vanjske datoteke koje će biti izbrisane zajedno s aplikacijom.

    Primjer kreiranja direktorija za vlastiti foto album:

    javna datoteka getAlbumStorageDir(Context context, String albumName) ( // Dobijte privatni direktorij za foto album aplikacije File file = new File(context.getExternalFilesDir(Environment.DIRECTORY_PICTURES), albumName); if (!file.mkdirs()) ( Log.e (LOG_TAG, "Direktorijum nije kreiran");

    Zapamtite da getExternalFilesDir() kreira direktorije unutar direktorija koji će biti obrisani s aplikacijom. Ako datotekama treba pristupiti nakon što je aplikacija deinstalirana, kao što su slike kamere, koristite metodu getExternalStoragePublicDirectory().

    Vrlo je važno koristiti imena direktorija predstavljena API konstantama, kao što su DIRECTORY_PICTURES, bez obzira da li je korištena metoda getExternalFilesDir() ili getExternalStoragePublicDirectory(). Unaprijed definirani nazivi direktorija omogućavaju sistemu da pravilno obrađuje vaše datoteke. Na primjer, datoteke sačuvane u direktoriju DIRECTORY_RINGTONES će sistemski skener medija označiti kao melodije zvona, a ne kao muzičke datoteke.

    Zatražite slobodan prostor

    Ako unaprijed znate koliko podataka trebate pohraniti, možete saznati ima li dovoljno prostora bez čekanja na IOException pomoću metoda getFreeSpace() ili getTotalSpace(). Ove metode vam omogućavaju da saznate količinu slobodnog i ukupnog prostora na particiji za pohranu. Ove informacije su također korisne za izbjegavanje popunjavanja particije za pohranu iznad određenog praga.

    Međutim, sistem ne garantuje da možete pisati onoliko koliko metoda getFreeSpace() ukazuje. Ako ima malo više slobodnog prostora nego što želite da zadržite, ili ako je sistem datoteka manje od 90% popunjen, vjerovatno možete nastaviti, inače je najbolje da odložite.

    Napomena: Ne morate provjeravati količinu slobodnog prostora prije pisanja datoteke. Možete pokušati napisati datoteku i rukovati IOException. Možda ne znate tačno koliko vam je prostora potrebno. Na primjer, ako promijenite kodiranje datoteke prije spremanja, kao što je pretvaranje PNG u JPEG, možda nećete znati konačnu veličinu datoteke.

    Uz OneDrive možete dijeliti fotografije, Microsoft Office dokumente, druge datoteke i cijele fascikle. Datoteke i fascikle pohranjene u OneDrive su privatne dok ih ne podijelite. Svoj pristup možete prekinuti u bilo kojem trenutku.

    Napomena: Deljenje je ograničeno u osnovnoj verziji OneDrive-a ili verziji koja je samo za skladištenje. Ograničenja se poništavaju nakon 24 sata, ali možete povećati ograničenje dijeljenja datoteka i dobiti dodatne funkcije dijeljenja.

    Kreiranje veze

    Međutim, ovim vezama se podrazumevano daje dozvola za uređivanje. Ako korisniku želite dati samo dozvolu za pregled, morat ćete koristiti OneDrive web mjesto da kreirate vezu (ili uredite onu koju ste kreirali).

    Email

    Odaberite ovu opciju ako želite poslati pozivnicu e-poštom korisnicima ili grupama, a zatim pratiti koga ste pozvali. Ovo vam također omogućava da kasnije uklonite dozvolu ako je potrebno.


    napomene:

    Dajte primaocima veću kontrolu i saradnju na zajedničkim fasciklama

    Ako dijelite mape i dajete dozvole za uređivanje, korisnici s pristupom mogu dodati dijeljene mape u svoj OneDrive. To će im omogućiti da pohrane takvu mapu zajedno sa vlastitim mapama i stavkama, lako premještaju stavke između mapa i udobno rade s njima van mreže. Sve promjene koje naprave sinkroniziraju se sa dijeljenom mapom, tako da svako ko ima pristup folderu dobija najnoviju verziju stavki.

      Da biste podijelili mapu pomoću veze: Kliknite Dobij vezu i u prozoru Dijeli odaberite Svatko s vezom može uređivati ​​ovu stavku.

      Za dijeljenje foldera putem e-pošte: Odaberite Pošalji e-poštom, a zatim u prozoru Deljenje izaberite Mogu da uređuju.

    Savjet: Primalac će moći da dodaje deljene fascikle u svoj OneDrive, a ne pojedinačne datoteke. Ako želite da primalac doda datoteke u OneDrive, prvo ih stavite u mapu, a zatim ih podijelite.

    Pogledajte listu stavki koje ste podijelili

    Na OneDrive.com izaberite Shared u levom oknu, a zatim izaberite I Share.

    Evo kako dijeliti fajlove ili foldere.

    Kreirajte vezu za kopiranje na datoteku ili mapu

    Drugi način dijeljenja je kreiranje veze do datoteke ili mape koju možete kopirati i zalijepiti u tekstualnu poruku ili na web stranicu. Korisnici s kojima dijelite ove linkove mogu ih proslijediti drugima.

    napomene:

    Dijelite u mobilnoj aplikaciji OneDrive

    Za više informacija pogledajte sljedeće članke:

    Dodatne informacije

    Pomoć na mreži
    Pogledajte druge stranice pomoći za OneDrive i OneDrive for Business.
    Za informacije o OneDrive mobilnoj aplikaciji pogledajte Rješavanje problema s OneDrive mobilnom aplikacijom.

    Podrška putem e-pošte
    Ako vam je potrebna pomoć, protresite svoj mobilni uređaj dok je aplikacija OneDrive otvorena ili pošaljite e-poštu OneDrive timu za podršku. Da biste kontaktirali podršku za OneDrive for Business, na Windows PC-u ili Mac-u kliknite na ikonu OneDrive na traci poslova ili na traci menija, a zatim izaberite Ostalo > Pošalji povratne informacije > Nešto mi se ne sviđa.

    OneDrive for Business Administratorima takođe može pomoći OneDrive for Business Tech Community, OneDrive for Business Administrator Help i Office 365 for Business Support.

    Odobrenja određuju koji su podaci ili funkcije dostupni aplikaciji s Google Playa. Mogu se konfigurirati prilikom instaliranja programa na uređaj koji koristi Android 6.0 i novije verzije. Na primjer, ponekad aplikacije traže pristup kontaktima ili informacijama o lokaciji. Također možete konfigurirati dozvole nakon instalacije.

    Savjet. Da saznate svoju verziju Androida, otvorite postavke uređaja i odaberite O telefonu, O tabletu ili O uređaju.

    Nove aplikacije

    Neke aplikacije iz Play trgovine zahtijevaju pristup podacima prije instalacije. Na uređaju koji koristi Android 6.0 ili noviji, također možete prilagoditi dozvole dok koristite program.

    Aplikacije instalirane na uređaju

    Ako ažurirate instaliranu aplikaciju, njene dozvole se mogu promijeniti.

    Automatsko ažuriranje

    Aplikacije za Android OS 6.0 i novije verzije. Ne morate potvrđivati ​​ili davati dozvole. Aplikacija će ih tražiti kada prvi put zatreba pristup podacima ili funkcionalnosti.

    Ostale aplikacije. Ne morate davati dozvole ako ste to već učinili. Ako aplikacija zahtijeva dodatna prava, sistem će od vas zatražiti da prihvatite ili odbijete ažuriranje.

    Da biste sami provjerili sve nove verzije, onemogućite funkciju automatskog ažuriranja. Kako to učiniti opisano je u nastavku.

    Kako onemogućiti automatsko ažuriranje

    Odaberite odgovarajuću instrukciju.

    Kako onemogućiti automatska ažuriranja za pojedinačnu aplikaciju Kako onemogućiti automatska ažuriranja za sve aplikacije Instant aplikacije

    Možete dozvoliti ili odbiti pristup podacima ili funkcijama dok koristite aplikaciju. Da vidite odobrenja za instant aplikaciju, slijedite ove korake:

    Postavljanje dozvola

    Dozvole za aplikacije možete promijeniti u postavkama uređaja. Imajte na umu da ponekad njihovo blokiranje dovodi do grešaka u programu.

    Bilješka. Ako koristite Google račun za obrazovnu, državnu ili poslovnu organizaciju, vaš administrator može kontrolirati neka odobrenja pomoću aplikacije Device Policy.

    Instalirana aplikacija

    Instant aplikacija

    Sve instalirane aplikacije sa određenim dozvolama Kako provjeriti dozvole aplikacije koja ne radi ispravno

    Ako naiđete na greške u aplikaciji, slijedite dolje navedene korake.

    Android koristi sistem datoteka sličan sistemima datoteka na disku na drugim platformama. Ovaj vodič opisuje kako raditi s Android sistemom datoteka za čitanje i pisanje datoteka koristeći File API.

    Odaberite internu ili eksternu memoriju

    Svi Android uređaji imaju dva prostora za pohranu datoteka: "internu" i "vanjsku" memoriju. Ovi nazivi potiču iz ranih dana Androida, kada se sugeriralo da većina uređaja ima ugrađenu trajnu memoriju (internu memoriju), kao i prijenosnu memoriju kao što je mikro SD kartica (vanjska memorija). Neki uređaji dijele postojani prostor za skladištenje na "unutrašnje" i "vanjske" particije, tj. čak i bez uklonjive memorije, uvijek postoje dvije memorije, a API ponašanje za eksternu pohranu je isto bez obzira da li se može ukloniti ili ne. Sljedeće liste sumiraju činjenice o svakom spremištu.

    Interna pohrana:

    • Uvijek na raspolaganju.
    • Fajlovi koji su ovdje sačuvani su prema zadanim postavkama dostupni samo vašoj aplikaciji.
    • Kada korisnik deinstalira vašu aplikaciju, sistem briše sve datoteke aplikacije iz interne memorije.

    Interna memorija je najbolja kada želite da budete sigurni da ni korisnik ni druge aplikacije ne mogu pristupiti datotekama.

    Eksterna pohrana:

    • Nije uvijek dostupno, jer korisnik može montirati eksterni disk kao USB memoriju, au nekim slučajevima i ukloniti ga s uređaja.
    • Čitanje je dozvoljeno svima, tako da se fajlovi sačuvani ovdje mogu čitati bez vaše kontrole.
    • Kada korisnik deinstalira vašu aplikaciju, sistem briše vaše datoteke aplikacije odavde samo ako ih pohranite u direktorij iz getExternalFilesDir() .

    Koristan savjet: Iako su aplikacije prema zadanim postavkama instalirane u internu pohranu, možete navesti android:installLocation atribut u svom manifestu tako da se vaša aplikacija može instalirati na vanjsku pohranu. Korisnici cijene ovu opciju kada je veličina APK-a vrlo velika i imaju vanjski prostor za pohranu koji je veći od interne memorije. Za više informacija pogledajte Staza instalacije aplikacije.

    Dobijte dozvole za vanjske diskove

    Da pišete na eksterni disk, morate zatražiti dozvolu WRITE_EXTERNAL_STORAGE u datoteci manifesta:

    ...

    Pažnja: Trenutno sve aplikacije imaju mogućnost čitanja s vanjskih uređaja za pohranu bez posebne dozvole. Međutim, to će se promijeniti u budućem izdanju. Ako vaša aplikacija treba čitati eksternu memoriju (ali ne i pisati u nju), tada ćete morati deklarirati dozvolu READ_EXTERNAL_STORAGE. Kako biste osigurali da vaša aplikacija nastavi raditi kako je očekivano, morate deklarirati ovu dozvolu sada prije nego promjene stupe na snagu.

    ...

    Međutim, ako vaša aplikacija koristi dozvolu WRITE_EXTERNAL_STORAGE, ona također implicitno ima dozvolu za čitanje vanjske memorije.

    Ne trebaju vam nikakva odobrenja za spremanje fajlova u internu memoriju. Vaša aplikacija uvijek ima dozvolu za čitanje i pisanje datoteka u direktoriju interne memorije.

    Sačuvajte datoteku u internu memoriju

    Prilikom spremanja datoteke u internu memoriju, možete zatražiti odgovarajući direktorij, kao objekt File, pozivanjem jedne od dvije metode:

    getFilesDir() Vraća datoteku, koja je interni direktorij vaše aplikacije. getCacheDir() Vraća datoteku, koja je interni direktorij za privremene keš datoteke vaše aplikacije. Budite sigurni da više ne morate brisati datoteke jednu po jednu i implementirajte razumno ograničenje količine memorije koju ćete koristiti u bilo kojem trenutku, kao što je 1 MB. Ako sistemu ponestane prostora, može izbrisati vaše keš datoteke bez upozorenja.

    Da biste kreirali novu datoteku u jednom od ovih direktorija, možete koristiti File() konstruktor, proslijeđujući datoteku koju pruža jedna od gornjih metoda koja ukazuje na vaš interni direktorij. Na primjer:

    Datoteka datoteka = nova datoteka(context.getFilesDir(), naziv datoteke);

    Alternativno, možete pozvati openFileOutput() da dobijete FileOutputStream koji upisuje u datoteku u vašem internom direktoriju. Na primjer, evo kako napisati tekst u datoteku:

    String filename = "myfile"; String string = "Zdravo svijete!"; FileOutputStream outputStream; pokušajte ( outputStream = openFileOutput(filename, Context.MODE_PRIVATE); outputStream.write(string.getBytes()); outputStream.close(); ) catch (Izuzetak e) ( e.printStackTrace(); )

    Ili ako trebate keširati neke datoteke, onda biste trebali koristiti createTempFile() . Na primjer, sljedeća metoda izdvaja naziv datoteke iz URL-a i kreira datoteku s istim imenom u internom direktoriju predmemorije vaše aplikacije:

    Javna datoteka getTempFile(kontekst konteksta, string url) (datoteka; pokušajte (string fileName = Uri.parse(url).getLastPathSegment(); file = File.createTempFile(fileName, null, context.getCacheDir()); uhvatiti (IOException e) ( // Greška prilikom kreiranja datoteke ) vrati datoteku )

    Napomena: Direktorij interne memorije vaše aplikacije koristi naziv paketa vaše aplikacije i nalazi se na posebnoj lokaciji u sistemu datoteka Android. Tehnički, druga aplikacija može čitati vaše interne datoteke ako postavite način pristupa datoteci na čitanje. Međutim, druge aplikacije također moraju znati naziv vašeg paketa i imena datoteka. Druge aplikacije ne mogu vidjeti vaše interne direktorije i nemaju pristup za čitanje ili pisanje osim ako eksplicitno ne postavite dozvole za čitanje ili pisanje. Dakle, dok koristite MODE_PRIVATE za svoje datoteke u internoj memoriji, one nisu dostupne drugim aplikacijama.

    Sačuvajte datoteku na eksternom disku

    Budući da eksterna pohrana možda neće biti dostupna - na primjer, kada korisnik montira pohranu na PC ili ukloni SD karticu koja pruža eksternu pohranu - uvijek biste trebali osigurati da je particija dostupna prije nego što joj pristupite. Možete ispitivati ​​stanja eksterne memorije pozivanjem getExternalStorageState() . Ako je vraćeno stanje MEDIA_MOUNTED onda možete čitati i pisati datoteke. Na primjer, sljedeće metode su korisne za određivanje dostupnosti skladišta:

    /* Provjerava da li je eksterna memorija dostupna za čitanje i pisanje */ public boolean isExternalStorageWritable() ( String state = Environment.getExternalStorageState(); if (Environment.MEDIA_MOUNTED.equals(state)) (vrati true; ) vrati false; ) / * Provjerava da li je eksterna pohrana dostupna za barem čitanje */ public boolean isExternalStorageReadable() ( String state = Environment.getExternalStorageState(); if (Environment.MEDIA_MOUNTED.equals(state) || Environment.MEDIA_MOUNTED_READl_ONLY(sta) return true ) return false;

    Iako vanjski uređaj za pohranu može biti modificiran od strane korisnika i drugih aplikacija, postoje dvije kategorije datoteka koje možete spremiti ovdje:

    Javne datoteke Datoteke koje treba da budu slobodno dostupne drugim aplikacijama i korisniku. Kada korisnik deinstalira vašu aplikaciju, ove datoteke bi trebale ostati dostupne korisniku.

    Na primjer, fotografije snimljene pomoću aplikacije ili druge preuzete datoteke.

    Lične datoteke Datoteke koje s pravom pripadaju vašoj aplikaciji i treba ih izbrisati kada korisnik deinstalira vašu aplikaciju. Iako su ove datoteke tehnički dostupne korisniku i drugim aplikacijama, jer oni su na eksternoj memoriji, to su datoteke koje nemaju stvarnu vrijednost za korisnika izvan vaše aplikacije. Kada korisnik deinstalira vašu aplikaciju, sistem briše sve datoteke iz vanjskog privatnog direktorija vaše aplikacije.

    Na primjer, dodatni resursi koje je preuzela vaša aplikacija ili privremene medijske datoteke.

    Ako želite pohraniti dijeljene datoteke na vanjski uređaj za pohranu, koristite metodu da dobijete Datoteku koja predstavlja odgovarajući direktorij na vanjskom uređaju za pohranu. Metoda uzima argument koji ukazuje na tip datoteke koju želite spremiti tako da se mogu logički organizirati s drugim javnim datotekama kao što su DIRECTORY_MUSIC ili DIRECTORY_PICTURES. Na primjer:

    Public File getAlbumStorageDir(String albumName) ( // Dobijte direktorij za direktorij javnih slika korisnika. File file = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), albumName); if (!file.mkdirs()) ( Log.e(LOG_TAG, "Direktorijum nije kreiran");

    Ako želite pohraniti datoteke koje su privatne za vašu aplikaciju, možete zatražiti odgovarajući direktorij tako što ćete pozvati getExternalFilesDir() i proslijediti mu ime koje ukazuje na tip potrebnog direktorija. Svaki direktorij kreiran na ovaj način dodaje se u nadređeni direktorij koji sadrži sve vanjske datoteke za pohranu vaše aplikacije koje sistem briše kada korisnik deinstalira vašu aplikaciju.

    Na primjer, evo metode koju možete koristiti za kreiranje direktorija za jedan foto album:

    Javna datoteka getAlbumStorageDir(Context context, String albumName) ( // Dobijte direktorij za privatni direktorij slika aplikacije. File file = new File(context.getExternalFilesDir(Environment.DIRECTORY_PICTURES), albumName); if (!file.mkdirs( )) ( Log.e(LOG_TAG, "Direktorij nije kreiran"); ) povratni fajl;

    Ako nijedan od predefiniranih imena poddirektorija ne odgovara vašim datotekama, možete pozvati getExternalFilesDir() i umjesto toga proslijediti null. Ovo vraća korijenski direktorij za privatne direktorije vaše aplikacije na vanjskom pogonu.

    Bilo da koristite getExternalStoragePublicDirectory() za datoteke koje su javne ili getExternalFilesDir() za datoteke koje su privatne za vašu aplikaciju, važno je da koristite nazive direktorija koje pružaju API konstante kao što je DIRECTORY_PICTURES . Ovi nazivi direktorija osiguravaju da se datoteke tumače kako očekuje sistem. Na primjer, datoteke sačuvane u DIRECTORY_RINGTONES sistem skenera medija klasifikuje kao melodije zvona umjesto muzike.

    Zatražite slobodan prostor

    Ako unaprijed znate koliko podataka ćete pohraniti, možete shvatiti da li ima dovoljno slobodnog prostora bez izbacivanja IOExceptiona tako što ćete pozvati getFreeSpace() ili getTotalSpace() . Ove metode daju informacije o trenutno dostupnom prostoru i ukupnom prostoru particije, respektivno. Ove informacije su također korisne za izbjegavanje popunjavanja particije diska iznad određenog praga.

    Međutim, sistem ne garantuje da možete napisati onoliko bajtova koliko je naznačeno pomoću getFreeSpace() . Ako je vraćeni broj nekoliko MB veći od veličine podataka koje želite pohraniti, ili ako je sistem datoteka manje od 90% pun, onda ste vjerovatno spremni. U suprotnom vjerovatno ne vrijedi pisati u skladište.

    Napomena: Ne morate provjeravati količinu slobodnog prostora prije nego što sačuvate datoteku. Umjesto toga, možete pokušati napisati datoteku i uhvatiti IOException ako se dogodi. Možda ćete to morati učiniti ako ne znate tačno koliko vam je prostora potrebno. Na primjer, ako promijenite kodiranje datoteke prije spremanja pretvaranjem PNG slike u JPEG, nećete znati veličinu datoteke unaprijed.

    Brisanje fajla

    Uvijek biste trebali izbrisati datoteke koje vam više nisu potrebne. Najlakši način da izbrišete datoteku je da pozovete delete().

    MyFile.delete();

    Ako je datoteka pohranjena u internoj memoriji, također možete zatražiti od Context da pronađe i izbriše datoteku pozivanjem deleteFile() :

    MyContext.deleteFile(fileName);

    Napomena: Kada korisnik izbriše vašu aplikaciju, Android sistem briše sljedeće:

    • Svi fajlovi sačuvani u internoj memoriji
    • Sve datoteke pohranjene na vanjskom disku pomoću getExternalFilesDir() .

    Međutim, trebali biste ručno ukloniti sve keširane datoteke koje je kreirao getCacheDir() na redovnoj osnovi, kao i redovno uklanjati druge datoteke koje vam više nisu potrebne.

    mob_info