Android-sovelluksessa aktiviteetti toimii sovelluksen yksittäisenä näkymänä, ja niiden välillä siirtyminen on yleinen operaatio, joka luo monivaiheisia ja interaktiivisia käyttökokemuksia. Tässä käsitellään yksinkertaista esimerkkiä siitä, kuinka luoda toinen aktiviteetti ja siirtyä sen välillä, sekä miten lähettää tietoja aktiviteetista toiseen.

Aloitetaan luomalla toinen aktiviteetti. Avaa Android Studio ja mene kohtaan File | New | Activity | Blank Activity. Tässä voit valita uuden aktiviteetin nimeksi joko Main2Activity tai vaihtaa sen esimerkiksi SecondActivity:ksi. Tämä luo tyhjän aktiviteetin, jossa voimme toteuttaa tarvittavat toiminnot.

Ensimmäisessä aktiviteetissa, eli MainActivity.java-tiedostossa, lisätään funktio, joka käynnistää toisen aktiviteetin:

java
public void onClickSwitchActivity(View view) {
Intent intent = new Intent(this, SecondActivity.class);
startActivity(intent); }

Tässä määrittelemme, että painettaessa nappia, järjestelmä luo uuden Intent-olion, joka käynnistää SecondActivity:n. Intent on viestiobjekti, jonka avulla voimme kommunikoida aktiviteettien välillä. Kun painamme nappia, toisen aktiviteetin luominen ja sen käynnistäminen tapahtuu heti.

Seuraavaksi avataan activity_main.xml-tiedosto, joka sijaitsee res/layout-kansiossa, ja lisätään siihen nappi, joka käynnistää uuden aktiviteetin:

xml
<Button
android:id="@+id/buttonSwitchActivity" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Launch Second Activity" android:onClick="onClickSwitchActivity" />

Nyt, kun koodi on kirjoitettu, voimme suorittaa sovelluksen ja nähdä, kuinka ensimmäisestä aktiviteetista siirrytään toiseen. Mutta jotta tämä kokemus olisi realistisempi, voidaan toiseen aktiviteettiin lisätä myös nappi, joka sulkee sen ja palauttaa meidät takaisin ensimmäiseen aktiviteettiin.

Avaa SecondActivity.java ja lisää seuraava funktio:

java
public void onClickClose(View view) {
finish(); }

Tämä kutsu finish() sulkee nykyisen aktiviteetin ja palauttaa käyttäjän takaisin taustalla olevaan aktiviteettiin. Tämä toiminta ei kuitenkaan palauta suoraan kutsuvaa aktiviteettia, vaan luottaa Androidin takaisinpinoon, joka pitää kirjaa sovelluksessa käynnissä olevista aktiviteeteista. Jos haluamme palauttaa käyttäjän tarkasti tiettyyn aktiviteettiin, voimme käyttää Intent-objektia uudelleen, muuttamalla sen luokan nimeä.

Lisätään vielä toinen nappi SecondActivity.xml-tiedostoon, joka vastaa tätä toimintoa:

xml
<Button android:id="@+id/buttonClose" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Close" android:onClick="onClickClose" />

Nyt sovellus on valmis ja voimme testata, kuinka painikkeet toimivat: ensimmäisestä aktiviteetista siirrytään toiseen ja toisen aktiviteetin painikkeesta palataan takaisin ensimmäiseen.

Kun katsomme tarkemmin, huomaamme, että tässä harjoituksessa suurin osa työstä tehdään onClickSwitchActivity()-metodissa. Tämä on se kohta, jossa määrittelemme toisen aktiviteetin käyttämällä Intent-oliota. Tämän lisäksi olemme lisänneet sulkemisnappin SecondActivity:ssä, joka sulkee sen ja tuo meidät takaisin ensimmäiseen aktiviteettiin. Tätä toiminnallisuutta hyödynnetään monissa sovelluksissa, joissa käyttäjä siirtyy näkymästä toiseen ja haluaa palata alkuperäiseen näkymään.

Android Studio huolehtii suurimmasta osasta käytännön asioista, kuten aktiviteettien ilmoittamisesta manifestissa. Jos me olisimme luoneet aktiviteetit manuaalisesti, meidän olisi täytynyt lisätä ne AndroidManifest.xml-tiedostoon. Android Studio kuitenkin tekee tämän automaattisesti. Voimme avata AndroidManifest.xml-tiedoston ja tarkistaa seuraavat elementit:

