Hoe de hoofdmap van een flashstation te vinden. Waar is de hoofdmap van een flashstation of geheugenkaart

Verschillende informatie in elektronische vorm kan worden opgeslagen op een speciaal apparaat dat een geheugenkaart wordt genoemd. Het is ontworpen om tekstdocumenten, audio- en video-opnamen en afbeeldingen op te slaan. Het belangrijkste voordeel van dit type geheugen is het gemak van het opnemen van informatie en de compactheid van het apparaat, samen met aanzienlijke hoeveelheden opgeslagen gegevens.

Intern geheugen wordt weergegeven door RAM, permanent en cachegeheugen. De voordelen zijn onder meer snelle prestaties en het nadeel is de beperkte hoeveelheid opgeslagen gegevens.

Heel vaak heeft een moderne gebruiker van een personal computer en andere elektronische apparatuur te maken met een dergelijk voorstel: "installeer in de root van de geheugenkaart" of "kopieer naar de root van de kaart". Het is overal te vinden, aangezien moderne technologie steeds meer kaarten van derden begint te ondersteunen om het interne geheugen te vergroten.

Geheugenkaarten zijn gestandaardiseerd. Ze hebben bepaalde algemene afmetingen en de locatie van de contactvlakken, afhankelijk van het type apparaten waarvoor ze zijn bedoeld.

Dit omvat laptops, tablets, smartphones, digitale camera's en zelfs PSP's met andere gameconsoles. Daarom kan men voor correct werken met hen niet zonder een duidelijk idee van wat de uitdrukking "root van een geheugenkaart" kan betekenen en waar deze zich kan bevinden.

De naam van de plaats voor het opslaan van gegevens op de kaart komt van het Engelse woord root - "root, root", wat iets primordiaals, primordiaals betekent. Het werd in het begin in gebruik genomen, toen computers begonnen te verschijnen. Op hen werd de root de inhoud van het apparaat genoemd, dat wil zeggen de plaats van waaruit het systeem werd gestart en waar gegevens konden worden opgeslagen. In feite is deze aanduiding helemaal niet veranderd ten opzichte van de huidige geheugenkaarten.

Hoofdmap

Tegenwoordig wordt de map zelf, die zich op de kaart bevindt, de root van de geheugenkaart genoemd. Dit is dezelfde map die begint wanneer u op het pictogram klikt met een geheugenkaart in een smartphone of. Het woord wortel is alleen letterlijk vertaald, en nu is het zijn Russische tegenhanger die wordt gebruikt om de kaart zelf aan te duiden. Dus als u wordt gevraagd om gegevens naar de root te kopiëren, hoeft u niets extra's op de geheugenkaart aan te maken, maar kopieert u eenvoudig de benodigde bestanden naar de rootmap zelf.

Ik denk dat iedereen te maken had met het probleem van kwaadaardige "auto-runners". En er zijn veel manieren om het op te lossen: open source software, scripts, "dansen met een tamboerijn", enz. Ik wil een eenvoudig oplossingsalgoritme bieden voor gebruikers van OS Windows, waarvoor geen tussenkomst van derden nodig is. Om het doel te bereiken, hebben we verschillende stappen nodig - meer precies, twee.

Stap # 1 - voorbereiding

Het mediabestandssysteem formatteren in NTFS met behulp van het besturingssysteem.

Geen NTFS bij het kiezen van opmaakopties

Als er geen optie is om het bestandssysteem in NTFS te formatteren, wat het geval is op Windows XP, dan doen we het volgende:

  1. We gaan in op de eigenschappen van de flashdrive;
  2. Ga naar het tabblad "Apparatuur;"
  3. Selecteer onze flashkaart en klik op de eigenschappenknop;
  4. Ga naar het tabblad "Beleid";
  5. De optie kiezen om de cache te gebruiken;
  6. We accepteren wijzigingen en formaten in NTFS;
  7. Daarna keren we terug naar "Snel verwijderen".

Stap nummer 2 - differentiatie van rechten

