Widgetit Androidissa

Widgetit näyttävät applikaation kaikkein oleellisimman tiedon nopeasti ja yksinkertaisesti työpöydällä. Widgettejä voi myös käyttää käynnistämään applikaatioita tai taustaprosesseja, kuten mediasoittimen.

Tässä artikkelissa toteutamme mahdollisimman yksinkertaisen widgetin, jotta saamme idean mitä kaikkea sen toimintaan saamiseen tarvitaan. Toteutamme widgetin, jossa on tekstikenttä ja nappula, nappulaa painamalla kasvatamme tekstikentässä olevaa numeroa yhdellä. Erityisesti kiinnitämme huomiota widgetin tilan päivittämiseen sekä manuaalisesti, että automaattisesti.

Esimerkki koodi: https://github.com/Androidkehitys/Androidkehitys-Widget

Widget layout

Widgetin layout toteutetaan samalla tavalla, kuin minkä tahansa aktiviteetin layout. On kuitenkin otettava huomioon, että widgetti luodaan RemoteViews-luokan ilmentymänä ja layoutissa voi näin ollen käyttää vain seuraavia layout-elementtejä:

Layoutit

Widgetit

AppWidgetProviderInfo Metadata

Tämä XML-tiedosto määrittää widgetille tarpeelliset tiedot, kuten korkeuden ja leveyden, päivitysvälin, esikatselun, layoutin, asetukset-aktiviteetin sekä widgetin koon muuttamisen vaaka ja/tai pystysuunnassa (Android 3.1).

Androidin kotinäkymä koostuu ruudukosta, jossa jokainen ruutu on kooltaan 74dp * 74dp. Widgetin tulee jättää 2dp:tä tilaa leveydessä ja korkeudessa, jotta vältetään mahdolliset virheet ajonaikaisessa koon määrityksessä kun dp:t muutetaan pikseleiksi. Käytä kaavaa (solujen määrä * 74) – 2 widgetin koon määrittelemiseen.

Päivitysväli määrittää ajan, jonka välein Android päivittää widgetin tiedot. Tämä päivitys herättää laitteen lepotilasta ja suorittaa onUpdate()-metodin AppWidgetProvider-luokassa. Ei myöskään ole takuita tapahtuuko päivitys ajallaan. Suositeltavampaa on toteuttaa widgetti niin että se päivittää vain silloin, kun sen on pakko, eikä useammin.

<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
  android:minWidth="146dp"
  android:minHeight="72dp"
  android:updatePeriodMillis="86400000"
  android:initialLayout="@layout/widget_layout"
  >
  </appwidget-provider>

Widget Manifestissä ja painallukseen reagointi

Manifestissä widget määritellään <receiver> elementin sisälle. Tässä elementissä määrittelet oman toteutuksesi AppWidgetProvider luokan ilmentymästä ja määrittelet ne Intent lähetykset (broadcast), jotka AppWidgetProvider hyväksyy. Nämä lähetykset suoritetaan onReceive() -metodissa.

<receiver android:name=".ExampleWidgetProvider">
  <intent-filter>
    <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
  </intent-filter>
  <meta-data android:name="android.appwidget.provider"
   android:resource="@xml/appwidget_provider" />
</receiver>

AppWidgetProvideria voi myös kutsua PendingIntent:llä, kuten tässä esimerkissä napin painalluksiin reagointi on toteutettu:

Intent intent = new Intent(context, ExampleWidgetProvider.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intent, 0);

RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget_layout);
views.setOnClickPendingIntent(R.id.start_button, pendingIntent);
appWidgetManager.updateAppWidget(appWidgetId, views);

AppWidgetProvider

Kokonaisuudessaan omaan toteutukseesi AppWidgetProvideristä tarvitset vain onUpdate()- ja onReceive()-metodit. Voit myös tehdä tämän esimerkin mukaisesti paketin sisällä näkyvän staattisen metodin, joka päivittää widgetin grafiikat esimerkiksi konfiguraatioaktiviteetistä.

Ice Cream Sandwich julkaistu

Google ja Samsung pitivät tänä aamuna yhteisen julkistustilaisuuden jossa päivänvalon näkivät Googlen uusi Android 4.0 -käyttöjärjestelmä (Ice Cream Sandwich) sekä Samsungin kehittämä uusi Google Nexus puhelin.

Uuden Android-käyttöjärjestelmän suurimmat uudistukset keskittyvät lähinnä parempaan käyttökokemukseen. Seuraavassa lista tärkeimmistä käyttäjille näkyvistä uudistuksista:

Parannettu UI

Kuten aikaisempien versioiden kanssa, myös Ice Cream Sandwich tuo uuden käyttöliittymäteeman ja värimaailman. Lisäksi uusi kirjasintyyppi parantaa tekstin selkeyttä ja luettavuutta suurempia näyttöjen kanssa.

Aloitusnäytön kansiot

Android 4.0:ssa käyttäjät voivat ryhmitellä applikaatioita ja pikakuvakkeita näppärästi omiin kansioihin. Ryhmittely onnistuu helposti raahaamalla kuvakkeita toistensa päälle

Widgettien koot muutettavissa

Yksi, ainakin allekirjoittaneelle, mieluisa uudistus on mahdollisuus muuttaa widgettien kokoja. Kokomuutokset ovat toki olleet mahdollisia Android 3.x-laitteissa, mutta nyt myös muutkin kuin tablet-käyttäjät pystyvät käyttämään koko näyttöalan fiksusti hyödyksi.

Lukitusnäytön uudistus