xml
<activity android:name=".SecondActivity"> <!-- Muita asetuksia --> </activity>

Tässä huomaamme, että toista aktiviteettia ei ole merkitty MAIN ja LAUNCHER -elementeillä, koska pääaktiviteetti (MainActivity) määrittelee, minkä aktiviteetin käynnistys tapahtuu ensimmäisenä. Tämä näkyy manifestissa, ja se on olennainen osa sovelluksen käynnistysprosessia.

Seuraavaksi siirrymme tietojen välittämiseen aktiviteettien välillä. Intent-objekti toimii viestintävälineenä, jonka avulla voimme siirtää tietoja eri aktiviteettien välillä. Tämä on olennainen osa monia sovelluksia, joissa käyttäjä syöttää tietoja, jotka sitten siirtyvät toiseen aktiviteettiin.

Esimerkki tietojen lähettämisestä toiseen aktiviteettiin:

  1. Muutetaan MainActivity.xml-tiedostoa niin, että siihen lisätään EditText-elementti käyttäjän syötteelle:

xml
<EditText
android:id="@+id/editTextData" android:layout_width="wrap_content" android:layout_height="wrap_content" android:hint="Enter some text" />
  1. Muutetaan MainActivity.java-tiedostossa onClickSwitchActivity() -metodia seuraavasti:

java
public void onClickSwitchActivity(View view) { EditText editText = (EditText)findViewById(R.id.editTextData); String text = editText.getText().toString();
Intent intent = new Intent(this, SecondActivity.class);
intent.putExtra(Intent.EXTRA_TEXT, text); startActivity(intent); }

Tässä lisäämme EditText-komponentista otetun tekstin intent-objektiin putExtra-metodilla. Tietoja voidaan siirtää monilla eri tavoilla, mutta tässä esimerkissä käytämme Intent.EXTRA_TEXT-avainta.

  1. Muutetaan SecondActivity.java-tiedostoa niin, että se näyttää vastaanotetun tiedon:

java
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_second); TextView textView = (TextView)findViewById(R.id.textViewText); if (getIntent() != null && getIntent().hasExtra(Intent.EXTRA_TEXT)) { textView.setText(getIntent().getStringExtra(Intent.EXTRA_TEXT)); } }

Tässä tarkistamme, onko vastaanotettu intent sisältänyt tietoa, ja jos on, näytämme sen TextView-komponentissa.

Kun sovellus on suoritettu, käyttäjä voi kirjoittaa tekstin MainActivityyn ja lähettää sen SecondActivityyn, jossa se näytetään. Tämä esimerkki havainnollistaa, kuinka tietoja voidaan siirtää yhden aktiviteetin ja toisen välillä käyttämällä Intent-objektia ja putExtra/getStringExtra -metodeja.

Endtext

Miten käyttää puheentunnistusta Android-sovelluksessa?

Android-sovelluksissa on mahdollista käyttää puheentunnistusta, joka tarjoaa käyttäjille kätevän tavan syöttää tekstiä äänen avulla. Tällöin sovellus voi tunnistaa puhutut sanat ja muuntaa ne tekstiksi. Tämä prosessi toteutetaan käyttämällä Androidin tarjoamaa RecognizerIntent-luokkaa. Tässä käsitellään, kuinka puheentunnistus voidaan ottaa käyttöön ja miten puheentunnistuksen tulokset saadaan sovellukseen.

Ensimmäinen askel on luoda Intent, joka käynnistää puheentunnistusprosessin. Tämä tapahtuu seuraavalla koodilla:

java
Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_FREE_FORM); startActivityForResult(intent, REQUEST_SPEECH);

Tässä määritellään, että puheentunnistukseen käytettävä kielimalli on vapaamuotoinen, eli sovellus voi tunnistaa puheen monimutkaisempia ja vapaampia lauserakenteita. Tämän jälkeen kutsutaan startActivityForResult-metodia, joka käynnistää puheentunnistuksen.

Kun puheentunnistus on suoritettu ja tulokset saatu, ne käsitellään onActivityResult-callbackin avulla. Tämä mahdollistaa tulosten näyttämisen sovelluksessa seuraavasti:

