Cieľom štvrtého cvičenia je precvičenie práce so zámermi a textovými reťazcami + ozrejmenie práce s oprávneniami a externými knižnicami.
Účelom oprávnení je ochrana súkromia používateľa. Žiadna aplikácia v predvolenom nastavení nemá oprávnenie vykonávať žiadne operácie, ktoré môžu potenciálne nepriaznivo ovplyvniť iné aplikácie, operačný systém alebo používateľa. Spôsob, akým systém Android tento súhlas získava, závisí od verzie konkrétneho zariadenia:
Každá aplikácia musí požadované povolenia deklarovať v úvodnej časti súboru AndroidManifest.xml
. Príklad deklarácie požadovaných oprávnení môže vyzerať napr. takto:
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.CALL_PHONE" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<application
...
checkSelfPermission(context, permission)
, či aplikácia disponuje oprávnením, ktorého názov prijíma v parametri.requestPermissions()
, ktorá má 3 parametre:requestPermissions()
požiadame zobrazenie dialógového okna so žiadosťou o udelenie konkrétneho oprávnenia.ActivityCompat.requestPermissions(this,new String[]{Manifest.permission.CAMERA},1);
onRequestPermissionsResult()
, kde zistíme, či nám používateľ oprávnenie udelil alebo nie.requestPermissions()
.V prvom kroku pridáme potrebné povolenia do Manifestu:
Vytvorte layout pre vytočenie telefónneho čísla prostredníctvom <LinearLayout>.
Pridajte jednotlivé metódy pre volania tlačidiel a úpravu <TextView>. Použite buď atribút onClick alebo:
Pre funkcionalitu tlačidla backspace a vymazanie posledného znaku, použite:
Pre vytočenie telefónneho čísla, použijeme implicitný intent ACTION_CALL:
Pri vytočení telefónneho čísla, nám však aplikácia padne, keďže nemáme potrebné povolenie. Povolenie získame prostredníctvom:
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CALL_PHONE}, 1);
Zároveň použijeme .checkSelfPermission, aby sme nezobrazovali požiadavku pri každom volaní.
ActivityCompat.checkSelfPermission(this, Manifest.permission.CALL_PHONE)
Výsledok môže vyzerať napríklad takto:
Pre zachovanie dynamického toku aplikácie, upravíme aj onRequestPermissionResult():
Java je známa bohatstvom svojich knižníc, čoho priamym dôkazom je centrálne úložisko Maven. Android Studio zostavuje aplikácie s využitím zostavovacieho nástroja Gradle. Vďaka nemu môžeme veľmi jednoducho zaviesť do projektu akúkoľvek knižnicu.
Základným konfiguračným súborom je súbor build.gradle
, ktorý nájdeme v strome projektu v sekcii Gradle Scripts. V projekte existujú dva takéto súbory: jeden pre projekt a druhý pre modul, v ktorom sa deklarujú závislosti.
Jednotlivé závislosti sa pridávajú do sekcie dependencies
pomocou jednoznačného identifikátora v centrálnom úložisku knižníc. Napr:
dependencies {
...
implementation 'com.google.maps.android:android-maps-utils:2.2.3'
}
Android Studio následne upozorní na nutnosť aktualizácie nastavenia projektu (Sync Now), kde stiahne z internetu knižnicu a zavedie ju do projektu
V prvom kroku pridáme závislosť do build.gradle:
dependencies {
...
implementation 'com.journeyapps:zxing-android-embedded:4.3.0'
}
Pridáme <Button>
do activity_main.xml
Následne pridáme volanie pridanej aktivity v MainActivity
Pridáme metódu onActivityResult()
, kde zistíme odpoveď spustenej aktivity
Pre otestovanie aplikácie môžeme vyenerovať QR kód napríklad na http://atomurl.net/qrcode/
Namapovanie kamery na virtuálne zariadenie je môžné cez Tools -> AVD Manager -> Edit -> Show Advanced Settings -> Back Camera
Zobrazenie dialógového okna s potrebnou informáciou môže vyzerať napr. takto: