Image
30.6.2016 0 Comments

Programujeme pre Android /13. časť

V tejto časti seriálu budeme pokračovať v procese vývoja vzorovej aplikácie db_sync. Zameriame sa na prácu so súbormi. V prvom rade uvedieme základné fakty týkajúce sa súborových systémov (file systems), ktoré dokáže využiť OS Android. Následne v stručnosti opíšeme triedy a metódy, ktoré budeme používať pri práci so súbormi v rámci našej vzorovej aplikácie.

Súborové systémy využívané Androidom

Skutočnosť, že operačný systém Android využíva linuxové jadro, má priamy súvis so súborovými systémami, ktoré dokáže využiť (spravovať), a takisto aj s hierarchiou zložiek (súborov). Základom hierarchie je jednoduchý integrovaný strom zložiek (súborov) začínajúci sa zložkou „/“ (koreň – root stromu). Do koreňovej zložky sú zahrnuté všetky ostatné zložky (súbory) vrátane zložiek reprezentujúcich ostatné médiá (interné či externé).

Cestou (path) sa rozumie časť integrovanej stromovej štruktúry vedúca ku konkrétnej zložke (súboru), resp. dátovému médiu. Absolútnou cestou je cesta začínajúca sa zložku „/“. Android používa koncept pripájania (mount) a odpájania (umount) zložiek (médií) známy z prostredia Linuxu. Stromovú štruktúru delí na internú (internal flash drive) a externú (external drive) časť (priestor). Stále pritom hovoríme o jedinom integrovanom strome, ktorého jednotlivé zložky tvoria tzv. prípojné body (mount points) či už pre súborové systémy, alebo pre ostatné médiá (napr. karty SD). Všetky súborové systémy sú teda vždy súčasťou spoločnej stromovej hierarchie.

Operácie so zložkami (súbormi), resp. médiami využívajú abstraktnú vrstvu jadra nazývanú VFS (Virtual File System). Konkrétnou implementáciou VFS sú aj súborové systémy. Tie sú implementované vo forme modulov jadra (zabudované v jadre, resp. dynamicky nahrávané) a využívané v okamihu zadania požiadavky na pripojenie konkrétneho súborového systému, resp. zariadenia.

Najčastejšie používané súborové systémy Androidu sú:

pre pamäte flash pre ostatné médiá pre „pseudo“ systémy
exFAT, F2FS, JFFS2, YAFFS2 EXT2 / EXT3 / EXT4, MSDOS, VFAT cgroup, rootfs, procfs, sysfs, tmpfs


Podobne ako v Linuxe je na kompletnú správu hierarchie stromu nevyhnutné vystupovať ako administrátor (root). Iba vtedy možno vidieť a modifikovať všetky časti stromu. Štruktúru stromu možno prezerať napr. pomocou ADM s privilégiami konkrétneho používateľa.

Hierarchia systémových zložiek smartfónu Samsung SM-G357FZ, zobrazená nástrojom Android Device Monitor

Aj keď sú všetky uvedené fakty štandardom, ten sa nie vždy úplne dodržiava a niektorí výrobcovia zariadení sa od neho viac či menej odchyľujú. Nám nezostáva nič iné ako na tieto odchýlky reagovať a prispôsobiť im svoje aplikácie.

Hierarchia systémových zložiek

Napriek tomu, že usporiadanie zložiek najvyššej úrovne (top level) nemusí byť na všetkých zariadeniach rovnaké, spoločný koncept vychádza z nasledujúcej štruktúry:

acct evidencia (accounting) používateľov
cache úložisko dočasných údajov
d, etc, sdcard, vendor symbolické odkazy na /sys/kernel/debug, /system/etc, /mt/sdcard, /system/vendor
data, dev, mnt prípojné body pre /dev/block/mtdblock1, tmpfs – dostupné zariadenia, interné / externé karty SD a ostatné súborové systémy
init aplikácia vykonávajúca skript init.rc – konfigurácia zariadenia po štarte
proc, sbin prístup k dátovým štruktúram jadra, binárne súbory démonov
root domáca zložka používateľa root
sys, system objekty a vlastnosti objektov zariadení jadra, zložky pôvodne zaradené do koreňa štandardného linuxového stromu

