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:
  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?

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:
/ Android / obb /
az út a megosztott tárhely, beszerezhető a getExternalStorageDirectory ().
van az alkalmazás Java-style csomag neve, beszerezhető a getPackageName ().
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. fájlba.
Forrás: source.android.com

Kapcsolódó cikkek