Hvordan finne rotmappen til en flash-stasjon. Hvor er rotmappen til en flash-stasjon eller minnekort

Ulike informasjon i elektronisk form kan lagres på en spesiell enhet som kalles et minnekort. Den er designet for å lagre tekstdokumenter, lyd- og videoopptak, bilder. Den største fordelen med denne typen minne er den enkle lagring av informasjon og kompaktheten til enheten sammen med betydelige mengder lagret data.

Internminne er representert av RAM, permanent og cache-minne. Fordelene inkluderer høyhastighetsytelse, og ulempen er den begrensede mengden lagrede data.

Svært ofte må en moderne bruker av en personlig datamaskin og annet elektronisk utstyr forholde seg til et slikt forslag: "installer i roten av minnekortet" eller "kopi til roten av kortet". Den kan finnes hvor som helst, ettersom moderne teknologi i økende grad begynner å støtte tredjepartskort for å øke internminnet.

Minnekort er standardiserte. De har visse overordnede dimensjoner og plasseringen av kontaktputene, avhengig av typen enheter for bruk som de er beregnet på.

Dette inkluderer bærbare datamaskiner, nettbrett, smarttelefoner, digitale kameraer og til og med PSP-er med andre spillkonsoller. Derfor, for riktig arbeid med dem, kan man ikke klare seg uten en klar ide om hva uttrykket "roten til et minnekort" kan bety og hvor det kan lokaliseres.

Navnet på stedet for å lagre data på kortet kommer fra det engelske ordet root - "root, root", som betyr noe primordialt, primordialt. Den kom i bruk helt i begynnelsen, da datamaskiner begynte å dukke opp. På dem ble roten kalt selve innholdet i enheten, det vil si stedet der systemet ble startet, og hvor data kunne lagres. Faktisk har denne betegnelsen ikke endret seg i det hele tatt med hensyn til nåværende minnekort.

Rotkatalogen

I dag kalles selve katalogen, som ligger på kortet, roten til minnekortet. Dette er den samme mappen som starter når du klikker på ikonet med et minnekort i en smarttelefon eller. Det er bare det at ordet rot ble oversatt ordrett, og nå er det dets russiske motstykke som brukes for å betegne selve kortet. Dermed, hvis du blir bedt om å kopiere data til roten, trenger du ikke å lage noe ekstra på minnekortet, men bare kopiere de nødvendige filene til det selv, til rotkatalogen.

Jeg tror at alle møtte problemet med onde "autoløpere". Og det er mange måter å løse det på: åpen kildekode-programvare, skript, "dans med tamburin", etc. Jeg ønsker å tilby en enkel løsningsalgoritme for brukere av OS Windows, som ikke krever intervensjon fra tredjepart. For å nå målet trenger vi flere trinn - mer presist, to.

Trinn # 1 - forberedelse

Formatering av mediefilsystemet i NTFS ved hjelp av OS.

Ingen NTFS når du velger formateringsalternativer

Hvis det ikke er noe alternativ for å formatere filsystemet i NTFS, som er tilfellet på Windows XP, gjør vi følgende:

  1. Vi går inn på egenskapene til flash-stasjonen;
  2. Gå til fanen "Utstyr;"
  3. Velg vårt flash-kort og klikk på egenskapsknappen;
  4. Gå til fanen "Retningslinjer";
  5. Velge alternativet for å bruke cachen;
  6. Vi aksepterer endringer og format i NTFS;
  7. Så går vi tilbake til "Rask sletting".

Trinn nummer 2 - differensiering av rettigheter