Myös lukitusnäyttö on saanut uudistuksia, uudessa näytössä on mahdollista tehdä asioita ilman että lukitusta tarvitsee avata. Esimerkiksi käyttäjä voi avata Kamera-applikaation ja ottaa kuvia tai hallinnoida soitettavaa musiikkia.

Datakäytön kontrollointi

Ehkäpä suurin Ice Cream Sandwich:sta löytyvä innovaatio on datakäytön kontrollointityökalu. Käyttäjä voi liittymäsopimuksesta riippuen asettaa erilaisia muistutuksia ja rajoituksia datakäytölle jolloin käyttäjän pitäisi säästyä ikäviltä laskuyllätyksiltä.

Muita uudistuksia

Näiden uudistusten lisäksi Android 4.0:ssa on paljon muita uudistuksia. Mainitsemisen arvoisia asioita ovat uudistetut Kamera- ja Galleria-applikaatiot. Galleria-applikaatioon on lisätty myös muutamia kuvankäsittelyominaisuuksia. Näiden lisäksi kalenteria on parannettu, sekä käyttöjärjestelmästä löytyy nyt myös saneluominaisuus.

Kehittäjiä kiinnostavat uudistukset

Kehittäjien kannalta katsottuna Android 4.0:n tuoma suurin uudistus on että Android 3.0:ssa julkistetut uudet ominaisuudet kuten Action Bar, Fragment-luokka, parannettu tuki suurille näytöille ja HTTP Live Streaming ovat nyt käytettävissä sekä puhelimissa että tableteissa. Tämän lisäksi Ice Cream Sandwich tuo toki oman osuutensa uusien ominaisuuksien listaan:

Social API

Social API tarjoaa yhteisen rajapinnan käyttäjän tietojen ja sosiaalisen kanssakäymisen hallintaan. Social API:n avulla voidaan hallinnoida helposti käyttäjän kontakteja, profiilitietoja, status-päivityksiä ja valokuvia.

Calendar API

Uudistetun Kalenteri-applikaation ja Calendar API:n avulla käyttäjän kalenterin lukeminen ja uusien kalenterimerkintöjen lisääminen helpottuu.

Android Beam

Android Beam on NFC:en perustuva ominaisuus joka mahdollistaa tietojen helpon siirtämisen NFC-laitteiden välillä. Beamin avulla on mahdollista siirtää esimerkiksi kontaktitietoja, kuvia ja videoita sekä liittyä keskusteluun tai videopuheluun.

Multimediauudistukset

Android 4.0 tarjoaa uuden low-level tuen streamauksen hallintaan. Uudistus mahdollistaa paremman mediadatan hallinnan, esimerkiksi applikaatio voi itse hakea datan, purkaa kryptauksen ja sen jälkeen ohjata datan käyttöjärjestelmälle näytettäväksi.

Toinen mukava multimediaan liittyvä uudistus on audio remote control API, joka mahdollistaa musiikkisoittimien ohjauksen lukitusnäkymästä niin että käyttäjän voi hallinoida soitettavaa musiikkia avaamatta puhelimen lukitusta.

Näiden lisäksi Ice Cream Sandwich:iin on lisätty WebP ja VP8 tuki, sekä tuki Matroskalle, jossa sisältö on joka Vorbis- ja VP8-formaatissa.

UI-uudistukset

4.0:ssa on mukana uusi GridLayout-luokka, jolla on mahdollista luoda matalampia UI-hierarkioita, mikä puolestaan tarkoittaa nopeampaa käyttökokemusta. Toinen varsin mukava uudistus on että kaikkien Android 4.0 laitteiden tulee tukea kiihdytettyä 2D-piirtämistä, mikä myös parantaa käyttöliittymän piirtonopeutta ja parantaa käytön sulavuutta.

Näiden lisäksi Android 4.0:ssa on muutamia muita kehittäjille suunnattuja uudistuksia. Tärkeimpänä kredentiaalien tallennukseen luotu keychain API, johon voidaan tallentaa sertifikaatteja. Sekä VPN client API, jolla voidaan luoda salattuja yhteyksiä sekä prosessoida sekä laitteelle tulevia että lähteviä paketteja.

Ajatuksia julkistuksesta

Päälimmäinen ajatus julkistuksesta näin kehittäjänä kannalta katsottuna on pieni pettymys. Julkistus ei varsinaisesti sisältänyt mullistavia uudistuksia, lähinnä vain paljon pieniä korjauksia ja parannuksia. Nämä korjaukset ja parannukset ovat toki tervetulleita ja Android 4.0 jatkaa siinä mielessä samalla iteratiivisella linjalla kuin edelliset versiot. Eli kuten ennenkin, uudessa versiossa on korjattu vanhoista versioista löytyneitä vikoja ja niiden lisäksi on otettu mukaan vähän uutta.

Luultavasti suurin kehittäjille näkyvä uudistus on ADT:n (Android Development Tools) versio 14 ja siihen liittyvä Eclipse plugin. Nopean kokeilun perusteella suosittelen nopeaa päivittämistä, sillä kuten aina ennenkin, uusi versio en edeltäjäänsä huomattavasti parempi. Esimerkiksi uudessa versiossa LogCat-lokia voidaan filtteröidä applikaation nimen perusteella, jolloin pelailu prosessi id:ten kanssa jää pois.

Tarkempia tietoja Android 4.0:n uudistuksistä löytyy seuraavasta osoitteesta:
http://developer.android.com/sdk/android-4.0-highlights.html

Lista ADT 14:n uudistuksista löytyy osoitteista:
http://developer.android.com/sdk/tools-notes.html
ja
http://developer.android.com/sdk/eclipse-adt.html