SlideShare uma empresa Scribd logo
1 de 23
ANDROID: ACTIVITY E INTENT
Simone Compagnone   matr. 709649
Marco Covelli       matr. 702957
Paola Percuoco      matr. 742072
ACTIVITY
   Un'activity può essere vista come la rappresentazione di una
    schermata




                                                                   2
                         es. Android Dropbox
ACTIVITY – INTERFACCIA GRAFICA

   L'interfaccia grafica di un’activity è in genere definita da una
    o più view, organizzate in una struttura ad albero e
    rappresentate sullo schermo tramite il layout (o group view).



                                       ViewGroup




                          ViewGroup          View   View




                   View     View      View



                                                                       3
ACTIVITY E BACK STACK - 1

   Un’applicazione di solito contiene più activity


   Ciascuna activity può farne partire un’altra, anche di una
    differente applicazione


   Ogni volta che una nuova activity viene eseguita, è impilata
    nel back stack e la precedente viene fermata


   Quando l’utente preme il tasto BACK, l’activity in primo
    piano viene distrutta e il controllo torna a quella precedente




                                                                     4
ACTIVITY E BACK STACK - 2




                            5
LE ACTIVITY IN JAVA

   Una Activity è una classe java che estende la classe
    android.app.Activity
    import android.app.Activity;
    public class ExampleActivity extends Activity { ... }


   È necessario dichiarare l’activity implementata nel file
    AndroidManifest.xml affinché il sistema possa
    eseguirla:
    <manifest ... >
      <application ... >
          <activity android:name="ExampleActivity" />
          ...
      </application ... >
      ...
    </manifest >
                                                               6
ACTIVITY - STATI
   resumed/running: attiva, in primo piano nello schermo
   paused: parzialmente coperta da un’altra attività in primo
    piano
     è mantenuta in memoria
     è legata al window manager
     può essere uccisa dal sistema nel caso di scarsa memoria
      disponibile
   stopped: completamente     oscurata   da   un'altra   (è   in
    "background")
     è mantenuta in memoria
     non è più legata al window manager (non più visibile)
     può essere uccisa dal sistema nel caso di scarsa memoria
      disponibile




                                                                    7
ACTIVITY - LIFECICLE




                       8
ACTIVITY – SALVATAGGIO DI STATO

   Esempio particolare: quando l’utente passa da portrait a
    landscape, o viceversa, l’activity in primo piano viene distrutta
    e ricreata completamente



   Per salvare i dati, preservandoli dalla distruzione dell’activity, è
    possibile fare l’override del metodo onSaveInstanceState()
    dell’activity stessa



   L’implementazione di default di onSaveInstanceState() salva
    automaticamente lo stato delle view e dei layout dell’activity



                                                                           9
ACTIVITY – SALVATAGGIO DI STATO




                                  10
ACTIVITY – ENTRY POINT

   Un’applicazione può avere più di un «entry point»


   Il sistema può eseguire qualsiasi activity di un’applicazione,
    purché l’activity stessa «manifesti» tale possibilità


   Un’applicazione dovrebbe dichiarare comunque l’entry point
    principale, cioè l’activity che deve essere eseguita all’avvio
    dell’applicazione dal launcher di sistema

    <activity ... >
        <intent-filter ... >
            <action android:name="android.intent.action.MAIN" />
            <category
    android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
        ...
    </activity>
                                                                     11
INTENT

   Un intent è un messaggio che viene scambiato tra tre delle
    componenti    base di un'applicazione Android (Activity,
    Broadcast Receiver e Service)

   Gli intent legano i componenti fra loro a
    run-time     pur     appartenendo      ad
    applicazioni diverse


   Il sistema si preoccupa di recapitare tali
    messaggi ai corretti destinatari


   Un intent è definito nella javadoc della
    classe android.content.Intent   ed è un
    object di tipo Intent

                                                                 12
INTENT – CONSEGNA

   Activity:
     startActivity()
     startActivityForResult()


   Service:
     startService()
     bindService()


   BroadcastReceiver:
     sendBroadcast()
     sendOrderedBroadcast()
     sendStickyBroadcast()




                                           13
