Cvičenie 4 - Oprávnenia aplikácie a použitie externých knižníc

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.

Oprávnenia aplikácie

Úč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:

Deklarácia oprávnenia

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
...

Základný postup pre udelenie oprávnenia

  • Celý proces začína volaním metódy checkSelfPermission(context, permission), či aplikácia disponuje oprávnením, ktorého názov prijíma v parametri.
  • Výsledkom bude vrátená hodnota typu int, ktorá môže nadobúdať hodnoty:
  • Ak aplikácia dané oprávnenie nemá (PERMISSION_DENIED), tak oň požiadame prostredníctvom metódy requestPermissions(), ktorá má 3 parametre:
  • Volaním 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);
  • Akonáhle používateľ zareaguje, systém zavolá metódu onRequestPermissionsResult(), kde zistíme, či nám používateľ oprávnenie udelil alebo nie.
  • Pri volaní uvedenej metódy získame tri parametre:
  • Dialer Application

    V prvom kroku pridáme potrebné povolenia do Manifestu:

    Úloha 4.1

    Vytvorte layout pre vytočenie telefónneho čísla prostredníctvom <LinearLayout>.

    Úloha 4.2

    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():

    Zostavovací nástroj Gradle a externé knižnice

    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

    QR Code Reader

    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

    Alert Dialog

    Zobrazenie dialógového okna s potrebnou informáciou môže vyzerať napr. takto:

    Zadanie 1: Vytvorenie interaktívnej hry (odovzdávanie v MSTeams) - 15 bodov

  • Základná interaktivita: Hra by mala využívať interaktívne grafické objekty. (2,5b)
  • Použite triedu DrawView z cvičenia č.3 pre vykresľovanie objektov a detekciu dotykov. (2,5b)
  • Metóda detekcie dotyku: Implementujte v triede DrawView metódu boolean isIntersecting(x: Float, y: Float), ktorá bude slúžiť na detekciu dotyku [x,y].
  • Prvky gamifikácie: Herný dizajn by mal obsahovať napríklad skóre, časový limit, postup do ďalších levelov, alebo zbieranie bodov. (10b)

  • Body za kreativitu a vizuálne prevedenie: +5b