+
Laboratorio di Elaborazione e Trasmissione Video
Marco Vernier – Niki Martinel
Dipartimento di Matematica e Informatica
Università degli studi di Udine
Outline

Lezione 1 - Il sistema operativo Android
 Cos’è Android
 Vantaggi e Svantaggi
 Sviluppare per Android

Lezione 2 - OpenCV libraries
 Cosa sono
 Cosa si può fare con le OpenCV
 OpenCV e Android O.S.
Perchè Android
«The best applications for
Android are not here yet. That’s
because they’re going to be
written by you and many other
developers just like you»
Sergey Brin – Google Inc.
Il sistema operativo Android


Sistema operativo per dispositivi mobili basato su Linux
E’ stato sviluppato inizialmente da Google e poi da Open
Handset Alliance (OHA) – gruppo di aziende es. Google,
Intel, Samsung, Motorola
sbroh.wordpress.com
Le versioni di Android


I° versione: 22 Ottobre 2008 sotto il nome
di T-Mobile
Ora siamo alla versione 4.4 Kit Kat
Wikipedia
Vantaggi di Android O.S

E’ un sistema operativo open-source
 Chiunque può sviluppare per Android
 Nessuna politica restrittiva
 Ogni costruttore (Samsung, Motorola ecc.) può adattarle alle loro
esigenze

E’ facile sviluppare per Android





Il linguaggio di programmazione utilizzato è Java
Ambiente di sviluppo (SDK e Eclipse)
Numerose API (Application Programming Interface)
Possibilità di utilizzare uno o più emulatori contemporaneamente (AVD Android Virtual Devices)
Architettura basata sul riuso dei componenti
 Le varie applicazioni possono sfruttare componenti che sono resi
disponibili da altre applicazioni
Altri vantaggi

Massima personalizzazione delle applicazioni
 Per diversi dispositivi (smartphones – tablet)

Tutte le applicazioni hanno gli stessi diritti
 Non c’è nessuna differenza tra le applicazioni cosiddette «core» (es.
voice recorder vs my application)

Il ciclo di vita delle applicazioni è gestito automaticamente
dal sistema operativo
 Apertura, chiusura, pausa di una applicazione (vedremo più avanti)

Gestione automatizzata della memoria
 Ottimizzato per risparmiare risorse
Android Developers
 developer.android.com/index.html
L’architettura di Android
Il Kernel

Il livello più basso di questo S.O. è’ rappresentato dal kernel
di Linux nella versione 2.6
 La necessità era quella di disporre di un vero e proprio sistema operativo
che fornisse gli strumenti di basso livello per la virtualizzazione
dell’hardware sottostante attraverso la definizione di diversi driver per la
gestione delle diverse periferiche.
Il livello Libraries


Questo livello contiene un insieme di librerie native realizzate
in C e C++ che rappresentano il core vero e proprio di
Android.
Tra queste
 Surface Manager  ha il compito di gestire le view ovvero ciò di cui





un’interfaccia grafica è composta.
Open GL ES  librerie adatte per lo sviluppo di applicativi 3D.
Media Framework  è un componente che permette di gestire i diversi
CODEC per i vari formati di acquisizione e riproduzione audio video.
SQLite  è una particolare libreria che implementa un DBMS
relazionale caratterizzato dal fatto di essere molto compatto, diretto ecc.
SSL  libreria per la gestione dei Secure Socket Layer
………
Application Framework

Si tratta di un insieme di componenti più di alto livello per
l’esecuzione di funzionalità ben precise.
 Activity Manager  per la gestione delle varie schermate (Activity)
 Package Manager  gestisce il ciclo di vita delle applicazioni
 Telephony Manager  libreria che permette maggiore interazione con le
funzionalità offerte dal dispositivo cellulare (iniziare una chiamata ecc.)
 Notification Manager  mette a disposizione degli strumenti che
l’applicazione può utilizzare per inviare una particolare notifica al
dispositivo.
 View System  come si vedrà più avanti, l’interfaccia grafica di
un’applicazione per Android è composta da specializzazioni della classe
«View». Perciò questa componente contiene tutti gli strumenti per
gestire gli eventi dell’interfaccia grafica.
 …………….
