Hur man hittar rotmappen på en flash-enhet. Var finns rotmappen på en flashenhet eller ett minneskort?

Olika uppgifter V i elektroniskt format kan sparas på en speciell enhet som kallas minneskort. Den är designad för att lagra textdokument, ljud- och videoinspelningar, bilder. Den största fördelen med denna typ av minne är enkelheten att registrera information och enhetens kompakthet, tillsammans med betydande mängder lagrad data.

Internminnet representeras av RAM, permanent minne och cacheminne. Dess fördelar inkluderar hastighet, men nackdelen är den begränsade mängden lagrad data.

Ofta för den moderna användaren personlig dator och så vidare elektronisk teknik du måste stöta på följande mening: "installera till roten av minneskortet" eller "kopiera till roten av kortet." Den kan hittas var som helst, eftersom modern teknologi all in större volym börjar stödja tredje parts kort för ökning internminne.

Minneskort är standardiserade. De har vissa mått och placeringen av kontaktdynorna beroende på vilken typ av anordning för användning på vilken de är avsedda.

Detta inkluderar bärbara datorer, surfplattor, smartphones, digital kameror och även PSP med andra spel konsoler. Därför för korrekt funktion Du kan inte klara dig med dem utan en klar uppfattning om vad uttrycket "minneskortrot" kan betyda och var det kan finnas.

Namnet på platsen för att spara data på kortet kommer från engelskt ord rot - "radikal, rot", betecknar något ur-, ur-. Den kom till användning redan i början, när datorer började dyka upp. På dem kallades roten själva innehållet i enheten, det vill säga platsen där systemet startades och där data kunde sparas. I själva verket, med hänsyn till nuvarande minneskort, har denna beteckning inte förändrats alls.

Rotkatalog

Idag är roten på ett minneskort själva katalogen, som finns på kortet. Detta är samma mapp som startas när du klickar på minneskortsikonen i din smartphone eller. Det är bara att ordet rot översattes bokstavligen, och nu används dess ryska analog för att referera till själva kortet. Således, om du blir ombedd att kopiera data till roten, behöver du inte skapa något ytterligare på minneskortet, utan helt enkelt kopiera nödvändiga filer på den själv, i rotkatalogen.

Jag tror att alla har stött på problemet med onda "författare". Och det finns många sätt att lösa det: programvara med öppen källkod, skript, "dansa med en tamburin" etc. Jag vill erbjuda en enkel lösningsalgoritm för OS Windows-användare som inte kräver ingripande från tredje part. För att nå vårt mål kommer vi att behöva flera steg – eller snarare två.

Steg #1 - förberedelse

Formatering filsystem media till NTFS med operativsystemet.

Det finns ingen NTFS när du väljer formatalternativ

Om det inte finns något alternativ att formatera filsystemet i NTFS, vilket är fallet på Windows XP, gör du följande:

  1. Gå till egenskaperna för flashenheten;
  2. Gå till fliken "Utrustning".
  3. Välj vårt flashkort och klicka på egenskapsknappen;
  4. Gå till fliken "Policyer";
  5. Välj alternativet för att använda cachen;
  6. Vi accepterar ändringarna och formaterar den till NTFS;
  7. Sedan returnerar vi den tillbaka till "Snabbradering".

Steg nr 2 - differentiering av rättigheter

