Megközelítés az utat az SD memóriakártyára android

Amikor alkalmazást fejleszteni a versenyt, én szembe azzal a problémával, adatbázis tárolására. A probléma az volt, hogyan határozza meg a külső memória kártya. Általában keresni a pontos választ nem adott hálózatban. Ezért egyesíti az összes találat, szedtem neki osztályban. Ha érdekel, nézd a vágás.

Kezdjük az elmélet.

terminológia

A Google azt mondja, hogy ott vannak a következő fogalmakat:

Előtt változat KitKat 4.4 API nem funkcionalitást biztosítanak a módját, hogy a külső memória. Mivel ez a verzió (API 19) most van egy nyilvános absztrakt fájl [] getExternalFilesDirs (String típus), amely visszaadja a string array az útvonalakat a belső és a külső memória. De mi a helyzet az SD-kártya, amely bekerül a nyílásba? Az út ismét nem tudjuk.

keresési eredmények

Ahhoz, hogy erre a kérdésre válaszolni, én fordult a mindentudó Google. De nem ad nekem egyértelmű választ. Azt vizsgálta sok lehetőség, hogy meghatározza a használata a szabványos funkciók, hogy a vezető külső memória, de semmi köze a cserélhető tároló eszközök, nem kell felszerelni a feldolgozó egységek szabályok (Android is fut a Linux kernel). Az utóbbi esetben azt használják „vezetékes” a mappa elérési útját a szerelvényekre megfelelően (különböző változatai a könyvtár más). Ne felejtsük el, hogy az egyik változat, hogy felmászik a szabályok változnak.

A végén úgy döntöttem, hogy összekapcsolják az összes tudás és írt egy osztály, amely visszatér hozzánk felé a külső és cserélhető eszközök.

Leírás kód

MountDevice osztály jött létre. amely tartalmazza az elérési utat a készülék, készülék típusától, és a hash.
Típusú eszközök két részre van osztva (belső memória, nem érint, mert az ahhoz való hozzáférés áll rendelkezésre az API-rendszer).

És StorageHelper osztály jött létre. aki megkeresi a rendelkezésre álló memória kártyákat.

A StorageHelper osztály kétféleképpen találni - a rendszer környezet (Environment) és a Linux szerelhető típus. hanem az eredménye annak végrehajtását.

Első módszer - Környezet

Munka közben a környezetet, azt használja a szabványos getExternalStorageDirectory () függvény, hogy információt kapjunk a külső memória. Ahhoz, hogy információt cserélhető memóriakártya, azt használja a változó „SECONDARY_STORAGE” környezetben.

Külső memória mindig ugyanaz, és általában mindig van, így ellenőrizni az olvashatóságot, kiszámíthatjuk a hash és emlékezni. A cserélhető memóriakártya is sok, így meg kell törni a kapott vonalleválasztó és hogy ellenőrizze minden értéket.

Egy lehetséges megoldás a vett StackOverflow. A válasz valahol ott van.

Második módszer - mount

Mivel én nem dolgozom a hosszú ideje, hogy a rendszer azt az utat, hogy a cserélhető memória, úgy döntöttem, hogy vizsgálja meg az irányt a alkatrészként. A rendszer konfigurációs fájlokat, amelyek leírják a szabályokat rögzítő külső eszközöket. Minden jó, de az Android változat 4. * A fájl hozzáférési halandók nem, úgyhogy nem fogja figyelembe venni ezt a módszert.

Térjünk vissza a mount segédprogramot. Paraméterek nélkül parancsot ad egy listát a csatlakoztatott fájlrendszerek. Cserélhető eszközök általában a FAT fájlrendszer formátumú fog kiosztani egy vonal, ahol van „kövér” funkciót. Külső memória lesz jellemző „biztosíték” paraméter.

Megjegyzés: ha ezt a módszert nem mindig helyes (valószínűleg valami nem vettem észre) azonosítja a típusok smotntirovannyh eszközöket. A különbség figyelhető meg a különböző változatai Android. Ezért ez a módszer használható, mint egy extra.

Egy lehetséges megoldás a vett StackOverflow. A válaszok több nagyjából egyenlő.

körülbelül redundancia

Sokan észre a hegyen könyvtárban eszközök, mint képet:

És mi az a legérdekesebb, mindegy külső memóriakártyán. Ez a széttagoltság kezdődik változata Jelly Bean és ez tette, hogy támogassa többfelhasználós rendszer működését. További részletek itt. És így, hogy ne kapja meg pontosan ugyanazt a memóriakártyát egy másik eszközt, szüksége van egy módja annak, hogy meghatározza a személyazonosságát. Ha nem volt hozzáférése a hegyen konfiguráció, és nem voltak problémák. De nincs kapcsolat. Így rögtön észrevett egy megoldás, hogy a számítás a hash minden eszköz:

  1. létrehozásához StringBuilder
  2. írja a teljes mérete a készülék mérete és eszköz tér
  3. kiiktatott gyökér tartalom
  4. írja a nevét a könyvtárban
  5. írja le a fájl neve és mérete
  6. kiszámoljuk a hash

Feladata kiszámítása hash calcHash

Alkalmazási példa

következtetés

Részletes vita ebben a kérdésben a megértés a memória Android, néhány tipp, megtalálható itt.

A forráskód az egész osztály még sehol sem található. Az egyik ilyen nap megpróbálom hozni GitHub.

Aki még mindig élvezi milyen módon?

Kapcsolódó cikkek