Livello Applicativo
I componenti di Android

Ogni applicazione è formata da diversi componenti
 ACTIVITIES: possono essere definite come la schermata che l’utente
visualizza (un contenitore di componenti grafici es. bottoni, etichette
ecc.)
 SERVICES: sono delle componenti che non vengono visualizzate
dall’utente in quanto lavorano e rimangono in background
 BROADCAST RECEIVERS: sono componenti che permettono di gestire
eventi generati a livello globale (es. evento batteria scarica intercettato
da una applicazione)
 CONTENT PROVIDER: sono dei repository di informazioni a cui è
possibile accedere da diversi componenti attraverso una modalità
standard. Più applicazioni condividono e si scambiano gli stessi dati.
Le Intent

INTENT: è un meccanismo che descrive un’azione precisa e
che permette alle varie Activity di comunicare tra di loro (sono
dei veri e propri messaggi es. «fai una chiamata, apri il
navigatore ecc.»)

Activities, services e broadcast receivers vengono attivati
tramite i messaggi di Intent

Si può distinguere tra Intent espliciti e impliciti:

Intent espliciti: il nome del componente che risponderà è già noto in fase di creazione
dell’Intent stesso
○
○

Intent intent = new Intent(Context, activityToCall.class);
startActivity(intent); //avvio la seconda Activity
// instanzio l’Intent
Intent impliciti: non definiscono il nome del target e vengono utilizzati tipicamente per
attivare componenti in altre applicazioni (per es. aprire un browser)
○
Intent intent = new Intent(Intent.ACTION_VIEW,Uri.parse("http://www.google.it"));
Intent Filter



Sono un meccanismo che permette ad un’Activity di
dichiarare l’insieme degli intent che è in grado di gestire
ovvero esporre al resto del sistema cosa è in grado di fare
l’applicazione (es. gestire una chiamata, gli sms ecc.)
Meglio ancora: quando lo sviluppatore crea una nuova
applicazione, egli definisce cosa essa sia in grado di fare
quest’ultima
Vanno dichiarati nel file Androidmanifest.xml
 L’AndroidManifest.xml è file xml che si trova nella root del progetto.
Esso permette di dare al dispositivo che esegue l’applicazione
informazioni utili sull’applicativo stesso
Action
Gli intent filter vengono descritti da della costanti «action» definite
dalla classe Intent
Esecuzione di un programma

Lo sviluppo di applicazioni Android avviene utilizzando il
linguaggio di programmazione Java
 Supporto di molti packages (es. java.io, java.lang, java.math etc.)

Normalmente in Java i programmi compilati (file .class)
vengono processati dalla Java Virtual Machine (JVM)
 Compile Once, Run Everywhere

Android utilizza invece la Dalvik Virtual Machine
 La compilazione del programma genera un archivio .apk (può essere
considerato come un file con estensione .exe)
 L’archivio .apk contiene diversi file (Androidmanifest.xml, build.xml ecc.)
tra cui un file .dex che non è altro che il risultato della compilazione da
parte della DVM
 Vantaggi nell’utilizzo della DVM
○
Riduzione del 50% della dimensione del programma
○ Ottimizzazione delle risorse a favore dei dispositivi mobili con memoria limitata
○ Efficace esecuzione di più processi contemporaneamente
Processing delle applicazioni

Obiettivo di Android: realizzare applicazioni in grado di
rispondere immediatamente alle azioni dell’utente.

Ogni applicazione va in esecuzione su processi separati,
ognuna all’interno di un proprio processo Linux e all’interno
di una differente macchina virtuale.

Si parla di «task affinity»: tutte le attività di una applicazione
hanno la stessa affinità quindi vengono eseguite nello
stesso task
 Con dei specifici FLAG è possibile avviare una attività dell’applicazione
su uno stack diverso da quello di appartenenza
 A volte si dice che l’esecuzione di una attività di un diverso applicativo
appartiene allo stesso task
○
Es. scelta di un contatto da inviare tramite Bluetooth
Ciclo di vita delle applicazioni