Låt oss nu skapa en mapp (" arbetsmapp") i roten och omedelbart ange namnet (i framtiden är det omöjligt att ändra namnet på mappen), all information kommer att lagras i den. Men roten till mappen kommer att vara skrivskyddad. Nu skiljer vi åt rättigheterna:
  1. Gå till säkerhet - öppna egenskaperna för flashenheten, fliken "Säkerhet";

    Om det inte finns någon sådan flik gör du följande

    1. Gå till "Mappalternativ" i "Kontrollpanelen";
    2. På fliken Visa i listan " Extra tillval"vi hittar en parameter som innehåller orden" allmän tillgång" och "(rekommenderas)";
    3. Avmarkera rutan.
    Nu har fliken dykt upp
  2. Klicka på knappen "Avancerat";
  3. I fönstret som öppnas, gå till fliken "Ägare" och klicka på knappen "Ändra";

    För XP

  4. Markera rutan "Ersätt ägare av underbehållare och föremål";
  5. Vi väljer själva och blir ägare till föremålet;
  6. Stängning dialogrutor på begäran av operativsystemet, klicka på "OK" och öppna sedan "säkerhet" och "avancerat" igen;
  7. Vi ändrar behörigheter - för att göra detta, gå till säkerhet och på fliken "Behörigheter", klicka på knappen "Ändra behörigheter" och ta bort befintliga rättigheter;

    För XP

    (i Windows XP finns det ingen "Ändra behörigheter"-knapp, vi agerar omedelbart där)

  8. Lägg till gruppen "Alla" - klicka på knapparna "Lägg till", "Avancerat", "Sök", välj gruppen "Alla", "OK", "OK" från listan;
  9. I fönstret som öppnas ställer du in behörighetsparametrar för gruppen "Alla":
    • "Använd: För denna mapp, dess undermappar och filer";
    • Ställ in följande kryssrutor i fältet "Behörigheter":
      1. Tillåt: "Full kontroll";
      2. Förbjud: "Ändra ägare", "Ändra behörigheter", "Ta bort", "Ta bort undermappar och filer", "Skriv ytterligare attribut", "Skriv attribut", "Skapa mappar / lägg till ytterligare data", "Skapa filer / skriv data" .
  10. Vi accepterar ändringarna, går till den tidigare skapade mappen i roten på flashkortet och utför nästan samma operationer;
  11. Ägarbyte - enligt ett bekant mönster;
  12. Ta bort befintliga rättigheter genom att avmarkera kryssrutan "Lägg till behörigheter som ärvts från överordnade objekt" på fliken "Behörigheter";
  13. I dialogrutan som visas, välj "Ta bort";
  14. Lägg till gruppen "Alla" (vi vet redan hur) och ställ in behörighetsparametrarna:
    • "Använd: För denna mapp, dess undermappar och filer";
    • Markera rutan Tillåt: "Full åtkomst".
  15. Återigen, lägg till gruppen "Alla" och ställ in behörighetsparametrarna:
    • "Ansök: Endast för den här mappen";
    • Ställ in följande kryssrutor för "Neka" i fältet "Behörigheter":
      "Ändra ägare", "Ändra behörigheter", "Ta bort", "Skriv ytterligare attribut", "Skrivattribut"
fördelar
+ Det finns ingen möjlighet att skapa/ta bort filer och mappar i roten på flashkortet. Följaktligen är kryphålet för "autorans" stängt.
+ I "arbetsmappen" full tillgång- vi kommer att ge tillbaka det vi vill ha (lägg betoningen själv).
+ NFTS-filsystemet är helt rätt för personligt bruk. (IMHO)
Minus
- Det är inte möjligt att använda menyalternativet "Skicka" för att kopiera information till vår flash-enhet, eftersom Rotkatalogen är inte skrivbar. Den måste kopieras till "arbetsmappen".
- Det finns inget sätt att byta namn på "arbetsmappen" - i princip skrivskyddad.
- Fil NTFS-system- inte lämplig för enheter som endast läser FAT (musik/videospelare, smartphones, kameror, etc.).
Anteckningar
  • Denna operation utförs bäst på en "frisk maskin". Annars kan du skapa en odödlig autorun;
  • PÅ Windows XP, när jag försökte ta bort "arbetsmappen", fanns den kvar (som den borde vara), men allt inuti raderades;
  • Men i fönster 7 finns alla filer kvar när du försöker ta bort "arbetsmappen";
  • Inuti "arbetsmappen" sparas inte från skadlig programvara, som skapar ett exe med namnet på mappen när den öppnas.

Sedan dök han upp Android Lollipop, och med det nya funktioner för att arbeta med ett SD-kort. Dök upp SAF(Storage Acces Framework), en ny Intent ACTION_OPEN_DOCUMENT_TREE har dykt upp, med vilken du kan välja roten på SD-kortet och sedan använda det för dina behov. Faktum är att SAF fortfarande fanns på KitKat, men utan denna avsikt var det till liten nytta, eftersom det var nödvändigt att använda Intent ACTION_OPEN_DOCUMENT för att komma åt filerna på kortet, som, att döma av namnet, låter användaren välja filen som han eller hon vill redigera manuellt genom systemväljaren. Okej, men om användaren har 5000 filer, kommer han att göra detta? Nej.

