Android Studio - comunicazione e coordinamento tra Activity

Android Studio - comunicazione e coordinamento tra Activity

Android Studio – Comunicazione e Coordinamento tra Activity

Le Activity iniziano a comunicare tra Loro, prendono il Loro vita

Le Activity possono comunicare con altre APP

Coordinamento: quando un’Activity ne avvia un’altra, l’altra Activity avviata avrà il Suo ciclo di vita. Activity1 → AVVIA → Activity2

Non possiamo determinare lo Stato o eventualmente capire in che Stato siamo.

Il Ciclo di Vita dell’Activity, sicuramente è sempre Coerente.

Partenza Activity

Si crea un oggetto INTENT e poi si passa la nuova Activity che vogliamo far partire

Intent passoiDati = new Intent(MainActivity.this, MainActivity2.class);

startActivity(passoiDati);

Per inviare una mail?

// Bottone per inviare mail
Button button3;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

// Bottone per azionare l'invio di una mail
button3 = (Button) findViewById(R.id.button3);

button3.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent invioMail = new Intent(Intent.ACTION_SEND);
invioMail.putExtra(Intent.EXTRA_EMAIL, "");
startActivity(invioMail);
}
});

potrebbe esserci la possibilità di chiedere i Permessi

button3.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent invioMail = new Intent(Intent.ACTION_SEND);
// Intent è capace di rispondere a quest'azione --> Intent.ACTION_SEND
invioMail.putExtra(Intent.EXTRA_EMAIL, "");
startActivity(invioMail);
}
});

button3.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent invioMail = new Intent(Intent.ACTION_SEND);
// Intent è capace di rispondere a quest'azione --> Intent.ACTION_SEND
invioMail.putExtra(Intent.EXTRA_EMAIL, "");
// con putExtra, gli do un input dei Dati
startActivity(invioMail);
}
});

Il buon codice:

button3.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent invioMail = new Intent(Intent.ACTION_SEND);
// Intent è capace di rispondere a quest'azione --> Intent.ACTION_SEND
invioMail.putExtra(Intent.EXTRA_EMAIL, "");
// all'interno di Value, metto il contenuto della Mail che voglio inviare
// con putExtra, gli do un input dei Dati
startActivity(invioMail);
}
});

l’Activity è responsabile per il risultato, restituito all’Activity chiamante

Activity.SetResult

serve per fare dei controlli. Fa dei controllo sullo stato dell’Activity per capire se può rimuoverla o farci qualcosa.

Gestione Intent

Intent, intenzione di far qualcosa. E’ una funzionalità di O.S. Android

Intent: oggetto (ha una Classe, una Libreria) che scambia messaggi tra Componenti di App

E’ usato per:

far partire un’Activity

far partire un Service

mandare un messaggio in Broadcast

L’intent è il mezzo con cui programmare queste comunicazioni.

- Fa partire un’Activity, quindi ne crea una nuova (passandogli il Bundle, passandogli dei parametri)

- può far partire un Service (un caso particolare di Activity)

Per far funzionare le Activity, si usano questi metodi:

startActivity()

startActivityForResult()

onActivityResult()

O.S. Android comunica tramite scambio di messaggi, principalmente.

O.S. Android, permette di inviare messaggi, di inviare richieste, tramite App che girano nel sistema.

E’ bene capire il funzionamento delle Intent

Service o meglio i Services sono Activity, ma sono indipendenti. Servono per far partire delle operazioni, dei programmi in modo trasparente.

E’ indipende dal Ciclo di Vita dell’Activity

Il Servizio (Service) è bene che comunichi con O.S. Android

Intent: implicito ed esplicito

Intent Esplicito: si specificano le componenti. Noi conosciamo le Componenti. Sappiamo il nome della Classe da istanziare o la Componente da far partire

Intent Implicito: non chiama una Componente specifica, ma dichiarano un’azione. Io devo fare un’azione, mi dici come posso far quest’azione.

Ho un messaggio da far partire verso l’O.S. Android, tu O.S. Android mi dici come fare?

Ho il messaggio, trovami tu la soluzione.

