Naučte sa vyvíjať aplikácie pre Android za 14 dní – intenty, alebo kto to urobí?

0

V tejto časti seriálu riešime situáciu, keď vaša aplikácia potrebuje zobraziť webovú stránku, mapu, či prehrať multimediálny súbor. Nemá zmysel aby to robila vlastnými prostriedkami keď v smartfóne je viac aplikácií ktoré to vedia. Ako však vybrať tú, ktorá to urobí? Intenty v Android aplikácii slúžia na komunikáciu v rámci operačného systému a umožňujú napríklad, aby jedna aktivita spustila inú, prípadne spustila službu a podobne. Intenty taktiež umožňujú aby aplikácia deklarovala, že dokáže realizovať nejakú činnosť, napríklad otvoriť obrázok, či prehrať multimediálny súbor

Intent (android.content.Intent) je asynchrónna správa, ktorá nesie informáciu o požadovanej akcii. Akciou môže byť spustenie aktivity, služby, prípadne používateľsky definovaní akcia. Ako vyplýva z názvu odvodeného od slova intention, čiže po našom zámer, väzby medzi aktivitami, ktorých vstupy a výstupy aktivít sú definované pomocou intentov sú slabé a neostré. Je to určitá analógia s reálnym svetom: zámer, prípadne úmysel sa môže realizovať rôznymi spôsobmi a celkom dobre sa môže stať, že sa jeho realizácia nemusí podariť. Intent operačnému systému oznamuje , čo má aktivita v úmysle. Napríklad používateľ chce poslať SMS, vyhľadať údaje zo zoznamu kontaktov, aktivovať vstavaný fotoaparát a podobne. Operačný systém tento úmysel  môže splniť rôznym spôsobom, prípadne ho splniť nedokáže. 

Trieda Intent  je v podstate dátová štruktúra, ktorá sa používa na dva účely. Umožňuje zadať operáciu, ktorú je potrebné vykonať, alebo intent môže predstavovať udalosť, ktorá nastala v systéme, a o ktorej je potrebné informovať ďalšie komponenty. Ak aplikácia chce vykonať operáciu, ku ktorej potrebuje súčinnosť inej aktivity, napríklad vybrať kontakt,  zobraziť mapu, zosnímať obrázok, vytočiť telefónne číslo a podobne vyjadrí to cez objekt Intent. 

Explicitné intenty

Tieto intenty presne určujú akú akciu je potrebné vykonať, kto a akým spôsobom ju vykoná a s akými údajmi. Majú explicitne definovanú cieľovú aktivitu, ktorú je potrebné spustiť. Pomocou intentov je možné cieľovej aktivite odovzdať údaje. Typickým príkladom je aplikácia s dvoma aktivitami, prvá obsahuje formulár na zadanie údajov a druhá zobrazí výsledky. Takýto príklad sme robili v časti Aplikácia s dvomi aktivitami 

Implicitné intenty

Intent nemá definovanú cieľovú aktivitu, ale operáciu, ktorá má byť vykonaná, preto spustí aktivitu, ktorá môže túto operáciu vykonávať. Výber je ponechaný na rozhodnutí operačného systému  Ak je vhodných aktivít viac, v takom prípade musí o výbere rozhodnúť používateľ. Typickým príkladom je zosnímanie fotografie, zobrazenie dokumentu, či webovej stránky

Zjednodušene by sa dali prirovnať k žiadosti aktivity typu „Kto urobí toto?“, s ktorou sa obracia na operačný systém. Aktivita môže žiadať o zobrazenie obrázka, webovej stránky, prehratia multimédia a podobne. V praxi to funguje tak, že systém vyhľadá všetky aktivity , ktoré môžu príslušný Intent splniť, a ak ich nájde viac, ponúkne používateľovi možnosť výberu. Môžete si zmeniť aplikáciu, ktorá vám zobrazuje zoznam kontaktov, či vykoná inú činnosť. Následne je vybraná aktivita spustená a príslušný Intent je jej odovzdaný ako vstup.

Napríklad

Intent ii = new Intent(Intent.ACTION_VIEW, 
    Uri.parse("http://www.dev.android.com"));

V súvislosti s intentami sa najčastejšie používajú metódy

intent.setClass(MainActivity.this, NewActivity.class);

Námet príkladu sa dá vyjadriť jednou vetou: „kto zobrazí určenú webovú stránku“. Používateľské rozhranie aplikácie má jediné tlačidlo, v obsluhe jeho zatlačenia vytvoríme implicitný intent. Hlavná aktivita bude využívať na zapuzdrenie prvkov používateľského rozhrania vizuálny kontejner Relative Layout

Hlavná aktivita activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">
 
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Zobraz stránku"
        android:layout_marginTop="20dp"
        android:onClick="onClick"/>
    
</RelativeLayout>

Rovnako triviálny je Java kód hlavnej aktivity

package com.example.zobrazweb;
 
import androidx.appcompat.app.AppCompatActivity;
 
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
 
public class MainActivity extends AppCompatActivity {
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
 
    public void onClick(View view) {
        Intent intent = new Intent(Intent.ACTION_VIEW,
                Uri.parse("http://www.pcrevue.sk"));
        startActivity(intent);
    }
 
}

Ak aplikáciu spustíte na emulátore, jedinou alternatívou na splnenie požiadavky zobraziť obsah webovej stránky je webový prehliadač, ktorý je súčasťou operačného systému.

Zatiaľ triviálne až nudné. Nainštalujte aplikáciu do reálneho zariadenia v ktorom máte nainštalovaných viac prehliadačov, a ak nemáte tak si nejaký ďalší, napríklad Microsoft Edge nainštalujte. 

Následne spustite na reálnom zariadení aplikáciu vytvorenú v tomto príklade. Nakoľko je k dispozícii viac alternatív ako zobraziť webovú stránku s URL adresou, operačný systém nechá vybrať používateľa. Tento výber môže byť jednorazový, alebo trvalý.

1 deň – Prvá aplikácia 

2 deň – Možnosti emulátorov 

3 deň - Zorientujte sa v projekte aplikácie

4 deň – Princípy dizajnu a škálovania

5 deň – Uporiadanie prvkov používateľského rozhrania

6 deň – Obsluha udalostí

7 deň – Aplikácia s dvomi aktivitami  

8 deň – Spustenie na reálnom zariadení

Luboslav Lacko

Všetky autorove články
Android aplikácia vývoj

Pridať komentár

Mohlo by vás zaujímať

Mohlo by vás zaujímať