Práca so súbormi a aplikácia db_sync
Dôvod, pre ktorý sme sa rozhodli pracovať so súbormi v rámci aplikácie db_sync, je umožniť používateľom pridávať do tabuliek databáz súbory ľubovoľných typov, čo je bežná funkcionalita podobných aplikácií. Tento článok tvorí úvod k téme práce so súbormi. Teórii, ako aj praktickej implementácii sa budeme venovať aj nabudúce.Práca so súbormi a aplikácia db_sync

Trieda File
V prvom rade sa musíme oboznámiť s triedou File, ktorá je určená na vykonávanie rôznych činností so zložkami (directory) a súbormi (file). File je abstraktná reprezentácia entity identifikovanej cestou – relatívnou či absolútnou. Entita (zložka, súbor) nemusí pri vytvorení objektu triedy File existovať.

Pri práci s objektmi triedy File vychádzame z principiálneho delenia úložného priestoru Androidu na interný a externý priestor. To platí aj v prípade, že v našom zariadení nemáme nijaký externý disk. Rozdiely sú nasledujúce:

interný priestor externý priestor
vždy dostupný, ale iba z aplikácie, ktorá priestor vlastní nemusí byť vždy dostupný (napr. po vybratí karty SD), obsah môže čítať ľubovoľná aplikácia 
po odinštalovaní aplikácie systém zmaže obsah priestoru po odinštalovaní aplikácie systém zmaže obsah priestoru, iba ak bol vytvorený v zložke sprístupnenej pomocou getExternalFilesDir()
bez nutnosti povolenia prístupu pred použitím musí byť aplikácii povolený prístup v manifeste WRITE_EXTERNAL_STORAGE
sprístupnenie zložky getFilesDir() s voľne dostupným obsahom getExternalStoragePublicDirectory()
so súkromným obsahom – obsah bude odstránený po odinštalovaní aplikácie getExternalFilesDir()

Diagram reprezentujúci proces uloženia (upload) súboru (napr. s obrázkom) na webový server

Pri práci so súbormi budeme v princípe využívať triedu FileInputStream (BufferedInputStream), pomocou ktorej načítavame údaje (bajty) zo súborov a triedu FileOutputStream (BufferedOutputStream), pomocou ktorej ukladáme údaje (bajty) do súborov. Používame pri tom konkrétne metódy read() a write().

Pri prenose súborov medzi zariadením a webovým serverom využijeme triedu Base64. Tá obsahuje nástroje na zakódovanie a dekódovanie binárnych údajov (napr. obrázkov) na ich textovú reprezentáciu (nevyhnutná na korektný prenos obsahu obrázkov na webový server) v súlade s pravidlami kódovania MIME Base64 Content-Transfer-Encoding (RFC2045).

 

 

Zobrazit Galériu
Autor: Marek Sopko

Nechajte si posielať prehľad najdôležitejších správ emailom

Mohlo by Vás zaujímať

ITPro 1

Rozšírená realita pomôže školám

17.12.2016 00:05

Raz vidieť je lepšie ako stokrát počuť a v školstve to platí ešte mnohonásobne viac. Čo však v prípade, ak si študenti majú pozrieť, ako v reálnom čase pracuje jadrový reaktor? Alebo by chceli vidieť, ...

ITPro

Výzvy a perspektívy mobilných sietí

13.12.2016 11:52

Dostupnosť kvalitného mobilného pripojenia vrátane dostatočnej kapacity na prenos dát považujeme v súčasnosti za samozrejmosť.  O niektorých špecifikách a  perspektívach služieb mobilných operátorov v ...

ITPro

Programujeme pre Android 26 / Session Initiation protocol API

11.12.2016 00:00

Nie je žiadnym prekvapením, že Android API (od verzie 9) obsahuje podporu SIP protokolu a to vo forme automatizovaných služieb, pomocou ktorých manažuje prichádzajúce a odchádzajúce hovory. SIP spojen ...

Žiadne komentáre

Vyhľadávanie

ShowIT

Najnovšie videá