intent - Server users.dimi.uniud.it

Download Report

Transcript intent - Server users.dimi.uniud.it

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 un’interfaccia grafica è composta.

ovvero ciò di cui 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); // instanzio l’Intent ○ startActivity(intent); //avvio la seconda Activity 

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.

Importare un progetto esistente 2.

3.

4.

5.

6.

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 Workspace  Android  Existing Android Code Into Scaricare: http://www.marcovernier.it/etvid/HelloAndroid.zip

Creare un nuovo progetto

 File  Project New  Project  Android  Android Application

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

l’applicazione per esempio è semplice compilare

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 • /res/layout   immagini layout • /res/menu  • /res/raw  menu vari tipi di file • /res/value • /res/xml   stringhe 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  Normal Screens  Large Screens  470dp x 320dp 640dp x 480dp Xlarge Screens  426dp x 320dp 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

quali schermi sono supportati dalla nostra applicazione 2.

3.

4.

Fornire diversi layouts per schermi differenti   Creare diverse cartelle nella forma

layout-small

,

layout-large

all’interno ci sarà un file xml che descriverà il tipo di layout ecc. dove Come fa Android a capire quale layout è il migliore? Lo fa automaticamente a runtime in fase di esecuzione ○ Maggiori info http://developer.android.com/guide/topics/resources/providing resources.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-on android.html