Nå lager vi en mappe ("arbeidsmappe") i roten og setter umiddelbart et navn (i fremtiden er det umulig å endre navnet på mappen), all informasjon vil bli lagret i den. Men roten til mappen vil være skrivebeskyttet. Nå skiller vi rettighetene:
  1. Vi går inn i sikkerhet - åpne egenskapene til flash-stasjonen, fanen "Sikkerhet";

    Hvis det ikke finnes en slik fane, gjør vi følgende

    1. Gå til "Mappealternativer" i "Kontrollpanel";
    2. På visningsfanen i listen "Ytterligere parametere" finner vi parameteren som inneholder ordene "generell tilgang" og "(anbefalt)";
    3. Vi fjerner daw.
    Nå har fanen dukket opp
  2. Klikk på "Avansert"-knappen;
  3. I vinduet som åpnes, gå til "Eier"-fanen og trykk på "Endre"-knappen;

    For XP

  4. Vi setter avkrysningsboksen "Erstatt eieren av underbeholdere og gjenstander";
  5. Vi velger selv og blir eier av objektet;
  6. Vi lukker dialogboksene på forespørsel fra OS med "OK" -knappen og åpner deretter "sikkerhet" og "avansert" igjen;
  7. Endre tillatelsene - for dette, gå til sikkerhet og på "Tillatelser" -fanen, klikk på "Endre tillatelser" -knappen, slett de eksisterende rettighetene;

    For XP

    (i Windows XP er det ingen knapp "Endre tillatelser", vi handler umiddelbart der)

  8. Legg til "Alle"-gruppen - trykk på "Legg til", "Avansert", "Søk"-knappene, velg gruppen "Alle", "OK", "OK" fra listen;
  9. Angi tillatelsesinnstillingene for "Alle"-gruppen i vinduet som åpnes:
    • "Bruk på: For denne mappen, dens undermapper og filer";
    • Sett følgende avmerkingsbokser i "Tillatelser"-feltet:
      1. Tillat: "Full kontroll";
      2. Nekt: Endre eier, Endre tillatelser, Slett, Slett undermapper og filer, Skriv flere attributter, Skriv attributter, Opprett mapper / legg til data, Opprett filer / skriv data.
  10. Vi godtar endringene, gå til den tidligere opprettede mappen i roten av flash-kortet og gjør nesten de samme operasjonene;
  11. Eierskifte følger et kjent mønster;
  12. Fjerne eksisterende rettigheter ved å fjerne merket for "Legg til tillatelser som er arvet fra overordnede objekter" på fanen "Tillatelser";
  13. I dialogboksen som vises, velg "Slett";
  14. Legg til "Alle"-gruppen (vi vet allerede hvordan) og angi tillatelsesparameterne:
    • "Bruk på: For denne mappen, dens undermapper og filer";
    • Sett avmerkingsboksen Tillat: "Full tilgang".
  15. Igjen, legg til "Alle"-gruppen og angi tillatelsesparameterne:
    • "Bruk: Bare for denne mappen";
    • Sett følgende avmerkingsbokser "Avslå" i "Tillatelser"-feltet:
      "Eierendring", "Endring av tillatelser", "Slett", "Skriv flere attributter", "Skrivattributter"
proffer
+ Det er ingen måte å opprette / slette filer og mapper ved roten av flash-kortet. Følgelig er smutthullet for "autoløpere" tettet.
+ I "arbeidsmappen" full tilgang - det vi ønsker, vi snur det tilbake (legg stresset selv).
+ NFTS filsystem - akkurat passe for personlig bruk. (IMHO)
Minuser
– Det er ikke mulig å bruke menypunktet "Send" til å kopiere informasjon til vår USB-flash-stasjon, pga rotkatalogen er stengt for skriving. Den må kopieres til "arbeidsmappen".
- Det er ingen måte å gi nytt navn til "arbeidsmappen" - ved roten, kun les.
- Filsystem NTFS - ikke egnet for enheter som kun leser FAT (musikk-/videospillere, smarttelefoner, fotokameraer, etc.).
Merknader
  • Denne operasjonen utføres best på en "sunn maskin". Ellers kan du lage immortal-autorun;
  • PÅ Windows XP, da jeg prøvde å slette "arbeidsmappen", forble den (som den burde være), men alt inni ble slettet;
  • Men på vindu 7 forblir alle filene når du prøver å slette "arbeidsmappen";
  • Inne i "arbeidsmappen" sparer du deg ikke fra skadelig programvare som lager en exe "schnick med navnet på mappen når du åpner den.

Så dukket Android Lollipop opp, og med det nye funksjoner for å jobbe med et SD-kort. Dukket opp SAF(Storage Acces Framework), en ny intensjon ACTION_OPEN_DOCUMENT_TREE har dukket opp, som du kan bruke til å velge roten til SD-kortet og deretter bruke det til dine behov. SAF var faktisk fortsatt på KitKat, men uten denne hensikten var det liten mening med det, fordi for å få tilgang til filer på kartet, måtte du bruke Intent ACTION_OPEN_DOCUMENT, som, etter navnet å dømme, lar brukeren velge en fil som han ønsker å redigere, manuelt gjennom systemvelgeren. Ok, hvis brukeren har 5000 filer, vil han gjøre det? Nei.

Identifisere eksterne lagringsenheter på enheten din

Jeg starter med det mest smertefulle emnet i arbeid med minnekort. Vi har en fantastisk metode i Android.

Fil Environment.getExternalStorageDirectory ()