ACTIVITY: rappresenta una possibile interazione dell’utente
con l’applicazione e può essere associata al concetto di
schermata.
 Schermata che contiene componenti grafici (bottoni, testi ecc.)

Ogni activity può assumere diversi stati:
 ACTIVE: l’Activity è in cima allo stack, è visibile e ha il focus. E’ quella
che riceve gli eventi da parte dell’utente
 PAUSED: fa riferimento ad Activity non attive (non sensibile alle
interazioni degli utenti) ma ancora visibili per la trasparenza di quelle
superiori o perché queste non occupano tutto lo spazio a disposizione.
 STOPPED: si riferisce ad Activity non attive ne visibili. E’ tra le prime
candidate ad essere eliminata.
 INACTIVE: si trova in questo stato quando viene eliminata oppure prima
di essere creata.
I metodi di «Callback»

I passaggi di stato (Active-Stopped) tra un’activity ed un’altra
sono descritti da dei metodi cosiddetti di callback
•
•
•
•
•
•
•
•
onCreate(): primo metodo ad essere
chiamato. Significa che l’applicazione
esiste.
onStart(): l’applicazione viene
visualizzata.
onResume(): l’applicazione è in cima
alla stack e prende il focus.
RUNNING: se onResume() termina
con successo l’applicazione entra nello
stato di RUNNING.
onPause(): viene invocato per
esempio quando viene premuto il tasto
back. L’activity non è più visibile
(insensibile agli input da parte
dell’utente).
onStop(): viene invocato prima del
metodo onDestroy() che elimina
completamente l’applicazione.
onRestart(): viene invocato per
ripristinare l’applicazione quando si
trova nello stato di STOP.
onDestroy(): viene invocato per
eliminare l’applicazione.
Developing for Android


L’SDK (Software Development Kit) di Android offre una
moltitudine di API e di strumenti utili per lo sviluppo di
qualsiasi tipo di applicativo sia per smartphone che per
tablet.
Dalla sezione «DevelopTraining» del sito
developer.android è possibile scaricare l’Android SDK
(390MB)
Android SDK + Eclipse

L’archivio che si andrà a scaricare contiene:
 Eclipse + ADT plugin
 Android SDK Tools
 Android Platform Tools
 The latest Android Platform
 The latest Android system image for the emulator

E’ necessario installare anche la Java Platform JDK che si
trova sul sito di Oracle:
http://www.oracle.com/technetwork/java/javase/downloads/index.html

Fate attenzione alla versione del S.O. che usate
Vantaggi dell’ADT

E’ un utile plugin per la creazione e il debug di Applicazioni
Android

Permette di creare velocemente applicazioni attraverso un
wizard
 Automatizza il processo di creazione delle applicazioni
○ Anziché utilizzare strumenti da linea di comando come per esempio «ant»

Fornisce sia un editor testuale che grafico
 Per esempio modifico il layout, inserisco il bottone mediante interfaccia
grafica, senza scrivere codice

I file .apk vengono generati automaticamente
Eclipse Environment

Selezionare una directory di lavoro «workspace» dove inserire tutti i progetti
Utilizzo di Eclipse + ADT

In questa sessione di laboratorio proveremo a:
1.
2.
3.
4.
5.
6.
Importare un progetto esistente
Creare un nuovo progetto
Studiare la struttura di un progetto Android
Vedere le opportunità offerte da Android SDK Manager (installare
diversi SDK)
Realizzare un Android Virtual Device Manager AVD (new Emulator)
personalizzato
Eseguire una applicazione, con eventuali modifiche
Import di un progetto esistente

File  Import  Android  Existing Android Code Into
Workspace
Scaricare: http://www.marcovernier.it/etvid/HelloAndroid.zip
Creare un nuovo progetto

File  New  Project  Android  Android Application
Project
Informazioni da inserire