INTENT – INFORMAZIONI

   Un intent è costituito da:
     le informazioni di interesse per la componente che lo riceve
      (azione da intraprendere e i dati per agire)
     le informazioni per il sistema Android (ad esempio chi e come
      deve gestire l'intent)


   Principalmente, può contenere i seguenti dati:
       action
       category
       component name
       data
       extras
       flags



                                                                      14
INTENT – ACTION

   Contiene una stringa che identifica un'azione da eseguire o
    nel caso del broadcast intents, è un report di una azione che è
    stata compiuta e quindi segnalata


   Metodi : setAction() e getAction()
       es: intent.setAction(android.content.Intent.ACTION_CALL);




                                                                      15
INTENT – CATEGORY

   Sono stringhe che contengono informazioni aggiuntive sul tipo
    di componente che deve gestire l'intent


   Il sistema Android utilizza queste informazioni per decidere a
    quale componente recapitare il messaggio


   Metodi: addCategory() , removeCategory() e getCategories()




                                                                     16
INTENT – DATA

   In questo campo è possibile associare all'intent alcuni dati
    utili all'applicazione che risponderà al messaggio


   All'interno del campo data dell'intent vengono memorizzati
    gli URI e il tipo MIME ( ex. image/jpeg ) del dato stesso


   Solitamente il campo Data è associato al campo Action, le
    quali sono legate ai dati con diversi tipi di specificazioni, ad
    esempio:
     ACTION_CALL - tel: URI
     ACTION_VIEW - http: URI
     ACTION_EDIT - file:URI




                                                                       17
INTENT – COMPONENT NAME

   Riguarda il nome del componente che dovrà gestire l'intent


   Questo campo è un oggetto ComponentName ed è composto
    da:
     nome completo della classe del componente di destinazione
     nome del pacchetto impostato nel file manifesto dell'applicazione
      in cui risiede il componente


   Metodi: setComponent() , getComponent() , setClassName()



   Anche questo campo è opzionale. Se è impostato, l'oggetto
    intent verrà consegnato ad un'istanza della classe designata.
    Se non è impostato, Android utilizza altre informazioni
    nell'oggetto Intent per individuare una applicazione target
                                                                          18
INTENT - INTENT RESOLUTION

   Questo aspetto riguarda la gestione e lo "smistamento" degli
    intent da parte del sistema Android


   Gli Intent si dividono in:
     intent esplicito: è un messaggio che esplicita sia il nome del
      componente di destinazione che l'azione da eseguire
     Intent implicito: si specifica solo l'azione da eseguire senza
      esplicitare il nome del componente di destinazione


   Per gli intent impliciti, il sistema Android sceglie
    l'applicazione a cui destinare il messaggio a seconda dei filtri
    impostati nei manifest file delle singole applicazioni.




                                                                       19
INTENT - INTENT FILTERS

   I filtri vengono usati per identificare           quali   intent
    l'applicazione è in grado di ricevere e gestire


   Devono essere specificati nel file AndroidManifest.xml delle
    applicazioni, che verrà consultato dal sistema Android per
    decidere a chi consegnare l' intent implicito


   Gli intent espliciti vengono sempre consegnati a destinazione
    (non vengono consultati i filtri dell'applicazione)


   Ogni componente (activities, services e broadcast receivers)
    può avere uno o più filtri



                                                                       20
INTENT - INTENT FILTERS(2)
   Esempio di filtro nel AndroidManifest.xml:

<intent-filter>
    <action android:name="android.intent.action.MAIN"/>
    <category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
<intent-filter>
    <action   android:name="com.example.project.SHOW_CURRENT"/>
    <action android:name="com.example.project.SHOW_RECENT"/>
    <data android:mimeType="video/mpeg" android:scheme="http“ …/>
</intent-filter>




NB. Se un intent ha ad esempio i campi Data ed Action non vuoti, può
    essere consegnato all'applicazione solo se entrambi i campi
    possono essere filtrati                                          21
ACTIVITY E INTENT – ESEMPIO 1
Esempio di intent esplicito e chiamata startActivity()

public class ExampleActivity extends Activity {


    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);


        Button testButton1 = (Button)findViewById(R.id.testButton1);
        testButton1.setOnClickListener(new OnClickListener() {
              @Override
          public void onClick(View v) {
                 Intent intent = new Intent(this, AnotherActivity.class);
                 startActivity(intent);
          }
        });


    }
}




                                                                            22