Nu maken we een map ("werkmap") in de root en stellen meteen een naam in (in de toekomst is het onmogelijk om de naam van de map te wijzigen), alle informatie wordt erin opgeslagen. Maar de hoofdmap van de map is alleen-lezen. Nu onderscheiden we de rechten:
  1. We gaan in op beveiliging - open de eigenschappen van de flashdrive, het tabblad "Beveiliging";

    Als zo'n tabblad niet bestaat, doen we het volgende:

    1. Ga naar de "Mapopties" in het "Configuratiescherm";
    2. Op het tabblad weergave in de lijst "Aanvullende parameters" vinden we de parameter met de woorden "algemene toegang" en "(aanbevolen)";
    3. We verwijderen de da.
    Nu is het tabblad verschenen
  2. Klik op de knop "Geavanceerd";
  3. Ga in het geopende venster naar het tabblad "Eigenaar" en druk op de knop "Wijzigen";

    Voor XP

  4. We zetten het selectievakje "Vervang de eigenaar van subcontainers en objecten";
  5. Wij kiezen zelf en worden eigenaar van het object;
  6. We sluiten de dialoogvensters op verzoek van het besturingssysteem met de knop "OK" en openen vervolgens opnieuw de "beveiliging" en "geavanceerd";
  7. Wijzig de machtigingen - ga hiervoor naar beveiliging en klik op het tabblad "Machtigingen" op de knop "Machtigingen wijzigen", verwijder de bestaande rechten;

    Voor XP

    (in Windows XP is er geen knop "Machtigingen wijzigen", we handelen daar onmiddellijk)

  8. Voeg de groep "Alle" toe - druk op de knoppen "Toevoegen", "Geavanceerd", "Zoeken", selecteer de groep "Alle", "OK", "OK" uit de lijst;
  9. Stel in het geopende venster de machtigingsinstellingen in voor de groep "Iedereen":
    • "Toepassen op: voor deze map, de bijbehorende submappen en bestanden";
    • Zet de volgende selectievakjes in het veld "Machtigingen":
      1. Toestaan: "Volledige controle";
      2. Weigeren: Wijzig eigenaar, Wijzig machtigingen, Verwijderen, Verwijder submappen en bestanden, Schrijf extra attributen, Schrijf attributen, Creëer mappen / voeg gegevens toe, Maak bestanden / schrijf gegevens.
  10. We accepteren de wijzigingen, gaan naar de eerder gemaakte map in de hoofdmap van de flashkaart en doen bijna dezelfde bewerkingen;
  11. Verandering van eigenaar volgt een bekend patroon;
  12. Bestaande rechten verwijderen door het selectievakje "Machtigingen toevoegen die zijn overgenomen van bovenliggende objecten" op het tabblad "Permissies" uit te schakelen;
  13. In het dialoogvenster dat verschijnt, selecteer "Verwijderen";
  14. Voeg de groep "Iedereen" toe (we weten al hoe) en stel de toestemmingsparameters in:
    • "Toepassen op: voor deze map, de bijbehorende submappen en bestanden";
    • Schakel het selectievakje Toestaan: "Volledige toegang" in.
  15. Voeg opnieuw de groep "Iedereen" toe en stel de machtigingsparameters in:
    • "Toepassen: alleen voor deze map";
    • Zet de volgende selectievakjes "Weigeren" in het veld "Machtigingen":
      "Wijziging van eigenaar", "Wijziging van machtigingen", "Verwijderen", "Schrijf aanvullende attributen", "Schrijf attributen"