Application Name (es. MyAndroid) – convenzione: la prima
lettera deve essere in maiuscolo (stessa convenzione di Java)
Project Name – viene utilizzato da Eclipse ed è lo stesso
dell’application name
Package Name – è buona norma che ciascun file (classe)
appartenga a un package che lo contestualizza all’interno di un
progetto o di una funzionalità
Minimum Required SDK – versione minima dell’SDK
Target SDK – specifica la versione di Android con cui
l’applicazione dovrà essere compatibile
Compile With
Theme – (Holo etc.)
Suggerimento – vedi le info sul simbolo «i»
Struttura di un progetto Android
su Eclipse

src/: contiene i sorgenti della nostra
applicazione

Android x.x/: (librerie e dipendenze)

bin/: contiene l’applicazione una volta
compilata (le classi compilate, il file .apk)

libs/: contiene i file di terze parti di cui
l’applicazione necessita (es. file .jar)

res/: contiene tutte le risorse
dell’applicazione (es. il layout
dell’interfaccia grafica)
Ancora sulla struttura

AndroidManifest.xml: è un file xml che
descrive come l’applicazione deve essere
costruita e quali componenti, servizi
permessi possono essere attivati. Contiene
informazioni utili ai dispositivi (smartphone,
tablet) per gestire l’applicazione e
l’interazione con gli altri componenti
eventualmente installati.

build.xml & default.properties: sono
degli script utilizzati dal tool «ant» per
compilare l’applicativo da linea di
comando.
Da precisare


Qualsiasi operazione che si può fare in Eclipse, può essere
eseguita anche da linea di comando (prompt di MSDOS,
Shell di Linux ecc.)
Con Apache Ant per esempio è semplice compilare
l’applicazione
Apache Ant is a Java library and command-line tool whose
mission is to drive processes described in build files as targets
and extension points dependent upon each other.
http://ant.apache.org/
In particolare nel manifest file

Vengono descritti i componenti dell’applicazione

Viene indicato il package Java utilizzato come identificatore
unico

Vengono dichiarati i permessi, accettati dall’utente, affinché
l’applicazione possa funzionare (es. Network permissions,
Camera permissions etc.)

Viene dichiarato il livello minimo delle API che l’applicazione
richiede

Gli intent filters visti in precedenza

…..
Dopo la compilazione

Dopo la prima compilazione del programma, nella root del
progetto, viene creata una cartella gen/
 Essa conterrà i file generati automaticamente da Eclipse tra cui:
○ Il file R.java  che contiene una serie di costanti collegate alle risorse
dell’applicazione
La cartella res (resources)

•
•
•
•
•
•
La cartella «res» contiene differenti risorse in riferimento ai
diversi tipi di layouts
/res/drawable  immagini
/res/layout  layout
/res/menu  menu
/res/raw  vari tipi di file
/res/value  stringhe
/res/xml  vari file xml
Designing for multiple screens
Quando si progetta per Android bisogna tenere a mente che
esistono diversi dispositivi con differenti risoluzioni.
 E’ importante perciò realizzare applicazioni che si adattino il più
possibile ai dispositivi esistenti in commercio
 Una volta: si creavano diversi .apk per i diversi dispositivi
 Adesso: Android differenzia tra 4 principali categorie di layouts
a seconda della loro diversa densità:





Small Screens  426dp x 320dp
Normal Screens 470dp x 320dp
Large Screens  640dp x 480dp
Xlarge Screens  960dp x 720dp
○
○
Un dp è equivalente a un pixel fisico su uno schermo da 160 dpi (punti per pollice)
dp = Density Indipendent Pixel  px = dp * (dpi / 160)
Come supportare schermi diversi
1.
Dichiarare nell’AndroidManifest file attraverso l’elemento
<support-screens> quali schermi sono supportati dalla nostra
applicazione
2.
Fornire diversi layouts per schermi differenti

Creare diverse cartelle nella forma layout-small, layout-large ecc. dove
all’interno ci sarà un file xml che descriverà il tipo di layout
 Come fa Android a capire quale layout è il migliore? Lo fa automaticamente a