Bestämma externa enheter på enheten

Jag börjar med det mest smärtsamma ämnet i arbetet med minneskort. Vi har en underbar metod i Android

Arkiv Environment.getExternalStorageDirectory()

Som namnet antyder är detta vad du behöver. "Extern" översätts som "extern", eller hur? Men du bör inte lita på den här metoden. Den kan returnera sökvägen till internminnet, kanske till kortet, men det händer olika på varje enhet. Denna situation uppstod till stor del pga till olika tillverkare telefoner och deras modifierad firmware och skal. Min poäng är att metoden getExternalStorage() kan returnera sökvägen inte till själva SD-kortet, utan till vad tillverkaren anser vara en extern enhet. Det är här definitionsförvirring uppstår. Extern lagring Detta är inte nödvändigtvis en flash-enhet: på vissa enheter är det internminne, på andra är det verkligen ett SD-kort. Kortets monteringspunkter kan vara vilka som helst:

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

Och det här är inte någon sorts stort problem tills du stöter på det själv.

Det finns många ämnen om StackOverflow med en massa olika alternativ för att definiera en flashenhet, allt från att prova alla möjliga kombinationer monteringspunkter, försök att få Java Miljövariabler System.getenv("EXTERNAL_STORAGE") , System.getenv("SECONDARY_STORAGE") och slutar med analys systemfil/system/etc/vold.fstab. Dessa metoder fungerar, men var och en endast i vissa speciella fall. Inte en enda metod täcker alla enheter, eller fungerar inte alls. Och om det verkar som att alla enheter upptäcks korrekt, kommer det alltid att finnas någon enhet vars kort inte upptäcks av dessa metoder. Jag har provat nästan alla metoder.

För att förstå omfattningen av problemet kommer jag att säga att jag tog itu med det i ungefär fyra månader. Detta problem har funnits sedan 2011, men det finns fortfarande ingen exakt lösning. Under en tid var jag nöjd med denna mer eller mindre fungerande kod:

ArrayList allPaths = ny ArrayList<>(); ArrayList sdPaths = ny ArrayList<>(); för ( Fil fil: mContext.getExternalFilesDirs("external")) ( if (fil == null) (fortsätt; ) int index = file.getAbsolutePath().lastIndexOf("/Android/data"); if (index > 0) ( Strängsökväg = file.getAbsolutePath().substring(0, index); !file.equals(mContext.getExternalFilesDir("extern"))) ( sdPaths.add(sökväg); ) )

Men det kraschade också på vissa enheter. Och återigen, efter att ha fått en enhet på marknaden, gick jag på jakt.

Jag hemsöktes av systemets Android-väljare (deltid filhanterare), där alla enheter alltid är korrekt identifierade. Utan att tänka två gånger drog jag mig ur system apk med Root och dekompilerade den.

Insikt

Jag upptäckte att väljaren använder klasserna StorageVolume och StorageManager. Den itererar genom alla StorageVolume-element som erhållits med metoden StorageManger.getVolumeList() och anropar metoderna StorageVolume.getPath() och StorageVolume.getState() på var och en. Haken är att dessa metoder är dolda. De är inte privata, men är markerade med @hide-kommentaren. Tja, vad kan vi göra, låt oss ta fram vår reflektion:

