Gli intenti sono un argomento fondamentale per gli sviluppatori Android. È impossibile creare applicazioni Android senza entrare in contatto con intent. In questo tutorial, ti insegnerò le intenzioni dalla A alla Z..
In una partita di calcio, i compagni di squadra passano la palla intorno al campo con l'obiettivo di mandarlo nell'obiettivo del loro avversario. La palla viene passata dal portiere della squadra ai difensori. Successivamente, trova la sua strada per i centrocampisti, e se le cose funzionano come previsto, uno degli attaccanti lo manda nella rete dell'avversario. Ciò presuppone che il portiere dell'altra parte non sia stato in grado di tenerlo lontano!
In Android, la possibilità di inviare messaggi in giro è resa possibile da Intento
oggetto. Con l'aiuto di intenti, i componenti Android possono richiedere funzionalità da altri componenti Android. Quando apri l'app Instagram sul tuo telefono e la usi per scattare una foto, hai appena fatto uso di un intento. Gli intenti aiutano anche a comunicare tra parti di un'app; il movimento da uno schermo (attività) a un altro è reso possibile da intenti.
Guardalo in questo modo: tutti i componenti (applicazioni e schermate) del dispositivo Android sono isolati. L'unico modo in cui comunicano tra loro è attraverso intenti.
Come accennato in precedenza, è possibile utilizzare intents per avviare diversi componenti: attività, servizi e ricevitori broadcast.
Per iniziare un'attività, farai uso del metodo startActivity
(intento)
.
Ecco uno snippet di codice che dimostra come avviare un'altra attività da un intent.
Intent numbersIntent = new Intent (MainActivity.this, NumbersActivity.class); startActivity (numbersIntent);
In primo luogo, creiamo un nuovo Intento
oggetto e passa il NumbersActivity
classe. Quindi iniziamo una nuova attività usando quell'intenzione.
Android supporta due tipi di intenti: espliciti e impliciti. Quando un'applicazione definisce il suo componente di destinazione in un intento, che è un intento esplicito. Quando l'applicazione non nomina un componente di destinazione, significa che è un intento implicito.
Il frammento di codice del codice sopra riportato è un esempio di intento esplicito. Dai un'occhiata di nuovo.
Intent numbersIntent = new Intent (MainActivity.this, NumbersActivity.class); startActivity (numbersIntent);
Qui, NumbersActivity
è il componente target dal nostro Attività principale
. Ciò significa che NumbersActivity
è il componente definito che verrà chiamato dal sistema Android. È importante notare (come nell'esempio sopra), che gli intenti espliciti sono tipicamente usati all'interno di un'applicazione, perché ciò fornisce allo sviluppatore il maggior controllo su quale classe verrà lanciata.
Ecco un intento implicito:
Intento intento = nuovo intento (Intent.ACTION_VIEW, Uri.parse ("http://www.tutsplus.com")); startActivity (intento);
Se si dispone del codice sopra riportato nella base di codice, l'applicazione può avviare un componente del browser per un determinato URL tramite un intento. Ma come fa il sistema Android a identificare i componenti che possono reagire a un determinato intento?
Un componente può essere registrato tramite un filtro intento per un'azione specifica. I filtri Intent possono essere registrati staticamente nei componenti AndroidManifest.xml. Ecco un esempio che registra un componente come visualizzatore Web:
Scriviamo un codice per vedere come funziona. In questa sezione creerai una piccola app per provare entrambi gli stili di intenti. L'app avrà un piccolo modulo per inserire un nome e un cognome. Quando il Sottoscrivi viene cliccato il pulsante, entrambi i valori immessi verranno passati a un'altra attività. Ci sarà anche un pulsante per avviare un browser di tua scelta. Il browser scelto aprirà http://code.tutsplus.com.
Apri Android Studio e genera il tuo Attività principale
. È possibile impostare il nome del pacchetto su com.tutsplus.code.android.droidintent.
Il tuo Attività principale
inizierà con alcune importazioni e la dichiarazione di classe:
pacchetto com.tutsplus.code.android.droidintent; import android.content.Intent; import android.net.Uri; import android.support.v7.app.AppCompatActivity; importare android.os.Bundle; importa android.view.View; importa android.widget.Button; importare android.widget.EditText; la classe pubblica MainActivity estende AppCompatActivity
Quindi ignorerai il onCreate ()
metodo per inizializzare l'attività con qualsiasi stato salvato e il layout dell'attività (lo creeremo in seguito).
@Override protected void onCreate (Bundle savedInstanceState) super.onCreate (savedInstanceState); setContentView (R.layout.activity_main); // i gestori di pulsante vanno qui
Successivamente otterrai i riferimenti a ciascuno dei pulsanti definiti nel layout e allega un click listener a ciascuno di essi.
final Button submitButton = (Button) findViewById (R.id.submit_button); submitButton.setOnClickListener (new View.OnClickListener () @Override public void onClick (View v) EditText firstName = (EditText) findViewById (R.id.first_name_text); EditText lastName = (EditText) findViewById (R.id.last_name_text) ; String firstNameString = firstName.getText (). ToString (); String lastNameString = lastName.getText (). ToString (); Intento submitIntent = new Intent (MainActivity.this, ShowActivity.class); submitIntent.putExtra ("firstNameString", firstNameString); submitIntent.putExtra ("lastNameString", lastNameString); startActivity (submitIntent););
Per il Sottoscrivi pulsante, si imposta un OnClickListener
per attivare un'azione ogni volta che si fa clic sul pulsante. Quando si verifica un clic, prendiamo il nome e il cognome dalla vista e li inviamo alla prossima attività: ShowActivity
. Il componente di destinazione è definito esplicitamente nell'intento, facendo di questo un esempio di intento esplicito.
final Button browserButton = (Button) findViewById (R.id.browser_button); browserButton.setOnClickListener (new View.OnClickListener () @Override public void onClick (View v) Intent intent = new Intent (Intent.ACTION_VIEW, Uri.parse ("https://code.tutsplus.com")); startActivity (intento););
Per il pulsante del browser, il OnClickListener
creerà un nuovo intento per avviare qualsiasi applicazione che corrisponda al filtro: a ACTION_VIEW
che dovrebbe gestire un URL web. In altre parole, avvia un browser web. Se sul tuo dispositivo sono installate più applicazioni del browser, ti verrà chiesto di selezionarne una per eseguire l'azione di apertura del sito web. Questo è un esempio di intento implicito.
Attività principale
disposizioneIl layout per Attività principale
sarà molto semplice ai fini di questo tutorial.
Qui ne hai due TextView
e due Modifica il testo
indicando rispettivamente il nome e il cognome. C'è anche un pulsante per inviare i nomi e un altro per avviare il browser.
ShowActivity
Per completare la nostra app, è necessario creare un'attività per gestire l'intento esplicito sopra definito. Crea una nuova attività chiamata ShowActivity
. Questa è l'attività in cui verrà visualizzato il risultato dell'inserimento del nome e del cognome. Ecco come dovrebbe essere:
pacchetto com.tutsplus.code.android.droidintent; import android.support.v7.app.AppCompatActivity; importare android.os.Bundle; import android.widget.TextView; public class ShowActivity estende AppCompatActivity @Override protected void onCreate (Bundle savedInstanceState) super.onCreate (savedInstanceState); setContentView (R.layout.activity_show); Bundle extras = getIntent (). GetExtras (); String inputFirstName = extras.getString ("firstNameString"); String inputLastName = extras.getString ("lastNameString"); TextView showFirstName = (TextView) findViewById (R.id.show_first_name); TextView showLastName = (TextView) findViewById (R.id.show_last_name); showFirstName.setText (inputFirstName); showLastName.setText (inputLastName);
In questa attività, inizi a ottenere le stringhe passate da Attività principale
. È possibile ottenere un riferimento all'intento che ha attivato il lancio di questa attività con il getIntent ()
funzione. Quindi puoi accedere alle stringhe che gli sono state passate usando getExtras (). getString ()
. Infine, dopo aver ottenuto le istanze TextView dal layout, vengono visualizzati i valori ottenuti.
Il layout per questa attività è semplice:
Ora puoi creare la tua app e provarla sul tuo dispositivo Android!
Puoi anche fare uso di Bundles quando passi dati tramite intenti.
Il impacchettare
class consente di archiviare dati complessi e supporta tipi di dati come stringhe, caratteri, booleano, intero e così via. Ecco un esempio di come parte di MainActivity.java guarderei se hai usato impacchettare
.
// Creazione di Bundle object Bundle b = new Bundle (); // Memorizzazione dei dati in bundle b.putString ("firstNameString", firstNameString); b.putString ("lastNameString", lastNameString); // Creazione dell'oggetto Intent Inten submitIntent = new Intent (MainActivity.this, ShowActivity.class); // Memorizzazione dell'oggetto bundle nell'intento submitIntent.putExtra (b); startActivity (submitIntent);
In questo tutorial, abbiamo una breve introduzione all'uso di intenti per creare attività in Android. Abbiamo esaminato la differenza tra intenti espliciti e impliciti e abbiamo codificato un semplice esempio che utilizzava ciascun tipo.
Puoi leggere ulteriori informazioni su intents nella documentazione di Android. Capire come funzionano è molto importante. Man mano che costruisci più app, incontrerai molti diversi tipi di Intenti e modi per usarli.
E nel frattempo, dai uno sguardo ad alcuni dei nostri altri post sullo sviluppo di app per Android!