runtime in fase di esecuzione
○
3.
4.
Maggiori info http://developer.android.com/guide/topics/resources/providingresources.html#BestMatch
Fornire diversi «bitmap drawables» per schermi con diverse
densità di pixel (android supporta .png, .jpg, .gif)  nel caso di
immagini
Usare tutte le convenzioni che si utilizzano anche nel web per
creare un layout «liquido» (es. usare dp anziché px)
Resources  http://developer.android.com/guide/practices/screens_support.html
Esistono diversi tipi di layouts
Resources: http://developer.android.com/guide/topics/ui/declaring-layout.html#CommonLayouts
Android SDK Manager

Premendo il pulsante in figura è
possibile avviare l’SDK
Manager

Mediante questo tool è possibile
installare, aggiornare, rimuovere
qualsiasi piattaforma android

E’ possibile installare anche
librerie di terze parti o librerie di
Google per scopi precisi (es.
Google Maps, Google + etc.)
Android Virtual Device Manager

L’ADT di Android mette a
disposizione un Android Virtual
Device (emulatore) per eseguire in
locale (sul PC) le applicazioni senza
doverle trasferire nel dispositivo
mobile

Premendo il pulsante è possibile
avviare il tool che permette la
creazione di un emulatore
Vediamo come creare un AVD

Le informazioni che andremo ad
inserire saranno:





Nome dell’AVD
Tipo di Device con la risoluzione preferita
L’SDK
Il tipo di CPU
Altri parametri per la gestione della
memoria
Sources:
http://developer.android.com/tools/devices/index.ht
ml
Eseguiamo l’applicazione
Esercizi





Modifichiamo il testo della stringa (inserire un altro testo)
Modifichiamo il colore della stringa
Cambiamo la dimensione della stringa
Inseriamo una immagine
Inseriamo un bottone





Creiamo prima il bottone all’interno del layout
Si noti che il bottone verrà identificato univocamente da un id descritto a sua
volta da una costante all’interno del file R.java
L’operazione di cast è necessaria in quanto tale metodo ritorna il componente
ottenuto attraverso un riferimento di tipo «View» che ne rappresenta una
generalizzazione
Un bottone deve essere collegato alla vista a cui appartiene
Ora aggiungiamo un ascoltatore al bottone per gestire il tipo di evento
desiderato
○
Registreremo una implementazione anonima dell’interfaccia View.OnClickListener()
come ascoltatore dell’evento definendo poi l’evento onClick(),
Esercizi 1/2
A questo punto associamo al bottone la funzione di modificare il
testo nella MainActivity con una stringa a nostro piacere
 Ora vediamo come inserire una nuova Activity







Creiamo un file SecondActivity.java e lo inseriamo all’interno del nostro
package di riferimento (New  class  nome classe)
Estendiamo la classe alla sovraclasse Activity in modo tale da ereditare i
metodi di callback
Importiamo i vari package necessari
Creiamo un nuovo file di layout (es. secondlayout.xml) e al suo interno
inseriamo una label con una scritta a piacere (il nome del file xml tutto in
piccolo !!!)
Ora tornando sulla classe secondScreen settiamo il riferimento al file di
layout appena creato
A questo punto dalla classe MainActivity creiamo l’Intent che ci permette di
avviare la seconda schermata
○
○

Intent intent = new Intent(this, secondScreen.class);
startActivity(intent);  da associare all’evento onClick() del pulsante
Proviamo ad eseguire il programma
Cosa ci siamo dimenticati?


Di modificare il file AndroidManifest.xml
Infatti dobbiamo dichiarare la nuova Activity appena creata
Esercizi 2/2


Ora proviamo ad abilitare la videocamera del nostro
dispositivo attraverso un bottone che inseriremo nella
seconda schermata
Suggerimento: utilizziamo le «action»
 Si parla di nuovo di Intent esplicite quando si intende far comunicare
attività della stessa applicazione, già note in fase di sviluppo
 L’avvio della camera avviene tramite la chiamata alla action
«android.media.action.IMAGE_CAPTURE»
Fine
La
prossima lezione:
 Introduzione alle OpenCV
 OpenCV per Android
 Alcuni esempi (video)
Resources

http://developer.android.com/index.html

http://www.eclipse.org/

http://www.androidiani.com/

http://teyvoniathomas.com/index.php/projects/56-opencv-onandroid.html
Scarica

intent - Dipartimento di Matematica e Informatica