E’ possibile pensare a Livello di Application Framework (Le Varie Classi del Sistema Operativo Android che ci permettono di far funzionare da O.S. Android tutte le Applicazioni) o a livello di Applications (quindi, APP già create da Sviluppatori)

Devo far un’azione, tu Sistema Operativo, mi suggerisci, hai una componente o una Classe che mi permette di far quest’azione (Intent Implicito).

So che ci sono App nell’O.S. Android che sanno fare quest’azione e allora invoco, tramite Intent Implicito, l’azione. Se avessi del contenuto da condividere, si crea l’Intent con l’azione ACTION_SEND che specifica il contenuto da condividere.

Per assicurarsi che l’Intent venga processato si usa resolveActivity()

button3.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent invioMail = new Intent(Intent.ACTION_SEND);
// Intent è capace di rispondere a quest'azione --> Intent.ACTION_SEND
invioMail.putExtra(Intent.EXTRA_EMAIL, "");
// all'interno di Value, metto il contenuto della Mail che voglio inviare
// con putExtra, gli do un input dei Dati
if (invioMail.resolveActivity(getPackageManager()) != null)
{
startActivity(invioMail);
}
startActivity(invioMail);
}
});

Come si gestisce un Intent Implici? Nell’AndroidManifest.XML si dichiarano degli Intent Impliciti.

Ogni Intent dice nell’intent Filter, quello che sa fare, fondamentalmente.

Ciascun Intent, specifica il tipo di Intent che l’app può processare del tipo

<action>

<data>

<category>

<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>

Intent Filter è dichiarato nell’AndroidManifest.XML, nell’Activity:

<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>

Intent Filter contiene:

<action>

<data>

il tipo di Dato, ad esempio URI

<category>

Gestione Intent Impliciti

Activity → Lancia → startActivity( INTENT)

O.S Android ha tutti gli AndroidManifest.XML delle App installate. Ricordiamoci che nell’Application Framework chi tiene traccia delle App installate sul dispositivo è Package Manager.

O.S Android, assume il compito di trovare l’Activity appropriata per gestire l’Intent Specifico.

C’è un confronto da parte dell’O.S. Android per capire dall’AndroidManifest.XML e capire quali rispondono alla richiesta.

Quali sono quindi gli AndroidManifest.XML che rispondono alla richiesta degli Intent, mandato in modo esplicito e il Sistema Operativo Android avvia l’Intent di risposta.

Tutto questo, l’Intent Implicito da mandare in onCreate(), L’activity che deve rispondere.

O.S. Android si prende la briga di capire chi deve far qualcosa.

ActivityA → startActivity() → Intent → Android System → Intent → onCreate()

O.S. Android ha il compito di capire per quanto riguarda gli Intent Impliciti, di capire chi deve e chi deve rispondere a cosa. Quale Classe deve rispondere e a cosa?

l’AndroidManifest.XML è importante perché descrive cosa fa l’APP e cosa richiede di fare. O.S. Android ha la visione globale di ciò che gira al suo interno e può rispondere agli intent impliciti.

Rispondere agli Intent di O.S. Android, facendo il confronto e quindi:

O.S Android che si prende il compito di trovare un’Activity appropriata per gestire l’Intent implicito (ricordando che é quello scambio di messaggi, in cui: non conosciamo la Classe o la Componente, ma conosciamo il messaggio). Essendo l’O.S. Android che si prende il compito di trovare un’Activity appropriata, quest’operazione lo fa tramite il confronto con gli intent filter dell’AndroidManifest.xml

<activity android:name=".MainActivity2">

</activity>

<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>

Essendo l’O.S. Android che si prende il compito di trovare un’Activity appropriata, quest’operazione lo fa tramite il confronto con gli intent filter dell’AndroidManifest.xml

Rispondere a un Intent attraverso il confronto con gli intent filter, si chiama Intent Resolution

L’O.S. Android cerca la migliore Activity in base al Tag <Action>, <Category>, <Filter>

Azione accettate? <Action>

Categorie accettate? <Category>

Dati Accettati? <Data>

About Post Author

pasquale.clarizio

error: Content is protected !!
Advertisment ad adsense adlogger