StorageManager getStorageManager() ( return (StorageManager) mContext.getSystemService(Context.STORAGE_SERVICE); ) /* Använd reflektion för att upptäcka alla lagringar eftersom android gör det förmodligen inte fungerar med USB-OTG fungerar bara på API 19+ */ public List getAllPaths() (List allPaths = ny ArrayList<>(); försök (klassstorageVolumeClass = Class.forName("android.os.storage.StorageVolume"); Metod getVolumeList = getStorageManager().getClass().getMethod("getVolumeList"); Metod getPath = storageVolumeClass.getMethod("getPath"); Metod getState = storageVolumeClass.getMethod("getState"); Objekt getVolumeResult = getVolumeList.invoke(getStorageManager()); final int length = Array.getLength(getVolumeResult); för (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; }

Frågan uppstår varför det inte finns officiellt sätt gör det? Ja, att använda reflektion i ett stridsprojekt är inte helt tillförlitligt, men det finns inga andra alternativ: om systemet själv använder den här koden, fungerar det i alla fall. Övning bekräftar detta.

SAF (Storage Access Framework)

Officiell dokumentation:

SAF-plattformen gör det enkelt för användare att söka och öppna dokument, bilder och andra filer i alla leverantörers arkiv. Standard användarvänligt gränssnitt Tillåter användare att ha ett konsekvent sätt över appar och leverantörer att söka efter filer och komma åt de senast tillagda filerna.

p>SAF samlar innehållsleverantörer (underklasser av klassen DocumentProvider). Detta är t.ex. Google Drive, olika gallerier och filhanterare.

SAF utfärdar URI för dokument (filer) som har skriv- eller läsbehörighet. Vi kan säga att detta är ett lager ovanför filåtkomst. Filklassen vet själv ingenting om SAF.

p>För att kunna redigera data på kortet måste du skaffa URI för roten på SD-kortet, som kommer att ha redigeringsrättigheter. Sedan, med hjälp av denna URI, kan du få URI för vilken fil som helst på minneskortet. För att göra detta måste du starta systemväljaren med Intent ACTION_OPEN_DOCUMENT_TREE och be användaren att välja roten på SD-kortet (annars fungerar ingenting!).

På bilder:


@TargetApi(Build.VERSION_CODES.LOLLIPOP) void showDocumentTreeDialog() (Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE); startActivityForResult(Intent.createChooser(intent, getString(R.CODE)_PERmission), REQUEST_Cintent)_permission);

Mycket viktiga saker händer här: i onActivityResult bearbetar vi användarens val och förvärvar de eftertraktade rättigheterna att komma åt kartan. I allmänhet beviljas rättigheter tills enheten startas om, och för att inte skicka användaren igen för tillstånd efter omstart av enheten måste du använda metoden

TakePersistableUriPermission(Uri uri, int modeFlags)

med flaggor för att skriva och läsa. Efter alla dessa insatser måste du spara den mottagna Uri på SD-kortet någonstans för vidare arbete med det, till exempel i 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_OK &&RESULT_CARD == REQUEST_CODE_SD_CARD) takePermission(getApplicationContext(), data.getData())) ( //do your stuff ) ) @RequiresApi(api = Build.VERSION_CODES.KITKAT) private boolean takePermission(Context context, Uri treeUri) ( /* Det skulle vara användbart att lägg till en kontroll att den mottagna URI:n är kartans URI. Jag lämnar denna uppgift som en övning för läsarna */ try ( if (treeUri == null) ( return false; ) context.getContentResolver().takePersistableUriPermission(. treeUri, Intent.FLAG_GRANT_WRITE_URI_PERMISSION |.FLAG_GRANT_READ_URI_PERMISSION) sharedPreferences.putString(SD_CARD_URI,treeUri.toString() return true;

Interaktion med SD-kort

Läsaren gissar förmodligen redan att vi inte kommer att kunna interagera med filer (som file.renameTo(file2)) på ett normalt sätt. Om vi ​​tittar på koden för metoden file.renameTo(File) kommer vi inte att se något misstänkt, inga kontroller. Och det med rätta, eftersom kontrollerna är på filsystemsnivå. Och om vi försöker ändra en fil som finns på SD-kortet på vanliga sätt, kommer vi att få följande undantag:

Java.io.IOException: Kan inte göra ändringar i filen your_file.ext

Här intressant sätt avgöra om filen kan ändras:

Public boolean isFileWritable(File file) ( boolean skrivbar; try ( new FileOutputStream(file, true).close(); skrivbar = file.exists() && file.canWrite(); ) catch (IOException e) ( skrivbar = false; ) returnera skrivbar ;

Om filen finns på kartan får vi ett IOException.

För att ändra en fil på minneskortet måste vi få en DocumentFile som representerar vår fil, men med de skrivbehörigheter vi fick med SAF.

I början av artikeln talade jag om två avsikter för SAF: ACTION_OPEN_DOCUMENT_TREE och ACTION_OPEN_DOCUMENT . Och jag sa att vi inte kommer att använda den andra avsikten, eftersom detta tvingar användaren att söka efter filen manuellt. Men vi har en URI, som vi fick med den första avsikten, och det betyder... Nej, det finns ingen standard API för att skaffa en DocumentFile, allt görs manuellt.

Algoritmen är så här:

  1. Vi har fil
  2. Bestäm namnet på enheten där filen finns
  3. Vi bestämmer sökvägen till filen i förhållande till enheten där den finns. Vi får en rad som android/mapp/fil.txt
  4. Separera en rad med en symbol «/»
  5. I loopen, för varje mottagen del, hittar vi DocumentFile som representerar denna sökväg, baserat på DocumentFile för föregående del
  6. Om algoritmen slutfördes utan fel, är utdata en DocumentFile som representerar vår fil

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; ) try ( String relativePath = file.getCanonicalPath().substring(baseFolder.length() + 1) ; Uri permissionUri = Uri.parse(sharedPreferences.getString(SD_CARD_URI)); getDocumentFileForUri(Uri treeUri, String relativePath) ( String parts = relativePath.split("/"); if (parts.length == 0) ( return null; ) DocumentFile document = DocumentFile.fromTreeUri (mContext, treeUri); för (String part: parts) ( DocumentFile nextDocument = document.findFile(part); if (nextDocument != null) ( document = nextDocument; ) ) returnera dokument; )

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

Ett exempel på att kopiera en filklassfil till DocumentFile:

Public void copyFile(File sourceFile, DocumentFile document) ( FileInputStream inputStream = null; FileOutputStream outputStream = null; prova ( inputStream = new FileInputStream(sourceFile); outputStream = (FileOutputStream) mContentResolver.openOutgetStream file()FileOutgetStream file()); inputStream.getChannel(); FileChannel fileChannelOut = outputStream.getChannel(0, fileChannelIn.size(), fileChannelOut (); ) slutligen ( försök ( if (inputStream != null) inputStream.close(); if (outputStream != null) outputStream.close(); ) catch (IOException e) ( e.printStackTrace(); ) ) )

Och jag vill också säga att nu kommer koden att fyllas med sådana kontroller

Public void writeFile(File file) ( boolean fileWritable = isFileWritable(file); boolean hasSdCardUri = !sharedPreferences.getString(SD_CARD_URI).isEmpty(); if (fileWritable || hasSdCardUri) ( /* kan du redigera filen normalt, eller SAF-filen */ return; ) if (Build.VERSION.SDK_INT >= 21) ( /* välkomna! (vi ber användaren om tillåtelse) */ throw new NoLollipopWritePermissionException(); ` ) else if (Build.VERSION.SDK_INT == 19 ) ( / * hejdå! (kan inte redigera) */ kasta ny NoKitkatWritePermissionException() ) )

Slutsats

Jag hoppas att min erfarenhet som beskrivs i artikeln kommer att hjälpa dem som ännu inte har arbetat med ett SD-kort att undvika lång forskning och sökning.

1. Ladda ner till enheten installationsfil SAS4Android.apk

2. Aktivera installationsbehörighet på din enhet (telefon, surfplatta, etc.) tredje parts applikationer(inte från marknaden). Detta kan göras i inställningarna för din enhet: Inställningar - Säkerhet - Okända källor- markera rutan Tillåt installation av applikationer från okända källor (efter installation av SAS4Android kan den här kryssrutan avmarkeras). Kopiera filen SAS4Android.apk till din enhet och börja installera den.

3. Kör filen SAS4Android.apk .

4. När du först startar det, visas ett fönster som frågar efter sökvägen till roten på CD-kortet och godkänner användarvillkoren. Klick OK. Vid första start skapas också programmets arbetsmapp automatiskt - SAS4 Android och det finns en mapp i den arbete. Detta är programmets arbetsmapp där nödvändiga data kommer att sparas. Observera att du måste ange vägen är exakt till roten SD-kort (och inte till någon annan mapp) - detta är viktigt!

Som standard är programmappstrukturen som följer:

SD_card_root/SAS4Android/work - arbetsmapp - skapas automatiskt;

SD_card_root/SAS4Android/cache - cachemapp - skapad av användaren.

Om standardmappstrukturen används, upptäcker programmet automatiskt sökvägarna till nödvändiga mappar och filer. Om en annan mappstruktur används måste sökvägarna anges manuellt. I enheter med Android version Före 4.3.x rekommenderas det att använda standardmappstrukturen.

Du kan bestämma vägen till kortet på följande sätt: Innan du sätter i SD-kortet i enheten, skapa (på din dator) en mapp med förståeligt för dig namn, till exempel namn.
Koppla bort enheten från datorn, annars kommer SD-kortet i lagringsläge inte att vara tillgängligt för Android och alla program. (Det är bekvämare att använda för kommunikation med en dator MyPhoneExplorer-programmet, som låter dig redigera information på enheten via en dator och SD-kortet förblir tillgängligt för alla). Öppna valfri filhanterare på din enhet och logga in själva roten enhetskatalog. Det kommer att finnas flera kataloger där. Titta igenom innehållet och hitta "din" mapp i en av dem. Sökvägen som filhanteraren visar till rot den här katalogen är vad du behöver. Kom ihåg eller skriv ner det. I olika enheter och versioner av Android är båda möjliga. olika varianter plats och namn på SD-kortmappen. Om det finns en mapp mnt till exempel mnt/sdkard , eller mnt/external_sd , eller mnt/extSdkard . På vissa enheter, mappar mnt det kanske inte finns. I det här fallet ligger mappen som är monterad på kortet vanligtvis direkt i enhetens rot, till exempel så här: /Sdkard eller /Sdkard1 eller /extSdkard . På Android-versioner 4 och högre finns vanligtvis följande mapp: förvaring/Sdkard eller lagring/Sdkard1 eller lagring/extern_sd eller lagring/extSdkard .
Så låt oss bestämma att vårt SD-kort är monterat som /mnt/extern . Det är exakt den sökvägen som måste anges (eller ännu bättre, väljas genom att öppna fildialogrutan med knappen [...]) när du först startar programmet innan menyn dyker upp.

Funktioner för lansering på Android 4.4 och högre

På Android 4.4 och senare har applikationens rättigheter att skriva till SD-kortet tagits bort. Om tillverkaren inte korrigerade firmwaren under monteringen, kommer applikationen på en icke-rootad enhet inte att kunna skriva till SD-kortet. I det här fallet kommer själva programmet att försöka hitta var arbetskatalogen ska placeras. Troligtvis kommer detta att vara en katalog i applikationsdatasektionen i enhetens internminne (icke-lagring).
I det här fallet kommer programmet att fungera, data kommer att skrivas till mappen arbete , läs därifrån. Men användaren kommer att berövas möjligheten att ta vad som helst från mappen arbete eller lägga något där. Naturligtvis talar vi om en icke-rotad enhet. Om detta tillstånd passar användaren, behöver inget annat göras. I annat du måste arbeta med händerna.
Vi måste hitta en plats på enheten där programmet kan skriva data, och vi kan ta denna data därifrån och lägga till vår egen vid behov.
Experimentellt lyckades vi hitta en sådan plats. Installationsprocedur:

1. Ansluter USB-enhet kabel till datorn och skapa den i katalogen intern lagring mapp Data . Eller så gör vi samma sak på själva enheten med filhanteraren. Vägen måste vara lagring/sdcard0/Data . Till mappen Data lägg filen .nomedia .
Uppmärksamhet! Alla försök att skapa en mapp arbete(synlig och redigerbar på datorn) på andra platser/mappar i internminnet misslyckad. Du kan skapa den, och även när du startar SAS4Android för första gången kan du ange sökvägen till önskad mapp. Men efter installationen blir åtkomst till den här mappen omöjlig. Du kan se enheten via filhanteraren, men lägg till något (spår, ny nyckel licenser, kart-/lagerkonfigurationer, etc.) från ett flyttbart kort eller dator, och även kopiera till löstagbart kort eller en dator - omöjligt.
Varför väljs namnet för mappen? "Data" ? Tricket är att det matchar namnet Data , antagen i standardterminologin för enheten, och dessutom den där Android skiljer mellan stora och små bokstäver. Totalt Android-system uppfattar denna mapp, som sin egen och begränsar inte rättigheterna till dess innehåll.

Här är en färdig, beprövad bypass-metod Android-begränsningar 4,4x. Användaren är inte förbjuden att experimentera med platsen och namnet på denna mapp.

Nu mappen vi skapade lagring/sdcard0/Data kommer att utföra rollen, vars sökväg måste anges när programmet startas första gången.
2. Vi skapar vid roten extern SD-kortmapp SAS4 Android , och i den här mappen - mappen cache . Vi lägger cachen där. Vägen till cachen kommer att vara .
3. När du startar den för första gången kommer programmet att fråga efter sökvägen till roten på SD-kortet. Ange sökvägen till mappen vi skapade: lagring/sdcard0/Data . I mappen Data programmet kommer att skapa en mapp SAS4 Android , och i den en mapp arbete med standard grunduppsättning filer. Nu kommer alla fungerande programfiler att finnas i mappen lagring/sdcard0/Data/SAS4Android/work , och vi kommer att ha tillgång till dem.
4. Nu måste du berätta för programmet sökvägen till cachen, eftersom den skiljer sig från standardsökvägen. För detta ändamål i kör program vi går in inställningar - Karta cachekatalog och använd fildialogrutan för att ange sökvägen lagring/sdcard1/SAS4Android/cache .Installationen slutförd.
#!!! Flera kontroller har visat att med sådan installation av SAS4Android i enheter som kör Android 4.4.4, med ytterligare uppdateringar eller till och med fullständigt avlägsnande och installera om programkatalogen lagring/sdcard0/Data fortsätter att fungera, innehåll arbete går inte vilse eller går sönder, tillgång till redigering arbete öppna både via enheten och via datorn. Testade på Sony Xperia Z, samt Z3 compact och WinXP/Win7.
#!!! Det är arbetskatalogen arbete tvingas hamna på enhetens interna minne, det finns ett betydande plus - i händelse av ett fel/fel på SD-kortet i fältförhållanden, och detta kan hända vem som helst, förlorar du (tillfälligt) bara cachen, men spårloggen och annat innehåll arbete kommer att förbli intakt och fungerande.
Råd : Det är alltid användbart att ha en extrem reserv - med jämna mellanrum, efter att viktiga nya spår och punkter har dykt upp, kopierar/sparar jag denna modifierade fungerande. arbete till SD-kortet i den inbyggda SAS4Android-mappen, bredvid cache . där arbete, naturligtvis, det fungerar inte - det är bara en spara fil. Tänk om besten missar - då kommer kortet att hjälpa till med partiell återhämtning.

#!!! I Android 4.4.x (om tillverkaren inte korrigerade firmwaren under monteringen) byte online mappa data till en uppackad cache från tredjepartstjänster använda skript skrivna i JavaScript, utan rot endast möjligt till internminnet. För att ladda cache uppkopplad du måste dessutom skapa en andra mapp cache i programmets arbetskatalog lagring/sdcard0/Data/SAS4Android/ och placera i den i förväg det erforderliga antalet mappar med namnen på kartkällorna/lagren och skripten placerade i dem. Du måste vänja dig vid att växla mellan två cachekataloger beroende på aktuella behov: att arbeta utan personsökning - med den huvudsakliga cache , och med personsökning - växla till cache i internminnet.

Avsluta till programinställningsmenyn.

Efter att ha startat programmet, gå till inställningsmenyn genom att trycka på systemknapp"Meny". Detta kan antingen vara en hårdvaruknapp eller skärmknapp längst ner på skärmen ( tre vertikala prickar). Beroende på din enhet och versionen av Android på den kan detta vara antingen en hårdvaruknapp eller en skärmknapp längst ner på skärmen. På många nya enheter med Android version 4 och högre kombineras denna knapp med listknappen kör applikationer (två kombinerade rektanglar). I det här fallet räcker det för att gå ur menyn tryck och håll knappen som kör program tills inställningsmenyn visas.

Funktioner för att slå på och av SAS4Android

När du startar programmet är alla lägen aktiverade: visa kartor, navigering, spela in en spårlogg (starta tjänsten). Det är möjligt att avsluta applikationen (sätta den i viloläge) utan att stoppa tjänsten, d.v.s. spårloggar. Beroende på inställningarna (spårloggsinspelningsläge, servicestoppläge), starta något annat program, ringa ett samtal eller svara på ett samtal medan du behåller en pågående tjänst, om nödvändigt, använd antingen knappen tillbaka, eller hemknappen i form av ett hus.

För att stoppa tjänsten, beroende på inställningarna, dubbelklicka på knappen "Tillbaka" eller sänk "gardinen" och klicka på raden i listan över program som körs SAS4 Android, tryck på knappen Sluta.

#!!! Oftast på surfplattor statusrad finns nedan. På dess högra sida är ikoner för program som körs grupperade. Om du klickar på någon ikon kommer ett fönster upp med en linjal med ikoner " Snabbinställningar"(ljud, WiFi-ljusstyrka, BT, nätverk, plats, etc.), och nedan är en rad-för-rad-lista över applikationer som körs.

Funktioner i programdistributionen

Program SAS4 Android delas ut gratis.

Ansökan livslängd - författarens anteckning.

Efter upprepade och skadliga brott mot upphovsrätten av några oärliga navigatorhandlare, var författaren tvungen att införa en begränsning - efter installationen (eller nästa uppdatering) programmet SAS4 Android fungerar korrekt i 1 månad från uppdateringsdatumet och "bryter" sedan delvis - blir ruttet. Detta uttrycks i en minskning av tiden för kontinuerlig inspelning av spårloggen (vanligtvis inom 20-30 minuter), varefter inspelningen stoppas och ett motsvarande meddelande visas på skärmen. Sedan återstår bara att starta om programmet (stäng applikationen och tjänsten och starta dem igen). Och så vidare ett oförutsägbart antal gånger fram till slutet av resan. Spåren är inspelade, men med luckor. En enkel men besvärlig lösning på detta problem är regelbundna uppdateringar en gång i månaden. Varje ny uppdatering har ett senare utgångsdatum, så uppdatera och gå vidare...

Men det finns ett bättre sätt.

Programmet innehåller en algoritm för att ta bort restriktioner - nyckeln license.dat, som inaktiverar "dämpning". Författaren ger nycklarna som ett tack till dem som stöttat projektet. Så fråga inte "hur mycket kostar det" eller "hur man köper". Gå till valfri forumsida och titta noga på rubriken.

Nycklar är inte till salu! Donationer med eventuella omnämnanden av nycklar eller köp i kommentarerna kommer att returneras till avsändarna.

För att generera en nyckel krävs en fil deviceld.txt . Det genereras av själva SAS4Android-programmet och placeras i mappen arbete .

Kontrollera först att filen finns på din enhet deviceld.txt Det finns.

Om det inte finns där, kommer det inte att vara möjligt att skapa en nyckel för din navigator (det finns tyvärr några mycket begränsade modeller där denna mekanism inte fungerar).

Om du har en fil deviceld.txt tom eller inte fungerar (förblev från gammal version program innan du återställer fabriksinställningarna eller uppdaterar systemet).

1. Ta bort den gamla deviceld.txt .

2. Starta programmet.

3. Vi väntar tills den fångar satelliterna (koordinatlinjen blir svart).

4. Stäng programmet. Ett giltigt ID bör visas i mappen arbete .

Vänligen notera faktum att nyckeln är knuten till enhetens ID. På Android, när du installerar en systemuppdatering, ändras enhetsidentifieraren. Återställning till fabriksinställningar leder också till detta. (Varför är det så? Fråga tillverkarna av din enhet).

Så om du uppdaterar systemet eller återställer det till fabriksinställningarna kommer nyckeln att sluta fungera.

Detta kan dock också lösas genom att byta ut nyckeln. Vänligen skicka eventuella frågor om att ta bort begränsningar i ett personligt meddelande till författaren av programmet.