voordelen
+ Er is geen manier om bestanden en mappen in de hoofdmap van de flashkaart te maken / verwijderen. Bijgevolg wordt de maas in de wet voor "auto-runners" gesloten.
+ In de "werkmap" volledige toegang - wat we willen, we draaien het terug (leg zelf de stress).
+ NFTS-bestandssysteem - precies goed voor persoonlijk gebruik. (NAAR MIJN BESCHEIDEN MENING)
minpuntjes
- Het is niet mogelijk om het menu-item "Verzenden" te gebruiken om informatie naar onze USB-stick te kopiëren, omdat de hoofdmap is gesloten om te schrijven. Het moet worden gekopieerd naar de "werkmap".
- Er is geen manier om de "werkmap" te hernoemen - in de root, alleen lezen.
- Bestandssysteem NTFS - niet geschikt voor apparaten die alleen FAT lezen (muziek-/videospelers, smartphones, fotocamera's, etc.).
Opmerkingen
  • Deze operatie kan het beste worden uitgevoerd op een "gezonde machine". Anders kunt u onsterfelijke autorun maken;
  • OP Windows XP, toen ik probeerde de "werkmap" te verwijderen, bleef het (zoals het zou moeten zijn), maar alles erin werd verwijderd;
  • Maar in Windows 7 blijven alle bestanden behouden wanneer u de "werkmap" probeert te verwijderen;
  • In de "werkmap" wordt u niet beschermd tegen malware die een exe "schnick" maakt met de naam van de map wanneer u deze opent.

Toen verscheen Android Lollipop, en daarmee nieuwe features voor het werken met een SD-kaart. verscheen SAF(Storage Acces Framework), is er een nieuwe Intent ACTION_OPEN_DOCUMENT_TREE verschenen, waarmee je de root van de SD-kaart kunt selecteren en deze vervolgens voor je behoeften kunt gebruiken. In feite was SAF nog steeds op KitKat, maar zonder deze Intent had het weinig zin, want om toegang te krijgen tot bestanden op de kaart, moest je Intent ACTION_OPEN_DOCUMENT gebruiken, waarmee, te oordelen naar de naam, de gebruiker een bestand kan selecteren dat hij wil bewerken, handmatig via de systeemkiezer. Oké, als de gebruiker 5000 bestanden heeft, zal hij dat dan doen? Nee.

Externe opslagapparaten op uw apparaat identificeren

Ik zal beginnen met het meest pijnlijke onderwerp in het werken met geheugenkaarten. We hebben een geweldige methode in Android.

Bestand Environment.getExternalStorageDirectory ()

Zoals de naam al doet vermoeden, is dit wat je nodig hebt. "Extern" betekent "extern", toch? Maar u moet niet op deze methode vertrouwen. Het kan het pad naar het interne geheugen teruggeven, misschien naar de kaart, maar het gebeurt op elk apparaat anders. Deze situatie is grotendeels te wijten aan verschillende telefoonfabrikanten en hun aangepaste firmware en shells. Mijn punt is dat de methode getExternalStorage () het pad niet naar de eigenlijke SD-kaart kan terugsturen, maar naar degene die de fabrikant als een externe schijf beschouwt. Dit is waar definitieverwarring ontstaat. Een externe schijf is niet per se een flashdrive: op sommige apparaten is het een intern geheugen, op andere is het inderdaad een SD-kaart. Kaartaankoppelpunten kunnen elk zijn:

  • / opslag / extSdCard /
  • / opslag / sdcard1 /
  • / opslag / sdcard0 /
  • / mnt / externe_sd /
  • / mnt / extern /
  • / mnt / sdcard2 /
  • / opslag / sdcard0 / external_sdcard /
  • / opslag / verwijderbaar / sdcard1 /
  • / verwijderbaar / microsd
  • / mnt / media_rw / sdcard1
  • / mnt / emmc

En dit is geen groot probleem totdat je het zelf onder ogen ziet.

Er zijn veel onderwerpen op StackOverflow waarin een heleboel zeer verschillende opties voor het definiëren van een flashstation, variërend van het opsommen van alle mogelijke combinaties van koppelpunten, proberen om Java-omgevingsvariabelen System.getenv ("EXTERNAL_STORAGE"), System.getenv (" SECONDARY_STORAGE") en eindigend met het ontleden van het systeembestand /system/etc/vold.fstab. Deze methoden werken, maar elk alleen in een bepaald geval. Geen van beide methoden dekt alle apparaten of werkt helemaal niet. En als het erop lijkt dat alle schijven correct worden gedetecteerd, zal er altijd een apparaat zijn waarop de kaart niet door deze methoden wordt gedetecteerd. Ik heb bijna alle methoden geprobeerd.

Om de omvang van het probleem te begrijpen, zal ik zeggen dat ik er ongeveer vier maanden mee bezig ben geweest. Dit probleem bestaat al sinds 2011, maar er is nog steeds geen exacte oplossing. Een tijdje was ik tevreden met deze min of meer werkende code:

ArrayLijst allPaths = nieuwe ArrayList<>(); ArrayLijst sdPaths = nieuwe ArrayList<>(); for (Bestandsbestand: mContext.getExternalFilesDirs ("extern")) (if (bestand == null) (doorgaan;) int index = bestand.getAbsolutePath (). lastIndexOf ("/ Android / data"); if (index> 0 ) (String path = file.getAbsolutePath (). Substring (0, index); try (path = new File (path) .getCanonicalPath ();) catch (uitzondering e) (e.printStackTrace ();) allPaths.add ( pad); if (! file.equals (mContext.getExternalFilesDir ("extern"))) (sdPaths.add (pad);))

Maar het crashte ook op sommige apparaten. En opnieuw, nadat ik een eenheid op de markt had ontvangen, ging ik op zoek.

Ik werd achtervolgd door de Android-systeemkiezer (ook een bestandsbeheerder), waarin alle schijven altijd correct worden geïdentificeerd. Zonder er twee keer over na te denken, heb ik de systeem-apk met Root eruit gehaald en gedecompileerd.

Verlichting

Ik ontdekte dat de kiezer de klassen StorageVolume en StorageManager gebruikt. Het herhaalt alle StorageVolume-items die zijn opgehaald met de methode StorageManger.getVolumeList () en roept de methoden StorageVolume.getPath () en StorageVolume.getState () voor elk aan. De vangst is dat deze methoden verborgen zijn. Ze zijn niet privé, maar zijn gemarkeerd met de @hide-annotatie. Nou, wat kun je doen, we krijgen onze reflectie:

StorageManager getStorageManager () (return (StorageManager) mContext.getSystemService (Context.STORAGE_SERVICE);) / * Reflection gebruiken voor het detecteren van alle storages, aangezien Android waarschijnlijk niet werkt met USB-OTG werkt alleen op API 19+ * / public List getAllPaths () (Lijst allPaths = nieuwe ArrayList<>(); probeer (klas)storageVolumeClass = Class.forName ("android.os.storage.StorageVolume"); Methode getVolumeList = getStorageManager (). GetClass (). GetMethod ("getVolumeList"); Methode getPath = storageVolumeClass.getMethod ("getPath"); Methode getState = storageVolumeClass.getMethod ("getState"); Object getVolumeResult = getVolumeList.invoke (getStorageManager ()); uiteindelijke int lengte = Array.getLength (getVolumeResult); voor (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; }

De vraag is, waarom is er geen officiële manier om dit te doen? Ja, het is niet helemaal betrouwbaar om reflectie te gebruiken in een gevechtsproject, maar er zijn geen andere opties: als het systeem zelf deze code gebruikt, dan werkt het in alle gevallen. De praktijk bevestigt dit.

SAF (Storage Access Framework)

Officiële documentatie:

Het SAF-platform maakt het voor gebruikers gemakkelijk om documenten, afbeeldingen en andere bestanden te vinden en te openen in de repositories van alle leveranciers waarmee ze werken. Een standaard, gebruiksvriendelijke interface stelt gebruikers in staat om bestanden te vinden en toegang te krijgen tot de meest recent toegevoegde bestanden, consistent in alle applicaties en leveranciers.

p> SAF verzamelt contentproviders (DocumentProvider-subklassen). Dit zijn bijvoorbeeld Google Drive, verschillende galerijen en bestandsbeheerders.

SAF geeft de URI van documenten (bestanden) die schrijf- of leesrechten hebben. We kunnen zeggen dat dit zo'n laag boven bestandstoegang is. De File-klasse zelf weet niets over SAF.

p> Om gegevens op de kaart te kunnen bewerken, moet u de URI van de root van de SD-kaart ophalen, die de rechten heeft om te bewerken. Vervolgens kunt u met behulp van deze URI de URI van elk bestand op de geheugenkaart ophalen. Om dit te doen, moet je de systeemkiezer starten met de Intent ACTION_OPEN_DOCUMENT_TREE en de gebruiker vragen om de root van de SD-kaart te selecteren (anders werkt niets!).

In afbeeldingen:


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

Hier gebeuren heel belangrijke dingen: in onActivityResult verwerken we de keuze van de gebruiker en verwerven we de gekoesterde rechten om toegang te krijgen tot de kaart. Over het algemeen worden de rechten gegeven totdat het apparaat opnieuw wordt opgestart en zodat u na het opnieuw opstarten van het apparaat om de gebruiker niet om toestemming te sturen, de methode moet gebruiken

TakePersistableUriPermission (Uri uri, int modeFlags)

met vlaggen om te schrijven en te lezen. Na al deze manipulaties moet je de ontvangen Uri SD-kaart ergens opslaan om er verder mee te werken, bijvoorbeeld in SharedPreferences.

@RequiresApi (api = Build.VERSION_CODES.KITKAT) @Override protected void onActivityResult (int requestCode, int resultCode, Intent data) (super.onActivityResult (requestCode, resultCode, data); if (requestCode == REQUEST_CODE_SD_CARD & takeConplication , data.getData ())) (// doe je ding)) @RequiresApi (api = Build.VERSION_CODES.KITKAT) private boolean takePermission (Contextcontext, Uri treeUri) (/ * Het zou handig zijn om een ​​controle toe te voegen dat de inkomende URI is een kaart-URI. Ik laat deze taak als een oefening voor de lezers * / try (if (treeUri == null) (return false;) context.getContentResolver (). takePersistableUriPermission (treeUri, Intent.FLAG_GRANT_WRITE_URI_PERMISSION_ | Intent_FLAGREMISSION_URI_ ; sharedPreferences.putString (SD_CARD_URI, treeUri.toString ()); return true;) catch (uitzondering e2) (e2.printStackTrace (); return false;))

Interactie met SD-kaart

De lezer vermoedt waarschijnlijk al dat we niet op een normale manier met bestanden kunnen communiceren (zoals file.renameTo (file2)). Als we naar de code van de methode file.renameTo (File) kijken, zien we niets verdachts, geen controles. En terecht, want de controles zijn op bestandssysteemniveau. En als we proberen het bestand op de SD-kaart te wijzigen met de gebruikelijke middelen, krijgen we de volgende uitzondering:

Java.io.IOException: kan geen wijzigingen aanbrengen in het bestand uw_bestand.ext

Hier is een interessante manier om te bepalen of een bestand kan worden gewijzigd:

Public boolean isFileWritable (Bestandsbestand) (boolean beschrijfbaar; try (new FileOutputStream (file, true) .close (); writable = file.exists () && file.canWrite ();) catch (IOException e) (writable = false; ) terug beschrijfbaar ;)

Als het bestand op een kaart staat, krijgen we een IOException.

Om een ​​bestand op een geheugenkaart te wijzigen, hebben we een DocumentFile nodig die ons bestand vertegenwoordigt, maar met de schrijfrechten die we hebben gekregen met SAF.

Aan het begin van dit artikel had ik het over twee intenties voor SAF: ACTION_OPEN_DOCUMENT_TREE en ACTION_OPEN_DOCUMENT. En ik zei dat we de tweede bedoeling niet zullen gebruiken, omdat dit de gebruiker dwingt om handmatig naar het bestand te zoeken. Maar we hebben de URI die we met de eerste bedoeling hebben gekregen en dat betekent ... Nee, er is geen standaard API om de DocumentFile op te halen, alles wordt afgehandeld.

Het algoritme is als volgt:

  1. We hebben Bestand
  2. Bepaal de naam van de schijf waarop dit bestand zich bevindt
  3. We bepalen het pad van het bestand ten opzichte van de schijf waarop het zich bevindt. We krijgen een regel als android / map / bestand.txt
  4. Scheid de regel met het symbool «/»
  5. Zoek in een lus voor elk ontvangen deel een DocumentFile dat dit pad vertegenwoordigt, gebaseerd op het DocumentFile voor het vorige deel
  6. Als het algoritme zonder fouten is voltooid, hebben we een DocumentFile aan de uitvoer, die ons bestand vertegenwoordigt

Openbaar DocumentFile getDocumentFile (Bestandsbestand) (DocumentFile document = null; String baseFolder = null; for (Stringpad: getAllPaths ()) (File filePath = nieuw bestand (pad); if (filePath.getAbsolutePath (). StartsWith (file.getAbsolutePath ())) (baseFolder = filePath.getAbsolutePath (); break;)) if (baseFolder == null) (return null;) try (String relativePath = file.getCanonicalPath (). substring (baseFolder.length () + 1) ; Uri permissionUri = Uri.parse (sharedPreferences.getString (SD_CARD_URI)); document = getDocumentFileForUri (permissionUri, relativePath);) catch (uitzondering e) (e.printStackTrace ();) document retourneren;) / * Methode voor het ophalen van DocumentFile ( stappen 4-6) * / private DocumentFile getDocumentFileForUri (Uri treeUri, String relativePath) (String parts = relativePath.split ("/"); if (parts.length == 0) (return null;) DocumentFile document = DocumentFile.fromTreeUri (mContext, treeUri); for (String part: parts) (DocumentFile nextDocument = document.fi ndFile (deel); if (nextDocument! = null) (document = nextDocument;)) retourdocument; )

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

Een voorbeeld van het kopiëren van een klassenbestand Bestand naar DocumentFile:

Public void copyFile (File sourceFile, DocumentFile document) (FileInputStream inputStream = null; FileOutputStream outputStream = null; probeer (inputStream = nieuwe FileInputStream (sourceFile); outputStream = (FileOutputStream) mContentResolver.openOutputUputriel (document) (document). .getUriel ()); FileInputStream inputStream.getChannel (); FileChannel fileChannelOut = outputStream.getChannel (); fileChannelIn.transferTo (0, fileChannelIn.size (), fileChannelOut); // noinspection ResultOfMethodCallIgnprint sourceFile); noinspection ResultOfMethodCallIgnored sourceFile.delete ();) tot slot (probeer (if (inputStream! = null) inputStream.close (); if (outputStream! = null) outputStream.close ();) catch (IOException e) (e.printStackTrace ( ;)))

En ik wil ook zeggen dat de code nu gevuld zal zijn met dergelijke controles.

Public void writeFile (Bestandsbestand) (boolean fileWritable = isFileWritable (bestand); boolean hasSdCardUri =! SharedPreferences.getString (SD_CARD_URI) .isEmpty (); if (fileWritable || hasSdCardUri) (/ * u kunt het bestand normaal bewerken, of SAF * / return;) if (Build.VERSION.SDK_INT> = 21) (/ * welkom! (de gebruiker om toestemming vragen) * / throw new NoLollipopWritePermissionException (); `) else if (Build.VERSION.SDK_INT == 19) (/ * tot ziens! (kan niet bewerken) * / gooi nieuwe NoKitkatWritePermissionException ();))

Conclusie

Ik hoop dat mijn ervaring beschreven in het artikel degenen die nog niet met een SD-kaart hebben gewerkt, zal helpen om veel onderzoek en zoeken te vermijden.

1. Laad het apparaatinstallatiebestand SAS4Android.apk

2. Schakel op uw apparaat (telefoon, tablet, enz.) toestemming in om applicaties van derden te installeren (niet van de Market). Dit kan in de instellingen van je apparaat: Instellingen - Beveiliging - Onbekende bronnen- Vink het vakje aan Installatie van applicaties van onbekende bronnen toestaan(Na installatie van SAS4Android kan dit selectievakje worden uitgeschakeld). Kopieer het bestand SAS4Android.apk naar uw apparaat en voer de installatie uit.

3. Voer het bestand uit SAS4Android.apk .

4. Bij de eerste start verschijnt een venster waarin wordt gevraagd naar het pad naar de root van de cd-kaart en akkoord gaat met de gebruiksvoorwaarden. druk op OKE. Ook wordt bij de eerste keer opstarten automatisch de werkmap van de toepassing gemaakt - SAS4Android en er is een map werk. Dit is de werkmap van het programma, waarin de benodigde gegevens worden opgeslagen. Houd er rekening mee dat u moet specificeren: pad naar de wortel SD-kaarten (en niet naar een andere map) - dit is belangrijk!

Standaard is de programmamapstructuur als volgt:

SD card_root / SAS4Android / werk - werkmap - automatisch aangemaakt;

SDcard_root / SAS4Android / cache - map met cache - gemaakt door de gebruiker.

Als de standaard mappenstructuur wordt gebruikt, detecteert het programma automatisch de paden naar de vereiste mappen en bestanden. Als een andere mappenstructuur wordt gebruikt, moeten de paden handmatig worden opgegeven. Op apparaten met een Android-versie ouder dan 4.3.x wordt aanbevolen om de standaard mapstructuur te gebruiken.

U kunt het pad naar de kaart op de volgende manier bepalen: Voordat u de SD-kaart in het apparaat plaatst, maakt u er (op een computer) een map met begrijpelijk voor jou naam, bijvoorbeeld naam.
Koppel het apparaat los van de computer, anders is de SD-kaart in de opslagmodus niet beschikbaar voor Android en alle programma's. (Het is handiger om het programma MyPhoneExplorer te gebruiken om met een computer te communiceren, waardoor je via een computer informatie op het apparaat kunt bewerken en de SD-kaart voor iedereen toegankelijk blijft). Open een bestandsbeheerder op uw apparaat en voer in de meeste wortel apparaatmap. Er zullen meerdere mappen zijn. Als u door hun inhoud kijkt, vindt u in een van hen "uw" map. Het pad dat de bestandsbeheerder toont tot wortel deze map is wat je nodig hebt. Onthoud of schrijf het op. Op verschillende apparaten en versies van Android zijn verschillende opties voor de locatie en naam van de SD-kaartmap mogelijk. Als er een map is mnt bijvoorbeeld mnt / sdkard , of mnt / externe_sd , of mnt / extSdkard ... Op sommige apparaten zijn mappen mnt is misschien niet. In dit geval bevindt de map op de kaart zich meestal direct in de root van het apparaat, bijvoorbeeld: / Sdkard of / Sdkard1 of / extSdkard ... Op Android-versies 4. en hoger wordt meestal de volgende map gevonden: opslag / Sdkard of opslag / Sdkard1 of opslag / externe_sd of opslag / extSdkard .
Stel dat we hebben vastgesteld dat onze SD-kaart is gemount als: / mnt / extern ... Dit is precies het pad dat u moet invoeren (of het is beter om te kiezen door het bestandsdialoogvenster te openen met de [...] knop) wanneer u het programma voor het eerst start voordat het menu verschijnt.

Functies van starten op Android 4.4 en hoger

Op Android 4.4 en hoger zijn de applicatierechten om naar de SD-kaart te schrijven verwijderd. Als de fabrikant de firmware tijdens de montage niet heeft gecorrigeerd, kan de toepassing op een niet-geroot apparaat niet naar de SD-kaart schrijven. In dit geval zal het programma zelf proberen te vinden waar de werkdirectory moet worden geplaatst. Hoogstwaarschijnlijk is dit een map in het gedeelte met toepassingsgegevens in het interne geheugen (niet-opslag) van het apparaat.
In dit geval zal het programma werken, de gegevens worden naar de map geschreven werk , lees vanaf daar. Maar de gebruiker wordt de mogelijkheid ontnomen om iets uit de map te nemen werk of zet er iets op. Natuurlijk hebben we het over een niet-geroot apparaat. Als deze gang van zaken bij de gebruiker past, hoeft er verder niets te gebeuren. Anders moet je met je handen werken.
We moeten een plaats op het apparaat vinden waarnaar het programma gegevens kan schrijven, en we kunnen deze gegevens daar vandaan halen en zo nodig onze eigen gegevens toevoegen.
Experimenteel zijn we erin geslaagd om zo'n plek te vinden. Installatieprocedure:

1. We verbinden het apparaat met een USB-kabel met de computer en creëren in de directory intern geheugen map Gegevens ... Of in het apparaat zelf doen we hetzelfde met de bestandsbeheerder. Het pad moet zijn opslag / sdcard0 / gegevens ... In de map Gegevens we plaatsen het bestand .geen media .
Aandacht! Alle pogingen om een ​​map te maken werk(zichtbaar en bewerkbaar op de computer) op andere plaatsen/mappen in het interne geheugen mislukt... U kunt het aanmaken, en zelfs wanneer u SAS4Android voor de eerste keer start, kunt u het pad naar de gewenste map specificeren. Maar na installatie wordt toegang tot deze map onmogelijk. U kunt door de bestandsbeheerder van het apparaat kijken, maar het is onmogelijk om iets toe te voegen (tracks, nieuwe licentiesleutel, kaart-/laagconfiguraties, enz.) vanaf een verwijderbare kaart of computer, of deze te kopiëren naar een verwijderbare kaart of computer.
Waarom is de naam gekozen voor de map? "Gegevens" ? De truc is dat het overeenkomt met de naam Gegevens , geaccepteerd in de standaardterminologie van het apparaat, en bovendien maakt Android onderscheid tussen hoofdletters en kleine letters. In totaal beschouwt het Android-systeem deze map als zijn eigen map en beperkt het de inhoud ervan niet in rechten.

Hier is een kant-en-klare, bewezen manier om de beperkingen van Android 4.4x te omzeilen. Het is de gebruiker niet verboden te experimenteren met de locatie en naam van deze map.

Nu de map die we hebben gemaakt opslag / sdcard0 / gegevens zal fungeren als het pad waarnaar u moet specificeren wanneer u het programma voor het eerst start.
2. Creëer bij de wortel extern SD-kaartmap SAS4Android , en in deze map is er een map cache ... Daar leggen we de cache. Het pad naar de cache zal zijn .
3. Bij de eerste keer opstarten vraagt ​​het programma om het pad naar de root van de SD-kaart. We geven het pad aan naar de map die we hebben gemaakt: opslag / sdcard0 / gegevens ... In map Gegevens het programma maakt een map aan SAS4Android , en daarin de map werk met een standaard basisset bestanden. Nu zullen alle werkbestanden van het programma zich in de map bevinden opslag / sdcard0 / gegevens / SAS4Android / werk en we zullen er toegang toe hebben.
4. Nu moet je het programma het pad naar de cache vertellen, omdat we het anders hebben dan het standaardpad. Om dit te doen, typt u in het lopende programma Instellingen - Map cache map en gebruik het bestandsdialoogvenster om het pad op te geven opslag / sdcard1 / SAS4Android / cache .Installatie voltooid.
#!!! Talrijke controles hebben aangetoond dat met deze installatie van SAS4Android op apparaten met Android 4.4.4, met verdere updates of zelfs volledige verwijdering en herinstallatie van de applicatie, de directory opslag / sdcard0 / gegevens blijft werken, inhoud werk gaat niet verloren en breekt niet, toegang tot bewerking werk zowel via het apparaat als via de computer is geopend. Getest op Sony Xperia Z en Z3 compact en WinXP / Win7.
#!!! Dat de werkmap werk wordt gedwongen in het interne geheugen van het apparaat te staan, er is één belangrijk pluspunt - in het geval van een storing / vallen van de SD-kaart in het veld, en dit kan iedereen overkomen, verlies je (tijdelijk) alleen de cache, en de tracklog en de rest van de inhoud werk zal heel en werkend blijven.
Het advies : het is altijd handig om een ​​extreme reserve te hebben - periodiek, na het verschijnen van belangrijke nieuwe tracks en punten, kopieer/bewaar ik dit gewijzigde werk werk naar de SD-kaart naar de native SAS4Android-map, naast cache ... Daar werk, werkt natuurlijk niet - het is gewoon een save. En plotseling hapert het beest - dan zal de kaart helpen bij het gedeeltelijke herstel.

#!!! In Android 4.4.x (als de fabrikant de firmware niet heeft aangepast tijdens de montage) online ruilen het in kaart brengen van gegevens in een onverpakte cache van services van derden met behulp van scripts die zijn geschreven in JavaScript, zonder wortel alleen mogelijk naar het interne geheugen. Om de cache te laden online u moet bovendien een tweede map maken cache in de werkmap van het programma opslag / sdcard0 / Gegevens / SAS4Android / en zet daarin vooraf het benodigde aantal mappen met de namen van de bronnen van kaarten/lagen en met de daarin geplaatste scripts. U zult moeten wennen aan het schakelen tussen de twee cachedirectory's, afhankelijk van uw huidige behoeften: werken zonder te wisselen - met de cache , en met pompen - we schakelen over naar cache in het interne geheugen.

Ga naar het menu met programma-instellingen.

Na het starten van het programma wordt het verlaten van het instellingenmenu uitgevoerd door op de systeemknop "Menu" te drukken. Dit kan een hardwareknop zijn of een schermknop onder aan het scherm ( drie verticale punten). Afhankelijk van je apparaat en de versie van Android erop, kan dit een hardwareknop zijn of een schermknop onderaan het scherm. Op veel nieuwe toestellen met Android versie 4 en hoger wordt deze knop gecombineerd met de knop voor de lijst met actieve applicaties ( twee uitgelijnde rechthoeken). In dit geval is het voldoende om naar het menu te gaan houd ingedrukt actieve toepassingen knop totdat het instellingenmenu verschijnt.

Functies om SAS4Android aan en uit te zetten

Wanneer u het programma start, zijn alle modi ingeschakeld: kaarten weergeven, navigatie, een tracklog opnemen (een service starten). Het is mogelijk om de applicatie af te sluiten (in de slaapstand te zetten) zonder de service te stoppen, d.w.z. tracklog opnemen. Afhankelijk van de instellingen (track log opname modus, service stop modus), indien nodig, start een ander programma, bel of beantwoord een oproep terwijl u de lopende service opslaat, gebruik ofwel de knop rug, of de "home"-knop in de vorm van een huis.

Om de service te stoppen, afhankelijk van de instellingen, dubbelklikt u op de knop "Terug" of laat u het "gordijn" zakken in de lijst met actieve applicaties, klikt u op de regel SAS4Android, druk op de knop Stop.

#!!! Op tablets staat de statusbalk meestal onderaan. Aan de rechterkant zijn pictogrammen van actieve applicaties gegroepeerd. Als u op een pictogram klikt, verschijnt er een venster met een liniaal met pictogrammen voor "Snelle parameters" (geluid, WiFi-helderheid, BT, netwerk, locatie, enz.), en hieronder vindt u een regel voor regel lijst met actieve applicaties .

Kenmerken van de distributie van het programma

Programma SAS4Android gratis verspreid.

Vervaldatum van de aanvraag - notitie van de auteur.

Na herhaalde en kwaadwillige inbreuk op het auteursrecht door enkele oneerlijke navigator-handelaren, moest de auteur een beperking invoeren - na installatie (of de volgende update) van het programma SAS4Android werkt goed gedurende 1 maand vanaf de datum waarop de update is gepost, en wordt vervolgens gedeeltelijk "onderbroken" - wegrotten... Dit komt tot uiting in het verkorten van de tijd van continu opnemen van de tracklog (meestal binnen 20-30 minuten) waarna de opname stopt, een bijbehorend bericht verschijnt op het scherm. Het enige dat overblijft is om het programma opnieuw te starten (sluit de applicatie en service en start ze opnieuw). En dus een onvoorspelbaar aantal keren tot het einde van de reis. In dit geval worden de tracks opgenomen, maar met pauzes. Een eenvoudige maar lastige oplossing voor dit probleem is een regelmatige update, eenmaal per maand. Elke nieuwe update heeft een latere "fade"-datum, dus update en ga je gang ...

Maar er is een betere manier.

Het programma heeft een algoritme voor het verwijderen van de beperking - de license.dat-sleutel, die "fading" uitschakelt. De auteur overhandigt de sleutels als blijk van dankbaarheid aan degenen die het project hebben gesteund. Vraag dus niet "hoeveel" of "hoe te kopen". Ga naar een willekeurige pagina van het forum en bekijk de koptekst aandachtig.

Sleutels zijn niet te koop! Donaties met vermelding van sleutels of aankopen in de opmerkingen worden teruggestuurd naar de afzender.

Om een ​​sleutel te genereren, heb je een bestand nodig deviceld.txt ... Het wordt gevormd door het SAS4Android-programma zelf en in de map geplaatst werk .

Controleer eerst of er een bestand op uw apparaat staat. deviceld.txt er is.

Als het er niet is, kunt u geen sleutel voor uw navigator maken (helaas zijn er enkele zwaar afgekapte modellen waarop dit mechanisme niet werkt).

Als je een bestand hebt deviceld.txt leeg of werkt niet (bleef van de oude versie van het programma naar een fabrieksreset of systeemupdate).

1. Verwijder de oude deviceld.txt .

2. Voer het programma uit.

3. We wachten tot de satellieten worden gevangen (de coördinaatlijn wordt zwart).

4. Sluit het programma. Er moet een geldige identificatie in de map verschijnen werk .

Let op het feit dat de sleutel is gekoppeld aan de apparaat-ID. Op Android verandert het installeren van een systeemupdate de apparaat-ID. Dit is ook het gevolg van een reset naar de fabrieksinstellingen. (Waarom? Vraag het de fabrikanten van uw apparaat).

Dus als u het systeem bijwerkt of een fabrieksreset uitvoert, werkt de sleutel niet meer.

Dit kan echter worden opgelost door de sleutel te wijzigen. Alle vragen over het opheffen van beperkingen stelt u in een persoonlijk bericht aan de auteur van het programma.