ACTIVITY E INTENT – ESEMPIO 2
Esempio di intent implicito e chiamata startActivityForResult()
private void pickContact() {
    // Crea un intent per cercare un contatto, come definito in ContactContract
    Intent intent = new Intent(Intent.ACTION_PICK, ContactsContract.AUTHORITY_URI);
    startActivityForResult(intent, PICK_CONTACT_REQUEST);
}


@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    // Se la richiesta è andata bene (OK) e la richiesta è PICK_CONTACT_REQUEST
    if (resultCode == Activity.RESULT_OK && requestCode == PICK_CONTACT_REQUEST) {
        // Fa una query sul content provider dei contatti con il contatto selezionato
        Cursor cursor = getContentResolver().query(data.getData(),
        new String[] {Contacts.DISPLAY_NAME}, null, null, null);
        if (cursor.moveToFirst()) { // True se il cursore è non vuoto
            int columnIndex = cursor.getColumnIndex(Contacts.DISPLAY_NAME);
            String name = cursor.getString(columnIndex);
            // Fa qualcos’altro...
        }
    }
}



                                                                                        23

Mais conteúdo relacionado

Semelhante a Activity intent

follow-app BOOTCAMP 3: Android
follow-app BOOTCAMP 3: Androidfollow-app BOOTCAMP 3: Android
follow-app BOOTCAMP 3: AndroidQIRIS
 
Whymca nfc presentation
Whymca nfc presentationWhymca nfc presentation
Whymca nfc presentationMyti S.r.l.
 
Android - ishan fernando - android nfc presentation
Android - ishan fernando - android nfc presentationAndroid - ishan fernando - android nfc presentation
Android - ishan fernando - android nfc presentationWhymca
 
Whymca nfc presentation
Whymca nfc presentationWhymca nfc presentation
Whymca nfc presentationMyti S.r.l.
 
Introduzione al sistema operativo mobile Android
Introduzione al sistema operativo mobile AndroidIntroduzione al sistema operativo mobile Android
Introduzione al sistema operativo mobile AndroidOpen Makers Italy
 
Adobe TechConnection: Flex Best Practices
Adobe TechConnection: Flex Best PracticesAdobe TechConnection: Flex Best Practices
Adobe TechConnection: Flex Best Practicesmarcocasario
 
Extended Summary of "Sok: The Evolution of Trusted UI on Mobile"
Extended Summary of "Sok: The Evolution of Trusted UI on Mobile"Extended Summary of "Sok: The Evolution of Trusted UI on Mobile"
Extended Summary of "Sok: The Evolution of Trusted UI on Mobile"Simone Cossaro
 
MOBILE APPS con ANDROID - Lo Stretto Digitale
MOBILE APPS con ANDROID  - Lo Stretto DigitaleMOBILE APPS con ANDROID  - Lo Stretto Digitale
MOBILE APPS con ANDROID - Lo Stretto Digitalelostrettodigitale
 
Dependency injection questa sconosciuta
Dependency injection questa sconosciutaDependency injection questa sconosciuta
Dependency injection questa sconosciutaAndrea Dottor
 
Jakarta Struts
Jakarta StrutsJakarta Struts
Jakarta Strutsjgiudici
 
Sviluppo di applicazioni modulari e interoperabilità tra le applicazioni
Sviluppo di applicazioni modulari e interoperabilità tra le applicazioniSviluppo di applicazioni modulari e interoperabilità tra le applicazioni
Sviluppo di applicazioni modulari e interoperabilità tra le applicazioniCodemotion
 