java
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data); if (requestCode == REQUEST_SPEECH && resultCode == RESULT_OK && data != null) { ArrayList<String> result = data.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS); TextView textView = (TextView) findViewById(R.id.textView); if (result.size() > 0) { textView.setText(""); for (String item : result) { textView.append(item + "\n"); } } } }

Tässä koodissa tarkistetaan, että puheentunnistus on onnistunut, ja sen jälkeen tulokset (puheessa tunnistetut sanat) asetetaan TextView-komponenttiin. Tunnistettujen sanojen lista on järjestetty tunnistuksen luotettavuuden mukaan, ja ensimmäinen sana on se, johon puheentunnistus on luottanut eniten.

On myös mahdollista tarkastella tunnistuksen luotettavuutta EXTRA_CONFIDENCE_SCORES-parametrin avulla, joka palauttaa taulukon luottamuspisteistä:

java
float[] confidence = data.getFloatArrayExtra(RecognizerIntent.EXTRA_CONFIDENCE_SCORES);

Tässä arvo 1.0 tarkoittaa suurinta luottamusta, kun taas arvo 0.0 viittaa heikoimpaan luottamukseen. Tämä lisätieto voi olla hyödyllinen, jos haluat näyttää käyttäjälle, kuinka tarkasti puhe on tunnistettu.

Jos et halua käyttää Googlen oletustoimintoa puheentunnistukseen, voit myös suoraan käyttää SpeechRecognizer-luokkaa. Tämä vaatii kuitenkin RECORD_AUDIO-lupaa sekä RecognitionListener-rajapinnan toteuttamista puheentunnistuksen tapahtumien käsittelemiseksi. Tämä lähestymistapa voi olla hyödyllinen, jos tarvitset enemmän hallintaa tai haluat mukauttaa puheentunnistusprosessia.

Puheentunnistuksen käyttö Android-sovelluksissa on siis kätevä tapa parantaa käyttäjäkokemusta, mutta se vaatii myös huolellista käsittelyä ja hallintaa. On tärkeää varmistaa, että puheentunnistuksen toiminta on luotettavaa ja käyttäjäystävällistä, sekä huolehtia sovelluksen käytettävyyttä koskevista seikoista, kuten virheiden käsittelystä ja käyttöliittymän selkeydestä.

Lisäksi on tärkeää ottaa huomioon, että puheentunnistus ei ole täydellinen. Kieli ja ääntämys voivat vaikuttaa tuloksiin, joten on suositeltavaa tarjota käyttäjälle mahdollisuus korjata tunnistettuja virheitä tai antaa palautetta, jos puheentunnistus ei toimi odotetulla tavalla. Käyttäjien kokemusta voidaan parantaa myös käyttämällä kontekstitietoisuutta, kuten aiempia syötteitä tai sovelluksen toiminnallisuuksia, jotka voivat auttaa parantamaan puheentunnistuksen tarkkuutta.

Miten liittää Firebase ja Kinvey Android-sovellukseen?

Firebase ja Kinvey ovat kaksi merkittävää Backend-as-a-Service (BaaS) -palvelua, jotka tarjoavat laajan valikoiman työkaluja ja palveluja mobiilisovellusten taustojen hallintaan. Firebase tarjoaa muun muassa reaaliaikaisen tietokannan, käyttäjähallinnan, tiedostojen tallennuksen, push-ilmoitukset ja useita autentikointivaihtoehtoja, kuten sähköpostin ja salasanan, Facebookin, Twitterin, GitHubin ja Googlen kautta. Google hankki Firebase:n äskettäin, ja näin ollen odotettavissa on syvempää integraatiota Googlen pilvipalveluiden kanssa.

Kinvey, puolestaan, on yksi varhaisimmista BaaS-palveluista, ja sen tarjoamat ominaisuudet, kuten käyttäjähallinta, tiedostojen tallennus, paikkatietopalvelut ja versiohallinta, tekevät siitä monipuolisen ratkaisun. Vaikka Kinvey ei ole yhtä yksinkertainen käyttää kuin Firebase, se tarjoaa silti paljon mahdollisuuksia erilaisten sovellusten luomiseen.

