...

DispenseLezione_20150318 (1167055 byte)

by user

on
Category: Documents
25

views

Report

Comments

Transcript

DispenseLezione_20150318 (1167055 byte)
Android
Intent, AlertDialog, SharedPreferences
Intents
INTENTS
Un intent è un oggetto che viene utilizzato in Android per richiedere l’esecuzione di una particolare azione da
parte del componente dell’applicazione (o anche di un’app differente). Possono gestire vari tipi di interazioni fra
Activity differenti, ma principalmente vengono utilizzati per avviare un’activity, un servizio o per lanciare un
broadcast (messaggio che qualsiasi app può ricevere).
Esistono due tipi di intent:
• Intent espliciti: specificano il componente da avviare indicandone specificamente il nome (nome completo
della classe che lo rappresenta). L’utilizzo principale di questo tipo di intent è per avviare un’activity o un
servizio relativi all’app corrente.
• Intent impliciti: non indicano un componente, ma un’azione generale che deve essere eseguita,
delegandone la gestione ad un componente che dichiara di essere in grado di svolgere tale compito (anche
di un’altra app).
3
INTENTS ESPLICITI
Il seguente esempio mostra come inviare un intent esplicito per invocare una specifica activity:
Intent intent = new Intent(CurrentActivity.this, OtherActivity.class);
startActivity(intent);
Per farlo è necessario creare un oggetto di tipo Intent, passando come parametri al costruttore il riferimento al
Context attuale e la classe dell’Activity che vogliamo lanciare.
Dopodichè è sufficiente invocare il metodo startActivity, passando l’Intent appena creato.
INTENTS IMPLICITI CUSTOM
E’ possibile definire delle proprie azioni custom, per definire una propria Activity che possa essere lancita anche
dall’esterno della nostra applicazione. Per farlo è sufficiente associarle, all’interno del Manifest, un intent-filter che
definisca la nostra custom Action, nel seguente modo:
Per poter lanciare in modo esplicito l’Intent corrispondente all’azione appena definita, è sufficiente utilizzare il
seguente codice:
5
INTENTS IMPLICITI: SEND
Il seguente frammento di XML mostra un activity che dichiara di essere in grado di inviare informazioni testuali.
Oltre al tipo di azione (SEND), è necessario specificare inoltre il mimeType delle informazioni che il componente
può gestire (in questo caso dati testuali).
Il seguente frammento di codice Java invece, mostra come richiedere l’esecuzione della medesima azione. Anche in
questo caso si specifica il mimeType ed è, ovviamente, necessario aggiungere come extra la stringa da inviare
Intent sendIntent = new Intent();
sendIntent.setAction(Intent.ACTION_SEND);
sendIntent.putExtra(Intent.EXTRA_TEXT, textMessage);
sendIntent.setType(HTTP.PLAIN_TEXT_TYPE);
//Si verifica l’esistenza di un activity in grado di assolvere il compito
if (sendIntent.resolveActivity(getPackageManager()) != null) {
startActivity(sendIntent);
}
6
INTENTS IMPLICITI: VIEW
L’azione VIEW viene utilizzata per specificare informazioni che devono essere mostrate all’utente.
Tale action richiede come input le informazioni da visualizzare, passate sotto forma di URI.
Il componente che dichiara di gestire tali azioni, deve riportare, nel proprio intent-filter, un tag data in cui specifica,
nell’attributo scheme, i tipi di URI che supporta.
I frammenti che seguono mostrano, da un lato un intent-filter che consente di dichiarare un componente in grado
di gestire la visualizzazione di URI aventi come schema http, e dall’altro l’invocazione di un componente in grado di
gestire le stesse informazioni.
Intent viewIntent = new Intent();
sendIntent.setAction(Intent.ACTION_VIEW);
intent.setData(Uri.parse("http://www.google.it"));
startActivity(viewIntent);
7
PASSAGGIO DI INFORMAZIONI TRAMITE INTENT
In alcuni casi può essere necessario passare informazioni all’activity che stiamo avviando, mentre, in altre
situazioni, può essere richiesto che sia l’activity invocata a restituirci dei risultati.
Per passare informazioni all’activity è sufficiente invocare, sull’intent, il metodo putExtra(..), i cui overload ci
consentono di inviare dati di vario tipo (String, int, Serializable,..)
Per far si che sia l’activity a restituirci informazioni è necessario utilizzare, anzichè startActivity(..), il metodo
startActivityForResult(..). I risultati possono essere invece recuperati nell’apposita funzione di callback
OnActivityResult.
Intent intent=new Intent(this, MainActivity.class);
intent.putExtra(EXTRA_NOME, "Marco");
startActivityForResult(intent, REQUEST_CODE);
protected void onActivityResult(int requestCode, int
resultCode, Intent data) {
…
}
Il parametro requestCode consente di associare la richiesta alla corrispondente risposta.
8
PASSAGGIO DI INFORMAZIONI TRAMITE INTENT
L’activity che viene lanciata deve ovviamente essere in grado di recuperare le informazioni associate al relativo
Intent. Per poterlo fare è necessario innanzitutto recuperare l’intent attraverso il metodo getIntent().
Dopodichè è necessario invocare il metodo appropriato a seconda del tipo di informazioni che si vogliono
recuperare e di come queste sono state passate all’intent.
Per esempio, per recuperare le informazioni passate nell’esempio relativo all’azione FORM, in cui l’informazione
è stata passata come extra, il codice per recuperare il testo da inviare sarà il seguente:
Intent intent = getIntent();
if( intent != null)
String text = intent.getStringExtra(EXTRA_NOME);
L’activity che viene lanciata attraverso la funzione startActivityForResult(..), deve essere inoltre in grado di
restituire le informazioni richieste. Per farlo viene utilizzato, anche in questo caso, un’Intent, che sarà passato
come parametro alla funzione setResult(..).
9
SharedPreferences
SHARED PREFERENCES : SALVATAGGIO
Le SharedPreferences sono un meccanismo, fornito dal sistema Android, che ci permette di salvare dei singoli
oggetti in maniera rapida e persistente. Abbiamo la possibilità di salvare oggetti di tutti i tipi base (String, int,
boolean, ...) più qualsiasi oggetto che implementi le interfacce Serializable o Parcelable.
Per salvare informazioni in una preference, è necessario recuperare un oggetto di tipo SharedPreferences
(tramite un apposito metodo della classe Context).
Dopodichè, dato che il salvataggio di informazioni nelle preferences è gestito con logica transazionale, è
necessario invocare il metodo edit() per aprire una nuova informazione, utilizzare il metodo putString (se
vogliamo salvare una stringa) per salvare l’oggetto ed infine concludere la transazione attraverso la funzione
apply().
11
SHARED PREFERENCES: LETTURA
l recupero di informazioni è molto più immediato, dato che è sufficiente recuperare l’oggetto
SharedPreferences associato all’applicazione corrente ed infine richiamare il metodo per il recupero del tipo di
dato desiderato.
12
AlertDialog
ALERT DIALOG
Le AlertDialog vengono utilizzate per mostrare informazioni importanti all’utente o per richiedere conferma
prima dell’esecuzione di un’operazione critica o comunque definitiva (come la cancellazione di alcune
informazioni).
Il codice che segue mostra un esempio di creazione di una dialog.
14
Alert Dialog
Fly UP