Activity intent

2,033 views

Published on

Descrizione degli intent e delle activity in android

Published in: Technology
1 Comment
2 Likes
Statistics
Notes
  • it's very interesting
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
No Downloads
Views
Total views
2,033
On SlideShare
0
From Embeds
0
Number of Embeds
90
Actions
Shares
0
Downloads
0
Comments
1
Likes
2
Embeds 0
No embeds

No notes for slide

Activity intent

  1. 1. ANDROID: ACTIVITY E INTENTSimone Compagnone matr. 709649Marco Covelli matr. 702957Paola Percuoco matr. 742072
  2. 2. ACTIVITY Unactivity può essere vista come la rappresentazione di una schermata 2 es. Android Dropbox
  3. 3. ACTIVITY – INTERFACCIA GRAFICA Linterfaccia 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. 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. 5. ACTIVITY E BACK STACK - 2 5
  6. 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. 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 unaltra (è 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
  8. 8. ACTIVITY - LIFECICLE 8
  9. 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
  10. 10. ACTIVITY – SALVATAGGIO DI STATO 10
  11. 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. 12. INTENT Un intent è un messaggio che viene scambiato tra tre delle componenti base di unapplicazione 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. 13. INTENT – CONSEGNA Activity:  startActivity()  startActivityForResult() Service:  startService()  bindService() BroadcastReceiver:  sendBroadcast()  sendOrderedBroadcast()  sendStickyBroadcast() 13
  14. 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 lintent) Principalmente, può contenere i seguenti dati:  action  category  component name  data  extras  flags 14
  15. 15. INTENT – ACTION Contiene una stringa che identifica unazione 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. 16. INTENT – CATEGORY Sono stringhe che contengono informazioni aggiuntive sul tipo di componente che deve gestire lintent Il sistema Android utilizza queste informazioni per decidere a quale componente recapitare il messaggio Metodi: addCategory() , removeCategory() e getCategories() 16
  17. 17. INTENT – DATA In questo campo è possibile associare allintent alcuni dati utili allapplicazione che risponderà al messaggio Allinterno del campo data dellintent 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. 18. INTENT – COMPONENT NAME Riguarda il nome del componente che dovrà gestire lintent Questo campo è un oggetto ComponentName ed è composto da:  nome completo della classe del componente di destinazione  nome del pacchetto impostato nel file manifesto dellapplicazione in cui risiede il componente Metodi: setComponent() , getComponent() , setClassName() Anche questo campo è opzionale. Se è impostato, loggetto intent verrà consegnato ad unistanza della classe designata. Se non è impostato, Android utilizza altre informazioni nelloggetto Intent per individuare una applicazione target 18
  19. 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 lazione da eseguire  Intent implicito: si specifica solo lazione da eseguire senza esplicitare il nome del componente di destinazione Per gli intent impliciti, il sistema Android sceglie lapplicazione a cui destinare il messaggio a seconda dei filtri impostati nei manifest file delle singole applicazioni. 19
  20. 20. INTENT - INTENT FILTERS I filtri vengono usati per identificare quali intent lapplicazione è 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 dellapplicazione) Ogni componente (activities, services e broadcast receivers) può avere uno o più filtri 20
  21. 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 allapplicazione solo se entrambi i campi possono essere filtrati 21
  22. 22. ACTIVITY E INTENT – ESEMPIO 1Esempio 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. 23. ACTIVITY E INTENT – ESEMPIO 2Esempio 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);}@Overrideprotected 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

×