Introduzione alla programmazione android - Android@tulug lezione 2
Introduzione alla programmazione android - Android@tulug lezione 2Introduzione alla programmazione android - Android@tulug lezione 2
Introduzione alla programmazione android - Android@tulug lezione 2Ivan Gualandri
 
Programmazione mobile: ANDROID
Programmazione mobile: ANDROIDProgrammazione mobile: ANDROID
Programmazione mobile: ANDROIDPaolo Tosato
 
WEBdeBS NFC Presentation
WEBdeBS NFC PresentationWEBdeBS NFC Presentation
WEBdeBS NFC PresentationMyti S.r.l.
 
Contracts & Extensions: allargare i confini della propria applicazione (Win8@...
Contracts & Extensions: allargare i confini della propria applicazione (Win8@...Contracts & Extensions: allargare i confini della propria applicazione (Win8@...
Contracts & Extensions: allargare i confini della propria applicazione (Win8@...Giorgio Di Nardo
 
Android programming (ita)
Android programming (ita)Android programming (ita)
Android programming (ita)Vinu Iaconissi
 
SMAU PADOVA 2019 Luca Bonadimani (AIPSI)
SMAU PADOVA 2019 Luca Bonadimani (AIPSI)SMAU PADOVA 2019 Luca Bonadimani (AIPSI)
SMAU PADOVA 2019 Luca Bonadimani (AIPSI)SMAU
 
Sviluppo di un applicativo su dispositivo mobile per la visualizzazione su ma...
Sviluppo di un applicativo su dispositivo mobile per la visualizzazione su ma...Sviluppo di un applicativo su dispositivo mobile per la visualizzazione su ma...
Sviluppo di un applicativo su dispositivo mobile per la visualizzazione su ma...Sabrina Cramastetter
 
Codice efficiente per le Windows Store Apps by Matteo Anelli
Codice efficiente per le Windows Store Apps by Matteo AnelliCodice efficiente per le Windows Store Apps by Matteo Anelli
Codice efficiente per le Windows Store Apps by Matteo AnelliCodemotion
 
Sviluppare app native per iOS
Sviluppare app native per iOSSviluppare app native per iOS
Sviluppare app native per iOSGaspare Novara
 

Semelhante a Activity intent (20)

follow-app BOOTCAMP 3: Android
follow-app BOOTCAMP 3: Androidfollow-app BOOTCAMP 3: Android
follow-app BOOTCAMP 3: Android
 
Whymca nfc presentation
Whymca nfc presentationWhymca nfc presentation
Whymca nfc presentation
 
Android - ishan fernando - android nfc presentation
Android - ishan fernando - android nfc presentationAndroid - ishan fernando - android nfc presentation
Android - ishan fernando - android nfc presentation
 
Whymca nfc presentation
Whymca nfc presentationWhymca nfc presentation
Whymca nfc presentation
 
Introduzione al sistema operativo mobile Android
Introduzione al sistema operativo mobile AndroidIntroduzione al sistema operativo mobile Android
Introduzione al sistema operativo mobile Android
 
Adobe TechConnection: Flex Best Practices
Adobe TechConnection: Flex Best PracticesAdobe TechConnection: Flex Best Practices
Adobe TechConnection: Flex Best Practices
 
Extended Summary of "Sok: The Evolution of Trusted UI on Mobile"
Extended Summary of "Sok: The Evolution of Trusted UI on Mobile"Extended Summary of "Sok: The Evolution of Trusted UI on Mobile"
Extended Summary of "Sok: The Evolution of Trusted UI on Mobile"
 
MOBILE APPS con ANDROID - Lo Stretto Digitale
MOBILE APPS con ANDROID  - Lo Stretto DigitaleMOBILE APPS con ANDROID  - Lo Stretto Digitale
MOBILE APPS con ANDROID - Lo Stretto Digitale
 
Dependency injection questa sconosciuta
Dependency injection questa sconosciutaDependency injection questa sconosciuta
Dependency injection questa sconosciuta
 
Jakarta Struts
Jakarta StrutsJakarta Struts
Jakarta Struts
 
Sviluppo di applicazioni modulari e interoperabilità tra le applicazioni
Sviluppo di applicazioni modulari e interoperabilità tra le applicazioniSviluppo di applicazioni modulari e interoperabilità tra le applicazioni
Sviluppo di applicazioni modulari e interoperabilità tra le applicazioni
 
Introduzione alla programmazione android - Android@tulug lezione 2
Introduzione alla programmazione android - Android@tulug lezione 2Introduzione alla programmazione android - Android@tulug lezione 2
Introduzione alla programmazione android - Android@tulug lezione 2
 
Programmazione mobile: ANDROID
Programmazione mobile: ANDROIDProgrammazione mobile: ANDROID
Programmazione mobile: ANDROID
 
WEBdeBS NFC Presentation
WEBdeBS NFC PresentationWEBdeBS NFC Presentation
WEBdeBS NFC Presentation
 
Contracts & Extensions: allargare i confini della propria applicazione (Win8@...
Contracts & Extensions: allargare i confini della propria applicazione (Win8@...Contracts & Extensions: allargare i confini della propria applicazione (Win8@...
Contracts & Extensions: allargare i confini della propria applicazione (Win8@...
 
Android programming (ita)
Android programming (ita)Android programming (ita)
Android programming (ita)
 
SMAU PADOVA 2019 Luca Bonadimani (AIPSI)
SMAU PADOVA 2019 Luca Bonadimani (AIPSI)SMAU PADOVA 2019 Luca Bonadimani (AIPSI)
SMAU PADOVA 2019 Luca Bonadimani (AIPSI)
 
Sviluppo di un applicativo su dispositivo mobile per la visualizzazione su ma...
Sviluppo di un applicativo su dispositivo mobile per la visualizzazione su ma...Sviluppo di un applicativo su dispositivo mobile per la visualizzazione su ma...
Sviluppo di un applicativo su dispositivo mobile per la visualizzazione su ma...
 
Codice efficiente per le Windows Store Apps by Matteo Anelli
Codice efficiente per le Windows Store Apps by Matteo AnelliCodice efficiente per le Windows Store Apps by Matteo Anelli
Codice efficiente per le Windows Store Apps by Matteo Anelli
 
Sviluppare app native per iOS
Sviluppare app native per iOSSviluppare app native per iOS
Sviluppare app native per iOS
 

Mais de Simone Compagnone

Mais de Simone Compagnone (7)

Relazione esame informatica grafica
Relazione esame informatica graficaRelazione esame informatica grafica
Relazione esame informatica grafica
 
Progetto elaborazione delle immagini complementi
Progetto elaborazione delle immagini complementiProgetto elaborazione delle immagini complementi
Progetto elaborazione delle immagini complementi
 
Interazione app
Interazione appInterazione app
Interazione app
 
Sa4j - xerces
Sa4j - xercesSa4j - xerces
Sa4j - xerces
 
Timeline nel web definitiva (1)
Timeline nel web definitiva (1)Timeline nel web definitiva (1)
Timeline nel web definitiva (1)
 
Provavideo
ProvavideoProvavideo
Provavideo
 
Presentazione tesicompagnonesimone
Presentazione tesicompagnonesimonePresentazione tesicompagnonesimone
Presentazione tesicompagnonesimone
 

Activity intent

  • 1. ANDROID: ACTIVITY E INTENT Simone Compagnone matr. 709649 Marco Covelli matr. 702957 Paola Percuoco matr. 742072
  • 2. ACTIVITY  Un'activity può essere vista come la rappresentazione di una schermata 2 es. Android Dropbox
  • 3. ACTIVITY – INTERFACCIA GRAFICA  L'interfaccia grafica di un’activity è in genere definita da una o più view, organizzate in una struttura ad albero e rappresentate sullo schermo tramite il layout (o group view). ViewGroup ViewGroup View View View View View 3
  • 4. ACTIVITY E BACK STACK - 1  Un’applicazione di solito contiene più activity  Ciascuna activity può farne partire un’altra, anche di una differente applicazione  Ogni volta che una nuova activity viene eseguita, è impilata nel back stack e la precedente viene fermata  Quando l’utente preme il tasto BACK, l’activity in primo piano viene distrutta e il controllo torna a quella precedente 4
  • 5. ACTIVITY E BACK STACK - 2 5
  • 6. LE ACTIVITY IN JAVA  Una Activity è una classe java che estende la classe android.app.Activity import android.app.Activity; public class ExampleActivity extends Activity { ... }  È necessario dichiarare l’activity implementata nel file AndroidManifest.xml affinché il sistema possa eseguirla: <manifest ... > <application ... > <activity android:name="ExampleActivity" /> ... </application ... > ... </manifest > 6
  • 7. ACTIVITY - STATI  resumed/running: attiva, in primo piano nello schermo  paused: parzialmente coperta da un’altra attività in primo piano  è mantenuta in memoria  è legata al window manager  può essere uccisa dal sistema nel caso di scarsa memoria disponibile  stopped: completamente oscurata da un'altra (è in "background")  è mantenuta in memoria  non è più legata al window manager (non più visibile)  può essere uccisa dal sistema nel caso di scarsa memoria disponibile 7
  • 9. ACTIVITY – SALVATAGGIO DI STATO  Esempio particolare: quando l’utente passa da portrait a landscape, o viceversa, l’activity in primo piano viene distrutta e ricreata completamente  Per salvare i dati, preservandoli dalla distruzione dell’activity, è possibile fare l’override del metodo onSaveInstanceState() dell’activity stessa  L’implementazione di default di onSaveInstanceState() salva automaticamente lo stato delle view e dei layout dell’activity 9
  • 11. ACTIVITY – ENTRY POINT  Un’applicazione può avere più di un «entry point»  Il sistema può eseguire qualsiasi activity di un’applicazione, purché l’activity stessa «manifesti» tale possibilità  Un’applicazione dovrebbe dichiarare comunque l’entry point principale, cioè l’activity che deve essere eseguita all’avvio dell’applicazione dal launcher di sistema <activity ... > <intent-filter ... > <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> ... </activity> 11
  • 12. INTENT  Un intent è un messaggio che viene scambiato tra tre delle componenti base di un'applicazione Android (Activity, Broadcast Receiver e Service)  Gli intent legano i componenti fra loro a run-time pur appartenendo ad applicazioni diverse  Il sistema si preoccupa di recapitare tali messaggi ai corretti destinatari  Un intent è definito nella javadoc della classe android.content.Intent ed è un object di tipo Intent 12
  • 13. INTENT – CONSEGNA  Activity:  startActivity()  startActivityForResult()  Service:  startService()  bindService()  BroadcastReceiver:  sendBroadcast()  sendOrderedBroadcast()  sendStickyBroadcast() 13
  • 14. INTENT – INFORMAZIONI  Un intent è costituito da:  le informazioni di interesse per la componente che lo riceve (azione da intraprendere e i dati per agire)  le informazioni per il sistema Android (ad esempio chi e come deve gestire l'intent)  Principalmente, può contenere i seguenti dati:  action  category  component name  data  extras  flags 14
  • 15. INTENT – ACTION  Contiene una stringa che identifica un'azione da eseguire o nel caso del broadcast intents, è un report di una azione che è stata compiuta e quindi segnalata  Metodi : setAction() e getAction()  es: intent.setAction(android.content.Intent.ACTION_CALL); 15
  • 16. INTENT – CATEGORY  Sono stringhe che contengono informazioni aggiuntive sul tipo di componente che deve gestire l'intent  Il sistema Android utilizza queste informazioni per decidere a quale componente recapitare il messaggio  Metodi: addCategory() , removeCategory() e getCategories() 16
  • 17. INTENT – DATA  In questo campo è possibile associare all'intent alcuni dati utili all'applicazione che risponderà al messaggio  All'interno del campo data dell'intent vengono memorizzati gli URI e il tipo MIME ( ex. image/jpeg ) del dato stesso  Solitamente il campo Data è associato al campo Action, le quali sono legate ai dati con diversi tipi di specificazioni, ad esempio:  ACTION_CALL - tel: URI  ACTION_VIEW - http: URI  ACTION_EDIT - file:URI 17
  • 18. INTENT – COMPONENT NAME  Riguarda il nome del componente che dovrà gestire l'intent  Questo campo è un oggetto ComponentName ed è composto da:  nome completo della classe del componente di destinazione  nome del pacchetto impostato nel file manifesto dell'applicazione in cui risiede il componente  Metodi: setComponent() , getComponent() , setClassName()  Anche questo campo è opzionale. Se è impostato, l'oggetto intent verrà consegnato ad un'istanza della classe designata. Se non è impostato, Android utilizza altre informazioni nell'oggetto Intent per individuare una applicazione target 18
  • 19. INTENT - INTENT RESOLUTION  Questo aspetto riguarda la gestione e lo "smistamento" degli intent da parte del sistema Android  Gli Intent si dividono in:  intent esplicito: è un messaggio che esplicita sia il nome del componente di destinazione che l'azione da eseguire  Intent implicito: si specifica solo l'azione da eseguire senza esplicitare il nome del componente di destinazione  Per gli intent impliciti, il sistema Android sceglie l'applicazione a cui destinare il messaggio a seconda dei filtri impostati nei manifest file delle singole applicazioni. 19
  • 20. INTENT - INTENT FILTERS  I filtri vengono usati per identificare quali intent l'applicazione è in grado di ricevere e gestire  Devono essere specificati nel file AndroidManifest.xml delle applicazioni, che verrà consultato dal sistema Android per decidere a chi consegnare l' intent implicito  Gli intent espliciti vengono sempre consegnati a destinazione (non vengono consultati i filtri dell'applicazione)  Ogni componente (activities, services e broadcast receivers) può avere uno o più filtri 20
  • 21. INTENT - INTENT FILTERS(2)  Esempio di filtro nel AndroidManifest.xml: <intent-filter> <action android:name="android.intent.action.MAIN"/> <category android:name="android.intent.category.LAUNCHER"/> </intent-filter> <intent-filter> <action android:name="com.example.project.SHOW_CURRENT"/> <action android:name="com.example.project.SHOW_RECENT"/> <data android:mimeType="video/mpeg" android:scheme="http“ …/> </intent-filter> NB. Se un intent ha ad esempio i campi Data ed Action non vuoti, può essere consegnato all'applicazione solo se entrambi i campi possono essere filtrati 21
  • 22. ACTIVITY E INTENT – ESEMPIO 1 Esempio di intent esplicito e chiamata startActivity() public class ExampleActivity extends Activity { public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Button testButton1 = (Button)findViewById(R.id.testButton1); testButton1.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(this, AnotherActivity.class); startActivity(intent); } }); } } 22
  • 23. ACTIVITY E INTENT – ESEMPIO 2 Esempio di intent implicito e chiamata startActivityForResult() private void pickContact() { // Crea un intent per cercare un contatto, come definito in ContactContract Intent intent = new Intent(Intent.ACTION_PICK, ContactsContract.AUTHORITY_URI); startActivityForResult(intent, PICK_CONTACT_REQUEST); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { // Se la richiesta è andata bene (OK) e la richiesta è PICK_CONTACT_REQUEST if (resultCode == Activity.RESULT_OK && requestCode == PICK_CONTACT_REQUEST) { // Fa una query sul content provider dei contatti con il contatto selezionato Cursor cursor = getContentResolver().query(data.getData(), new String[] {Contacts.DISPLAY_NAME}, null, null, null); if (cursor.moveToFirst()) { // True se il cursore è non vuoto int columnIndex = cursor.getColumnIndex(Contacts.DISPLAY_NAME); String name = cursor.getString(columnIndex); // Fa qualcos’altro... } } } 23