Som navnet tilsier, er dette det du trenger. "Ekstern" betyr "ekstern", ikke sant? Men du bør ikke stole på denne metoden. Den kan returnere banen til internminnet, kanskje til kortet, men det skjer forskjellig på hver enhet. Denne situasjonen skyldes i stor grad forskjellige telefonprodusenter og deres modifiserte fastvare og skall. Poenget mitt er at metoden getExternalStorage () kan returnere banen ikke til det faktiske SD-kortet, men til det som produsenten anser som en ekstern stasjon. Det er her definisjonsforvirring oppstår. En ekstern stasjon er ikke nødvendigvis en flash-stasjon: på noen enheter er det internminne, på noen er det virkelig et SD-kort. Kartfestepunkter kan være hvilke som helst:

  • / lagring / extSdCard /
  • / lagring / sdcard1 /
  • / lagring / sdcard0 /
  • / mnt / ekstern_sd /
  • / mnt / ekstern /
  • / mnt / sdcard2 /
  • / lagring / sdcard0 / eksternt_sdkort /
  • / lagring / flyttbar / sdcard1 /
  • / flyttbar / microsd
  • / mnt / media_rw / sdcard1
  • / mnt / emmc

Og dette er ikke et stort problem før du møter det selv.

Det er mange emner på StackOverflow der en haug med svært forskjellige alternativer for å definere en flash-stasjon, alt fra å telle opp alle mulige kombinasjoner av monteringspunkter, prøve å få java miljøvariabler System.getenv ("EXTERNAL_STORAGE"), System.getenv (" SECONDARY_STORAGE") og slutter med å analysere systemfilen /system/etc/vold.fstab. Disse metodene fungerer, men hver enkelt bare i noen spesielle tilfeller. Ingen av metodene dekker alle enheter, eller fungerer i det hele tatt. Og hvis det ser ut til at alle stasjoner blir oppdaget riktig, vil det alltid være en enhet, kortet som ikke oppdages av disse metodene. Jeg har prøvd nesten alle metoder.

For å forstå omfanget av problemet, vil jeg si at jeg taklet det i omtrent fire måneder. Dette problemet har eksistert siden 2011, men det er fortsatt ingen eksakt løsning. En stund var jeg fornøyd med denne mer eller mindre fungerende koden:

ArrayList allPaths = ny ArrayList<>(); ArrayList sdPaths = ny ArrayList<>(); for (Filfil: mContext.getExternalFilesDirs ("ekstern")) (if (fil == null) (fortsett;) int index = file.getAbsolutePath (). lastIndexOf ("/ Android / data"); if (indeks> 0 ) (Strengbane = file.getAbsolutePath (). Delstreng (0, indeks); prøv (bane = ny fil (bane) .getCanonicalPath ();) catch (Unntak e) (e.printStackTrace ();) allPaths.add ( bane); if (! file.equals (mContext.getExternalFilesDir ("ekstern"))) (sdPaths.add (bane);))

Men den krasjet også på enkelte enheter. Og nok en gang, etter å ha mottatt en enhet på markedet, gikk jeg på leting.

Jeg ble hjemsøkt av Android-systemvelgeren (også en filbehandler), der alle stasjoner alltid er korrekt identifisert. Uten å tenke to ganger, trakk jeg ut system-apk ved hjelp av Root og dekompilerte den.

Opplysning

Jeg fant ut at velgeren bruker klassene StorageVolume og StorageManager. Den itererer over alle StorageVolume-elementene som er hentet ved hjelp av StorageManger.getVolumeList ()-metoden og kaller opp StorageVolume.getPath () og StorageVolume.getState ()-metodene for hver. Haken er at disse metodene er skjult. De er ikke private, men er merket med @skjul-kommentaren. Vel, hva kan du gjøre, vi får vår refleksjon:

StorageManager getStorageManager () (return (StorageManager) mContext.getSystemService (Context.STORAGE_SERVICE);) / * Bruk refleksjon for å oppdage alle lagringer som Android gjør det sannsynligvis ikke fungerer med USB-OTG fungerer bare på API 19+ * / offentlig liste getAllPaths () (Liste allPaths = ny ArrayList<>(); prøv (KlassestorageVolumeClass = Class.forName ("android.os.storage.StorageVolume"); Metode getVolumeList = getStorageManager (). GetClass (). GetMethod ("getVolumeList"); Metode getPath = storageVolumeClass.getMethod ("getPath"); Metode getState = storageVolumeClass.getMethod ("getState"); Objekt getVolumeResult = getVolumeList.invoke (getStorageManager ()); final int length = Array.getLength (getVolumeResult); for (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; }

Spørsmålet er, hvorfor er det ingen offisiell måte å gjøre dette på? Ja, det er ikke helt pålitelig å bruke refleksjon i et kampprosjekt, men det er ingen andre alternativer: hvis systemet selv bruker denne koden, fungerer det i alle tilfeller. Praksis bekrefter dette.

SAF (Storage Access Framework)

Offisiell dokumentasjon:

SAF-plattformen gjør det enkelt for brukere å finne og åpne dokumenter, bilder og andre filer i depotene til alle leverandørene de samarbeider med. Et standard, brukervennlig grensesnitt lar brukere finne filer og få tilgang til de sist lagt til filene som er konsistente på tvers av alle applikasjoner og leverandører.

p> SAF samler innholdsleverandører (DocumentProvider-underklasser). Dette er for eksempel Google Drive, ulike gallerier og filbehandlere.

SAF gir URI for dokumenter (filer) som har skrive- eller lesetillatelser. Vi kan si at dette er et slikt lag over filtilgang. Fil-klassen vet ikke selv noe om SAF.

p> For å kunne redigere data på kortet, må du få URIen til roten til SD-kortet, som vil ha rettighetene til å redigere. Deretter, ved å bruke denne URI, kan du få URI til en hvilken som helst fil på minnekortet. For å gjøre dette må du starte systemvelgeren ved å bruke Intent ACTION_OPEN_DOCUMENT_TREE og be brukeren velge roten til SD-kortet (ellers vil ingenting fungere!).

På bilder:


@TargetApi (Build.VERSION_CODES.LOLLIPOP) void showDocumentTreeDialog () (Intent intent = new Intent (Intent.ACTION_OPEN_DOCUMENT_TREE); startActivityForResult (Intent.createChooser (intent, getString_INQURING_Dialog )per).

Veldig viktige ting skjer her: i onActivityResult behandler vi brukerens valg og skaffer oss de kjære rettighetene til å få tilgang til kartet. Generelt er rettighetene gitt til enheten startes på nytt, og slik at du må bruke metoden etter å ha startet enheten på nytt for ikke å sende brukeren for tillatelse

TakePersistableUriPermission (Uri uri, int modeFlags)

med flagg for skriving og lesing. Etter alle disse manipulasjonene, må du lagre det mottatte Uri SD-kortet et sted for videre arbeid med det, for eksempel i SharedPreferences.

@RequiresApi (api = Build.VERSION_CODES.KITKAT) @Override beskyttet void onActivityResult (int requestCode, int resultCode, Intent data) (super.onActivityResult (requestCode, resultCode, data); if (requestCode == REQUESTCARD_Getp_PSDerConplication (A_PSDerConplication_CODE) , data.getData ())) (// gjør tingene dine)) @RequiresApi (api = Build.VERSION_CODES.KITKAT) private boolean takePermission (Context context, Uri treeUri) (/ * Det ville være nyttig å legge til en sjekk for at innkommende URI er en kart-URI. Jeg vil la denne oppgaven være en øvelse for leserne * / try (if (treeUri == null) (return false;) context.getContentResolver (). takePersistableUriPermission (treeUri, Intent.FLAG_GRANT_WRITE_URI_PERMISSION_AGREMANTISSION_PERMISSION_AGREMANTISSION_PERMISSION_AGREMANTISSION_PERMISSION_AGREMANTISSION_PersistableUriPermission ; sharedPreferences.putString (SD_CARD_URI, treeUri.toString ()); return true;) catch (Unntak e2) (e2.printStackTrace (); return false;))

Interaksjon med SD-kort

Leseren gjetter sannsynligvis allerede at vi ikke vil kunne samhandle med filer på en normal måte (som file.renameTo (file2)). Hvis vi ser på koden til metoden file.renameTo (File), vil vi ikke se noe mistenkelig, ingen kontroller. Og med rette, fordi sjekkene er på filsystemnivå. Og hvis vi prøver å endre filen som ligger på SD-kortet ved hjelp av vanlige midler, vil vi få følgende unntak:

Java.io.IOException: Kan ikke gjøre endringer i filen your_file.ext

Her er en interessant måte å finne ut om en fil kan endres på:

Public boolean isFileWritable (filfil) (boolsk skrivbar; prøv (ny FileOutputStream (fil, true) .close (); skrivbar = fil.eksisterer () && file.canWrite ();) catch (IOException e) (skrivbar = usann; ) retur skrivbar;)

Hvis filen er på et kart, vil vi få et IOException.

For å endre en fil på et minnekort, må vi få en DocumentFile som representerer filen vår, men med skrivetillatelsene vi fikk med SAF.

I begynnelsen av denne artikkelen snakket jeg om to hensikter for SAF: ACTION_OPEN_DOCUMENT_TREE og ACTION_OPEN_DOCUMENT. Og jeg sa at vi ikke vil bruke den andre hensikten, da dette tvinger brukeren til å søke etter filen manuelt. Men vi har URIen som vi fikk med den første intensjonen, og det betyr ... Nei, det er ingen standard API for å få DocumentFile, alt er håndtert.

Algoritmen er som følger:

  1. Vi har fil
  2. Bestem navnet på stasjonen som denne filen er plassert på
  3. Vi bestemmer banen til filen i forhold til stasjonen den er plassert på. Vi får en linje som android / mappe / file.txt
  4. Skille linjen med symbolet «/»
  5. I en løkke, for hver mottatt del, finn en DocumentFile som representerer denne banen, basert på DocumentFile for den forrige delen
  6. Hvis algoritmen ble fullført uten feil, har vi en DocumentFile ved utgangen, som representerer filen vår

Public DocumentFile getDocumentFile (File file) (DocumentFile document = null; String baseFolder = null; for (String path: getAllPaths ()) (File filePath = new File (path); if (filePath.getAbsolutePath (). StartsWith (file.getAbsolutePath) ())) (baseFolder = filePath.getAbsolutePath (); break;)) if (baseFolder == null) (return null;) prøv (String relativePath = file.getCanonicalPath (). understreng (baseFolder.length () + 1) ; Uri permissionUri = Uri.parse (sharedPreferences.getString (SD_CARD_URI)); document = getDocumentFileForUri (permissionUri, relativePath);) catch (Unntak e) (e.printStackTrace ();) returner dokument;) / * Metode for å få DocumentFile ( trinn 4-6) * / privat DocumentFile getDocumentFileForUri (Uri treeUri, String relativePath) (String parts = relativePath.split ("/"); if (parts.length == 0) (retur null;) DocumentFile document = DocumentFile.fromTreeUri (mContext, treeUri); for (strengdel: deler) (DocumentFile nextDocument = document.fi ndFile (del); if (nesteDokument! = null) (dokument = nesteDokument;)) returner dokument; )

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

Et eksempel på kopiering av en klassefil Fil til DocumentFile:

Public void copyFile (Filkildefil, DocumentFile-dokument) (FileInputStream inputStream = null; FileOutputStream outputStream = null; prøv (inputStream = new FileInputStream (kildefil); outputStream = (FileOutputStream) mContentResolver.openStream FileStream (documentInStream. .getUriel ()); FileInputStream inputStream.getChannel (); FileChannel fileChannelOut = outputStream.getChannel (); fileChannelIn.transferTo (0, fileChannelIn.size (), fileChannelOut); // noinspection ResultOfMethodCallIgnprint sourceception (fil) (etrace) noinspection ResultOfMethodCallIgnorert sourceFile.delete ();) til slutt (prøv (if (inputStream! = null) inputStream.close (); if (outputStream! = null) outputStream.close ();) catch (IOException e) (e.printStackTrace ( ;))))

Og jeg vil også si at nå skal koden fylles med slike sjekker.

Public void writeFile (filfil) (boolean fileWritable = isFileWritable (fil); boolean hasSdCardUri =! SharedPreferences.getString (SD_CARD_URI) .isEmpty (); if (fileWritable || hasSdCardUri) (/ * kan du, eller SAF-filen normalt redigeres) * / return;) if (Build.VERSION.SDK_INT> = 21) (/ * velkommen! (spør brukeren om tillatelse) * / throw new NoLollipopWritePermissionException (); `) else if (Build.VERSION.SDK_INT == 19) (/ * farvel! (kan ikke redigere) * / kaste ny NoKitkatWritePermissionException ();))

Konklusjon

Jeg håper at min erfaring beskrevet i artikkelen vil hjelpe de som ennå ikke har jobbet med et SD-kort til å unngå mye forskning og søk.

1. Last inn enhetens installasjonsfil SAS4Android.apk

2. Aktiver tillatelse på enheten din (telefon, nettbrett osv.) til å installere tredjepartsapplikasjoner (ikke fra Market). Dette kan gjøres i innstillingene til enheten din: Innstillinger - Sikkerhet - Ukjente kilder- kryss av i boksen Tillat installasjon av applikasjoner fra ukjente kilder(Etter å ha installert SAS4Android, kan denne avmerkingsboksen fjernes). Kopier filen SAS4Android.apk til enheten og kjør installasjonen.

3. Kjør filen SAS4Android.apk .

4. Ved første start vises et vindu som ber om banen til roten til CD-kortet og godtar bruksvilkårene. trykk OK. Også ved første oppstart opprettes applikasjonsarbeidsmappen automatisk - SAS4 Android og det er en mappe arbeid. Dette er arbeidsmappen til programmet, der de nødvendige dataene vil bli lagret. Vær oppmerksom på at du må spesifisere vei til roten SD-kort (og ikke til noen annen mappe) - dette er viktig!

Som standard er programmets mappestruktur som følger:

SD card_root / SAS4Android / arbeid - arbeidsmappe - opprettet automatisk;

SDcard_root / SAS4Android / cache - mappe med cache - opprettet av brukeren.

Hvis standard mappestruktur brukes, oppdager programmet automatisk banene til de nødvendige mappene og filene. Hvis en annen mappestruktur brukes, må banene spesifiseres manuelt. På enheter med Android-versjon før 4.3.x, anbefales det å bruke standard mappestruktur.

Du kan bestemme banen til kortet på følgende måte: Før du setter SD-kortet inn i enheten, oppretter du (på en datamaskin) en mappe med forståelig for deg navn, for eksempel Navn.
Koble enheten fra datamaskinen, ellers vil ikke SD-kortet i lagringsmodus være tilgjengelig for Android og alle programmer. (Det er mer praktisk å bruke MyPhoneExplorer-programmet for å kommunisere med en datamaskin, som lar deg redigere informasjon på enheten via en datamaskin og SD-kortet forblir tilgjengelig for alle). Åpne hvilken som helst filbehandler på enheten din og skriv inn mest rot enhetskatalog. Det vil være flere kataloger. Se gjennom innholdet og finn "din" mappe i en av dem. Banen som filbehandleren vises til rot denne katalogen er det du trenger. Husk eller skriv det ned. I forskjellige enheter og versjoner av Android er forskjellige alternativer for plassering og navn på SD-kortmappen mulig. Hvis det er en mappe mnt for eksempel mnt / sdkard , eller mnt / ekstern_sd , eller mnt / extSdkard ... På enkelte enheter, mapper mnt kan ikke være. I dette tilfellet ligger mappen som er montert på kortet vanligvis rett ved roten av enheten, for eksempel: / Sdkard eller / Sdkard1 eller / extSdkard ... På Android versjoner 4. og nyere finnes vanligvis følgende mappe: lagring / Sdkard eller lagring / Sdkard1 eller lagring / ekstern_sd eller lagring / extSdkard .
Så anta at vi har bestemt at SD-kortet vårt er montert som / mnt / ekstern ... Det er akkurat denne banen du må angi (eller det er bedre å velge ved å åpne fildialogen med [...]-knappen) når du først starter programmet før menyen vises.

Funksjoner ved lansering på Android 4.4 og høyere

På Android 4.4 og nyere ble applikasjonsrettighetene til å skrive til SD-kortet fjernet. Hvis produsenten ikke korrigerte fastvaren under montering, vil ikke applikasjonen på en ikke-rootet enhet kunne skrive til SD-kortet. I dette tilfellet vil programmet selv prøve å finne hvor arbeidskatalogen skal plasseres. Mest sannsynlig vil det være en katalog i applikasjonsdatadelen i det interne minnet (ikke-lagring) til enheten.
I dette tilfellet vil programmet fungere, dataene vil bli skrevet til mappen arbeid , les derfra. Men brukeren vil bli fratatt muligheten til å ta hva som helst fra mappen arbeid eller legg noe der. Selvfølgelig snakker vi om en enhet som ikke er rotfestet. Hvis denne tilstanden passer brukeren, trenger ikke noe annet å gjøres. Ellers må du jobbe med hendene.
Vi må finne et sted på enheten som programmet kan skrive data til, og vi kan ta disse dataene derfra og legge til våre egne, om nødvendig.
Eksperimentelt klarte vi å finne et slikt sted. Installasjonsprosedyre:

1. Vi kobler enheten med en USB-kabel til datamaskinen og oppretter i katalogen intern lagring mappe Data ... Eller i selve enheten gjør vi det samme ved å bruke filbehandleren. Stien må være lagring / sdcard0 / Data ... Inn i mappen Data vi legger filen .nomedia .
Merk følgende! Alle forsøk på å opprette en mappe arbeid(synlig og redigerbar på datamaskinen) andre steder / mapper i internminnet mislykket... Du kan lage den, og selv når du starter SAS4Android for første gang, kan du spesifisere banen til ønsket mappe. Men etter installasjonen blir tilgang til denne mappen umulig. Du kan se gjennom enhetens filbehandler, men det er umulig å legge til noe (spor, ny lisensnøkkel, kart-/lagkonfigurasjoner, etc.) fra et flyttbart kort eller datamaskin, eller kopiere det til et flyttbart kort eller datamaskin.
Hvorfor ble navnet valgt for mappen? "Data" ? Trikset er at det stemmer overens med navnet Data , akseptert i standardterminologien til enheten, og i tillegg skiller Android mellom store og små bokstaver. Totalt sett oppfatter Android-systemet denne mappen som sin egen og begrenser ikke innholdet i rettigheter.

Her er en ferdig, velprøvd måte å omgå begrensningene til Android 4.4x. Det er ikke forbudt for brukeren å eksperimentere med plasseringen og navnet på denne mappen.

Nå mappen vi opprettet lagring / sdcard0 / Data vil fungere som banen du må spesifisere når du starter programmet for første gang.
2. Lag ved roten utvendig Sd-kort mappe SAS4 Android , og i denne mappen er det en mappe cache ... Vi legger cachen der. Banen til cachen vil være .
3. Ved første oppstart vil programmet be om banen til roten til SD-kortet. Vi angir banen til mappen vi opprettet: lagring / sdcard0 / Data ... I mappe Data programmet vil opprette en mappe SAS4 Android , og mappen i den arbeid med et standard basissett med filer. Nå vil alle arbeidsfiler til programmet være plassert i mappen lagring / sdcard0 / Data / SAS4Android / arbeid og vi vil ha tilgang til dem.
4. Nå må du fortelle programmet banen til cachen, siden vi har den forskjellig fra standardbanen. For å gjøre dette, skriv inn i det kjørende programmet Innstillinger - Kartbufferkatalog og bruk fildialogen spesifiser banen lagring / sdcard1 / SAS4Android / cache .Installasjonen fullført.
#!!! Tallrike kontroller har vist at med denne installasjonen av SAS4Android i enheter som kjører Android 4.4.4, med ytterligere oppdateringer eller til og med fullstendig fjerning og reinstallering av applikasjonen, katalogen lagring / sdcard0 / Data fortsetter å fungere, innhold arbeid går ikke seg vill og går ikke i stykker, tilgang til redigering arbeid både gjennom enheten og gjennom datamaskinen er åpen. Testet på Sony Xperia Z samt Z3 compact og WinXP / Win7.
#!!! At arbeidskatalogen arbeid er tvunget til å være på det interne minnet til enheten, er det ett betydelig pluss - i tilfelle en feil / faller av SD-kortet i feltet, og dette kan skje med hvem som helst, mister du (midlertidig) bare cachen, og sporloggen og resten av innholdet arbeid vil forbli hel og fungerende.
Råd : det er alltid nyttig å ha en ekstrem reserve - med jevne mellomrom, etter at viktige nye spor og poeng vises, kopierer / lagrer jeg dette endrede verket arbeid til SD-kortet til den opprinnelige SAS4Android-mappen, ved siden av cache ... Der arbeid, selvfølgelig, fungerer ikke - det er bare en redning. Og plutselig feiler beistet - da hjelper kortet med den delvise gjenopprettingen.

#!!! I Android 4.4.x (hvis produsenten ikke tilpasset fastvaren under montering) bytte på nett kartlegge data til en upakket cache fra tredjepartstjenester ved å bruke skript skrevet i JavaScript, uten rot kun mulig til internminnet. For å laste cachen på nett du må i tillegg opprette en andre mappe cache i arbeidskatalogen til programmet lagring / sdcard0 / Data / SAS4Android / og legg inn det nødvendige antallet mapper på forhånd med navnene på kildene til kart / lag og med skriptene plassert i dem. Du må venne deg til å bytte mellom de to cache-katalogene avhengig av dine nåværende behov: å jobbe uten å bytte - med hoved cache , og med pumping - bytter vi til cache i internminnet.

Gå ut til programinnstillinger-menyen.

Etter å ha startet programmet, gå ut til innstillingsmenyen ved å trykke på systemknappen "Meny". Dette kan enten være en maskinvareknapp eller en skjermknapp nederst på skjermen ( tre vertikale punkter). Avhengig av enheten din og versjonen av Android på den, kan dette enten være en maskinvareknapp eller en skjermknapp nederst på skjermen. På mange nye enheter med Android versjon 4 og høyere er denne knappen kombinert med knappen for listen over kjørende applikasjoner ( to justerte rektangler). I dette tilfellet er det nok for å gå ut av menyen trykk og hold kjører programmer-knappen til innstillingsmenyen vises.

Funksjoner for å slå SAS4Android av og på

Når du starter programmet, er alle moduser slått på: visning av kart, navigasjon, registrering av sporlogg (starte en tjeneste). Det er mulig å avslutte applikasjonen (sette den i hvilemodus) uten å stoppe tjenesten, dvs. sporloggregistrering. Avhengig av innstillingene (sporloggopptaksmodus, tjenestestoppmodus), start om nødvendig et annet program, ring eller svar på et anrop mens du lagrer den kjørende tjenesten, bruk enten knappen tilbake, eller "hjem"-knappen i form av et hus.

For å stoppe tjenesten, avhengig av innstillingene, bruk et dobbeltklikk på "Tilbake"-knappen, eller senk "gardinen", i listen over kjørende applikasjoner, klikk på linjen SAS4 Android, trykk på knappen Stoppe.

#!!! På nettbrett er oftest statuslinjen nederst. På høyre side er ikoner for kjørende applikasjoner gruppert. Hvis du klikker på et hvilket som helst ikon, vil det dukke opp et vindu med en linjal med "Hurtigparametere"-ikoner (lyd, WiFi-lysstyrke, BT, nettverk, plassering, etc.), og nedenfor er en linje-for-linje liste over applikasjoner som kjører .

Funksjoner ved distribusjonen av programmet

Program SAS4 Android deles ut gratis.

Søknads utløpsdato - forfatterens notat.

Etter gjentatte og ondsinnede brudd på opphavsretten av noen uærlige navigatorhandlere, måtte forfatteren innføre en begrensning - etter installasjon (eller neste oppdatering) av programmet SAS4 Android fungerer som den skal i 1 måned fra datoen oppdateringen ble lagt ut, og deretter "bryter" delvis - råtner bort... Dette kommer til uttrykk ved å redusere tiden for kontinuerlig opptak av sporloggen (vanligvis innen 20-30 minutter) hvoretter opptaket stopper, en tilsvarende melding vises på skjermen. Da gjenstår det bare å starte programmet på nytt (lukk applikasjonen og tjenesten og start dem på nytt). Og altså et uforutsigbart antall ganger til slutten av turen. I dette tilfellet blir sporene tatt opp, men med pauser. En enkel, men plagsom løsning på dette problemet er en vanlig oppdatering, en gang i måneden. Hver ny oppdatering har en senere "fade"-dato, så oppdater og fortsett ...

Men det finnes en bedre måte.

Programmet har en algoritme for å fjerne begrensningen - license.dat-nøkkelen, som deaktiverer "fading". Forfatteren gir nøklene som en takknemlighet til de som støttet prosjektet. Så ikke spør «hvor mye» eller «hvordan kjøpe». Gå til hvilken som helst side på forumet og se nærmere på overskriften.

Nøkler er ikke til salgs! Donasjoner med noen omtale av nøkler eller kjøp i kommentarfeltet vil bli returnert til avsender.

For å generere en nøkkel trenger du en fil deviceld.txt ... Den er dannet av selve SAS4Android-programmet og plassert i mappen arbeid .

Kontroller først at det er en fil på enheten din. deviceld.txt det er.

Hvis den ikke er der, vil du ikke kunne lage en nøkkel for navigatoren din (dessverre, det er noen kraftig avkortede modeller som denne mekanismen ikke fungerer på).

Hvis du har en fil deviceld.txt tom eller ikke fungerer (forble fra den gamle versjonen av programmet til en tilbakestilling av fabrikken eller systemoppdatering).

1. Fjern den gamle deviceld.txt .

2. Kjør programmet.

3. Vi venter på at satellittene skal fanges (koordinatlinjen blir svart).

4. Lukk programmet. En gyldig identifikator skal vises i mappen arbeid .

Vær oppmerksom på faktum at nøkkelen er knyttet til enhets-IDen. På Android endres enhets-IDen ved å installere en systemoppdatering. Dette er også resultatet av en tilbakestilling til fabrikkinnstillinger. (Hvorfor det? Spør produsentene av enheten din).

Så hvis du oppdaterer systemet eller tilbakestiller fabrikken, slutter nøkkelen å fungere.

Dette kan imidlertid løses ved å endre nøkkelen. Alle spørsmål om fjerning av restriksjoner, spør forfatteren av programmet i en personlig melding.