Firebase:n ja Kinvey:n liittäminen Android-sovelluksiin vaatii hieman konfigurointia, mutta prosessi on suoritettavissa seuraamalla ohjeita tarkasti. Näissä palveluissa on omat erityispiirteensä, jotka erottavat ne muista taustapalveluista.

Firebase: Liittäminen Android-sovellukseen

  1. Android Manifestin päivitys
    Aloita avaamalla Android Manifest -tiedosto ja lisää tarvittavat oikeudet. Tämän jälkeen avaa build.gradle (Module: app) ja lisää seuraavat riippuvuudet:
    compile 'com.firebase:firebase-client-android:2.5.0+'

  2. Firebase:n integroiminen koodissa
    Avaa ActivityMain.java ja tuo Firebase-luokka:
    import com.firebase.client.Firebase;
    Lisää sitten seuraava koodi onCreate()-metodiin:

    java
    Firebase.setAndroidContext(this);
    Firebase firebase = new Firebase("https://<your-firebase-url>.firebaseio.com/");
  3. Käyttäjän luominen Firebase:ssa
    Käyttäjän rekisteröiminen Firebase:ssa tapahtuu seuraavalla koodilla:

    java
    firebase.createUser("[email protected]", "correcthorsebatterystaple", new Firebase.ValueResultHandler() { @Override public void onSuccess(Map result) { Log.i("Firebase", "Successfully created user account with uid: " + result.get("uid")); } @Override
    public void onError(FirebaseError firebaseError) {
    // there was an error } });

Kinvey: Liittäminen Android-sovellukseen

  1. Android Manifestin ja Gradlen päivitys
    Liitä Kinvey SDK Android-projektiin. Tämä vaatii, että kopioit SDK:n kirjastot libs-kansioon ja päivität build.gradle-tiedoston seuraavalla tavalla:

    gradle
    repositories { flatDir { dirs 'libs' } } dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) compile(name:'kinvey-android-*', ext:'aar') }
  2. Kinvey-asiakasluokan käyttöönotto
    Avaa MainActivity.java ja tuo Kinvey-asiakasluokka:

    java
    import com.kinvey.android.Client;
    final Client mKinveyClient = new mKinveyClient("your_app_key", "your_app_secret", this.getApplicationContext()).build();
  3. Kinvey-pingin tarkistus
    Verifioi, että yhteys Kinveyhin on kunnossa käyttämällä seuraavaa koodia:

    java
    mKinveyClient.ping(new KinveyPingCallback() {
    public void onFailure(Throwable t) { Log.d("KinveyPingCallback", "Kinvey Ping Failed", t); } public void onSuccess(Boolean b) { Log.d("KinveyPingCallback", "Kinvey Ping Success"); } });

Firebase:n ja Kinvey:n välillä on monia samankaltaisuuksia, mutta niiden käyttöönoton ja konfiguroinnin eroista huolimatta kummatkin tarjoavat monipuoliset mahdollisuudet mobiilisovellusten backendin hallintaan. Firebase tarjoaa yksinkertaisemman ja sujuvamman käyttöönoton, erityisesti, jos tavoitteena on kehittää sovelluksia, jotka tarvitsevat reaaliaikaista tietokantaa ja käyttäjähallintaa. Kinvey tarjoaa enemmän hallintaa ja laajemman palveluvalikoiman, mutta sen asennus voi olla monimutkaisempaa.

On tärkeää ymmärtää, että valinta Firebase:n ja Kinvey:n välillä ei ole vain tekninen, vaan se perustuu myös projektin tarpeisiin. Jos sovellus vaatii laajempaa skaalautuvuutta ja tukea monille käyttäjille, Firebase voi olla parempi valinta, koska sen integraatio Googlen pilvipalveluihin voi tarjota lisäarvoa. Kinvey puolestaan on hyödyllinen silloin, kun tarvitaan enemmän joustavuutta ja erikoistuneita palveluja, kuten paikkatietoja ja tiedostonhallintaa.

Molemmat palvelut vaativat sovelluksen huolellista rekisteröintiä ja API-avaimien käyttöä, ja on tärkeää tarkistaa palvelun tarjoamat dokumentaatiot ja esimerkit, jotta saadaan mahdollisimman sujuva käyttökokemus. Mobiilisovelluksen backendin valinta voi vaikuttaa merkittävästi sovelluksen toiminnallisuuteen ja käyttäjäkokemukseen.