Android

Komponente Android aplikacija

Prijemnici prenosa
*Prijemnik prenosa*  je komponenta koja omogućava da sistem isporuči događaje aplikaciji izvan korisnikovog uobičajenog toka, omogućavajući aplikaciji da odgovori na najave prenosa širom sistema.
Pošto su prijemnici prenosa još jedan dobro definisan unos u aplikaciju, sistem može da isporučuje prenose čak i aplikacijama koje trenutno nisu pokrenute.
Tako, na primer, aplikacija može da zakaže alarm da objavi obaveštenje kako bi obavestila korisnika o predstojećem događaju... i isporukom tog alarma BroadcastReceiver-u aplikacije, nema potrebe da aplikacija ostane pokrenuta dok se alarm ne oglasi.
Mnogi prenosi potiču iz sistema — na primer, prenos koji najavljuje da se ekran isključio, da je baterija prazna ili da je slika snimljena.
Aplikacije takođe mogu da pokrenu prenose — na primer, da obaveste druge aplikacije da su neki podaci preuzeti na uređaj i da su im dostupni za korišćenje.
Iako prijemnici prenosa ne prikazuju korisnički interfejs, oni mogu kreirati obaveštenje na statusnoj traci da bi upozorili korisnika kada se dogodi emitovani događaj.
Češće je, da je prijemnik prenosa samo prolaz ka drugim komponentama i namenjen je za obavljanje veoma male količine posla.
Na primer, može da zakaže JobService da izvrši neki posao na osnovu događaja sa JobScheduler-om.
Prijemnik prenosa je implementiran kao podklasa BroadcastReceiver-a i svako emitovanje se isporučuje kao Intent objekat. Za više informacija pogledajte klasu
BroadcastReceiver.
## Provajderi (Pružaoci usluga)

Provajderi upravljaju skupom podataka aplikacije koji mogu da se uskladište u sistemu, u SQLite bazi podataka, na webu ili na bilo kojoj trajnoj lokaciji za skladištenje kojoj aplikacija može da pristupi. Preko provajdera druge aplikacije mogu da postavljaju upite ili izmene podatke, ako im on to dozvoli. Na primer, Android system obezbedjuje provajdera koji upravlja kontakt informacijama korisnika. Kao takva, svaka aplikacija sa odgovarajućim dozvolama može postavljati upite provajderu, kao što je ContactsContract.Data, da pročita i upiše informacije o odredjenom korisniku.Često se provajder posmatra kao apstrakcija baze podataka, jer postoji mnogo API-ja i podrške ugradjenih u njih. Medjutim, njihova osnovna svrha je drugačija od perspektive dizajna sistema. Za sistem, provajder je ulazna tačka aplikacije za objavljivanje imenovanih stavki podataka, identifikovanih URL šemom. Stoga aplikacija može odlučiti kako želi da mapira podatke koje sadrži u URI imenskom prostoru, prosledjujući te URI-je drugim elementima koji bi ih mogli koristiti za pristup podacima.To sistemu omogućava da uradi nekoliko konkretnih stvari vezanih za upravljanje aplikacijom:

·        Dodeljivanje URI-ja ne zahteva da aplikacija ostane pokrenuta, tako da oni opstaju i nakon zatvaranja njihove glavne aplikacije. Sistem samo mora da se uveri da je glavna aplikacija pokrenuta onda kada preuzima podatke odgovarajućeg URI-ja.

·        URI-ji takodje obezbedjuju važan bezbedonosni model. Na primer, aplikacija može da postavi URI za fotografiju koju ima u klipbordu. Ali ostavi svog provajdera zaključanog kako mu druge aplikacije ne bi mogle slobodno pristupati. Kada neka druga aplikacija pokuša da pristupi URI-ju na klipbordu, sistem može dozvoliti toj aplikaciji da pristupi podacima putem privremene dozvole za URI, tada joj je dozvoljen pristup samo podacima iza tog URI-ja.

Provajderi su takodje korisni za čitanje i pisanje podataka koji su privatni i ne dele se.

Pružaoci usluga su implementirani kao podklase ContetProvider-a i mora implementirati standardni set API-ja koji omogućavaju drugim aplikacijama da obavljaju transakcije. Za više informacija posetite ContentProviders, vodič za programere.

Jedinstveni aspket dizajna Android Sistema jeste to da svaka aplikacija može da pokrene komponente druge aplikacije. Na primer, ako želite da korisnik fotografiše kamerom uređaja, verovatno postoji još jedna aplikacija koja to radi i vaš uredjaj može da je koristi umesto da razvija aktivnost kako bi to učinio sam. Ne morate da ugradjujete niti da povezujete sa kodom iz aplikacije za kameru. Umesto toga, možete pokrenuti aktivnost u aplikaciji koja će fotografisati. Kada se to završi, fotografija se vraća u galeriju korisnika kako bi je mogli koristiti. Korisniku to deluje kao da je kamera zapravo deo njihove aplikacije.

Kada sistem pokrene komponentu, tada se pokreće proces za tu aplikaciju (ako već nije pokrenut) i instancira klase potrebne za komponentu. Na primer, ako vaša aplikacija pokrene aktivnost u aplikaciji kamere koja fotografiše, ta aktivnost se pokreće u procesu aplikacije kamere, a ne u procesu vaše aplikacije. Za razliku od aplikacija na većini drugih sistema, Android aplikacije nemaju samo jednu ulaznu tačku (ne postoji main() funkcija).

Zato što sistem pokreće svaku aplikaciju u posebnom procesu sa dozvolama za datoteke koje organičavaju pristup drugim aplikacijama, vaša aplikacija ne može direktno pokrenuti komponentu druge aplikacije. Međutim, android sistem može. Da biste aktivirali komponentu u drugoj aplikaciji, morate dostaviti poruku o vašoj nameri da pokrenete odredjenu komponentu. Zatim sistem pokreće komponentu za vas.

Filteri namene
Aktivnosti aplikacije, usluge aplikacije i prijemnici za prikazivanje se aktiviraju 'namerama' (e.g. intents). Namera je poruka definisana Intent objektom koja opisuje akciju koja bi trebalo da bude izvršena, uključuje podatke na koje treba delovati, vrstu komponente koja bi trebalo da izvrši akciju, kao i druge instrukcije.
Kada aplikacija izda (izrazi) 'nameru' sistemu, sistem pronalazi komponentu aplikacije koja moze da rukuje (radi) sa odredjenom 'namerom' na osnovu deklaracije (oznake) intent fltera u manifest fajlu svake aplikacije. Sistem napravi primerak odgovarajuce komponente i prosledi mu Intent objekat. Ako više od jedne aplikacije mogu da rukuju sa 'namerom', onda korisnik može da bira koju aplikaciju želi da izabere.
Komponenta aplikacije može da ima bezbroj filtera namere (e.g. intent filters) definisanih sa <intent-filter> elementom, od kojih savki od njih opisuje različitu sposobnost komponente.
Za više informacija, pogledajte dokument 'Namere i filteri namere'(Intents and Intent Filters).
Permisije
Android aplikacije moraju da traže dozvolu za pristup osetljivim korisničkim podacima (kao što su kontakti i SMS) ili određenim sistemskim funkcijama (kao što su kamera i pristup internetu). Svaka dozvola je identifikovana jedinstvenom oznakom. Na primer, aplikacija koja treba da šalje SMS poruke mora da ima sledeći kod u manifestu:

<manifest ... >

<uses-permission android:name="android.permission.SEND\_SMS"/>

```
   ...

```

</manifest>

</manifest>

Počevši od Androida 6.0 (API level 23), korisnik može da odobri ili odbije neke dozvole za aplikaciju tokom izvršavanja. Ali bez obzira na to koju verziju Androida vaša aplikacija podržava, morate da deklarišete sve zahteve za dozvole sa elementom <uses-permission> u manifestu. Ako je dozvola odobrena, aplikacija može da koristi zaštićene funkcije. Ako ne, pokušaji da pristupi tim funkcijama ne uspevaju.Vaša aplikacija takođe može da zaštiti sopstvene komponente sa dozvolama. Može da koristi bilo koju od dozvola koje definiše Android, kao što je navedeno u android.Manifest.permission, ili dozvolu koja je deklarisana u drugoj aplikaciji. Vaša aplikacija takođe može da definiše sopstvene dozvole. Nova dozvola je deklarisana sa elementom <permission>.

***Osnove aplikacije***
Android aplikacije se mogu pisati koristeći Kotlin, Java i C++ jezike. Android SDK alati kompajliraju vaš kod zajedno sa svim podacima i datotekama resursa u APK ili Android App Bundle.

Android paket, koji je arhivska datoteka sa sufiksom .apk, sadrži sadržaj Android aplikacije koji je neophodan tokom izvršavanja i to je datoteka koju uređaji na Android-u koriste za instaliranje aplikacije.

Android App Bundle, koji je arhivska datoteka sa sufiksom .aab, sadrži sadržaj projekta Android aplikacije uključujući neke dodatne metapodatke koji nisu potrebni tokom izvršavanja. AAB je format za objavljivanje i ne može se instalirati na Android uređaje, već odlaže generisanje APK-a i potpisivanje na kasniju fazu. Kada distribuirate vašu aplikaciju preko Google Play-a, na primer, Google Play serveri generišu optimizovane APK-ove koji sadrže samo resurse i kod koji su potrebni za određeni uređaj koji zahteva instalaciju aplikacije.

Svaka Android aplikacija živi u sopstvenom sigurnosnom sandbox-u, zaštićenom sledećim Android bezbednosnim funkcijama:

* Operativni sistem Android je višekorisnički Linux sistem u kojem je svaka aplikacija različit korisnik.

* Podrazumevano, sistem svakoj aplikaciji dodeljuje jedinstveni Linux korisnički ID (ID koristi samo sistem i nije poznat aplikaciji). Sistem postavlja dozvole za sve datoteke u aplikaciji tako da samo korisnički ID koji je dodeljen toj aplikaciji može da im pristupi.

* Svaki proces ima svoju virtuelnu mašinu (VM), tako da kod aplikacije radi izolovano od drugih aplikacija.

* Podrazumevano, svaka aplikacija radi u sopstvenom Linux procesu. Android sistem pokreće proces kada bilo koja od komponenti aplikacije treba da se izvrši, a zatim isključuje proces kada više nije potreban ili kada sistem mora da povrati memoriju za druge aplikacije.