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:
- létrehozásához StringBuilder
- írja a teljes mérete a készülék mérete és eszköz tér
- kiiktatott gyökér tartalom
- írja a nevét a könyvtárban
- írja le a fájl neve és mérete
- 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?