Megközelítés az utat az SD memóriakártyára android
Megközelítés az utat az SD Card memóriakártya Androidon 14
- 03.04.15 07:21 •
- VAIT •
- • # 254813
- • Habrahabr
- 16 •
- 11897
- mint a Forbes, csak jobb.
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
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?
UPD1: A forráskód osztály bitbucket
Most már nem nagyon fontos, de elméletileg egy memóriakártyát nagyobb, mint a beépített „külső” memóriát. Ezért potenciálisan nagy bázis jobb tárolni a memóriakártyán. Én az ilyen megfontolások kezdett keresni egy másik.
Abban a pillanatban én LG L65. Kijelentette 4 GB memóriával, amelyek a felhasználó használhatja csak 1,5. Tedd alkalmazás, Tone, stb és mindössze 200 MB.
UPD. Viber, például minden üzlet a külső memória. Ennek megfelelően helyezze folyamatosan csökken.
Azt hiszem, van vayber üzletek csak a hangerő a médiafájlok, nem pedig a teljes levelezés. Lehet, hogy egy nagyszámú, viszonylag nagy fájlokat, ez igaz, de biztosan nem a „potenciálisan jó kiindulópont.”
1) Hogyan lehet egy jó kiindulópont, hogy getExternalStorageDirectory () nem teljesen elégedett? (Remélem, a média fájlokat a blob-ah nem tárolja)
2) Ha az adatbázis valóban nagy, ez tárolja a rengeteg rekordot. Nem hiszem, hogy meg kellene sütni rekordokat minden felhasználó (akár anélkül, hogy root).
Én is nem értem, de hány ember felháborodott kiabálva kell játszani a letöltött erőforrások egy flash meghajtót, és nem a Environment.getExternalStorageDirectory () - egyelőre nem tettek ezer egység a felülvizsgálat, mert ez. És mellesleg, az összes fenti sámánizmus még nem fog megmenteni és egzotikus leves, amelyek meghatározzák a megfelelő nem fog működni - és így nagyobb az esélye, hogy adja meg az utat a karok hozzá.
Hmm ... Azt hiszem, kifejezetten erre, vagy ott Expansion fájl?
Az adott helyen a kiegészítő fájlokat is:
Nem tudom megérteni az elégedetlenség a felhasználók számára. Ez egy bevett gyakorlat.
OBB nem segít - a devaysakh getExternalStorageDirectory ami azt jelzi, a belső memória, ha van SD-kártya, OBB is leng a belső memóriában
Például a gépemen a / mnt / van «sdcard» mappa - arra utal, hogy a külső memória. memóriakártyát / mnt / nincs csatlakoztatva. Azt hiszem, ez nem a legjobb módszer.
Csodálatos, és a legjobb, véleményem szerint, egy lehetőség lenne a térképet «vold.fstab». De sajnos, a legújabb androjda (4,3), az iratbetekintés gyökér nélkül nem fog. Igen, és ez az úgynevezett eltérő, és található egy másik helyen:
Az Android 4.2.2 és korábbi, a készülék-specifikus vold.fstab konfigurációs fájl határozza meg leképezés a sysfs eszközök fájlrendszer csatolási pontokat
Az Android 4.3 és újabb közlemény a különböző fstab fájl által használt init, vold és helyreállítási egyesítették a / fstab.
Forrás: source.android.com