Gli Intent sono un potente strumento che permette di far comunicare le diverse parti di un’app o persino app diverse tra loro. Pensa a un Intent come un messaggero: il suo compito è portare un messaggio o un’azione da un punto all’altro della tua app.
Esistono due tipi principali di Intent:
- Intent espliciti: vengono utilizzati per passare da una
Activity
a un’altra all’interno della stessa app. Ad esempio, immagina di avere un pulsante per aprire una schermata dei dettagli. Ecco come lo implementi:
Intent intent = new Intent(this, DetailActivity.class);
startActivity(intent);
- Intent impliciti: questi, invece, permettono di eseguire azioni fuori dalla tua app, come aprire una pagina web, condividere contenuti o scattare una foto. Per esempio:
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse("https://www.google.com"));
startActivity(intent);
Exstras
Ma come passare i dati tra una Activity e l’altra? Facile! Con i cosiddetti Extras.
Ecco un esempio:
Intent intent = new Intent(this, DetailActivity.class);
intent.putExtra("nome", "Samuele");
startActivity(intent);
E nella DetailActivity, recuperi il dato così:
String nome = getIntent().getStringExtra("nome");
Conclusione
Gli Intent sono fondamentali per creare app dinamiche e interattive. Nel tuo progetto puoi utilizzarli anche per avviare un servizio, trasmettere broadcast o persino integrare funzionalità di altre app.
Se ti interessa saperne di più, fammelo sapere nei commenti.
Video su YouTube
Codice completo
- activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:gravity="center"
tools:context=".MainActivity">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Vai all'activity 2"
android:id="@+id/avviaActivity"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Vai al mio Blog"
android:id="@+id/blog"/>
</LinearLayout>
- MainActivity.java
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import androidx.activity.EdgeToEdge;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.graphics.Insets;
import androidx.core.view.ViewCompat;
import androidx.core.view.WindowInsetsCompat;
public class MainActivity extends AppCompatActivity {
Button avviaActivity;
TextView blog;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
EdgeToEdge.enable(this);
setContentView(R.layout.activity_main);
ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main), (v, insets) -> {
Insets systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars());
v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom);
return insets;
});
Log.e("STATO","OnCreate Stato");
avviaActivity = findViewById(R.id.avviaActivity);
blog = findViewById(R.id.blog);
avviaActivity.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent avviaActivity = new Intent(MainActivity.this, MainActivity2.class);
avviaActivity.putExtra("nome","Samuele");
startActivity(avviaActivity);
}
});
blog.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent avviaBlog = new Intent(Intent.ACTION_VIEW);
avviaBlog.setData(Uri.parse("https://samuelefilincieri.com/"));
startActivity(avviaBlog);
}
});
}
/*
@Override
protected void onStart() {
super.onStart();
Log.e("STATO","onStart Stato");
}
@Override
protected void onResume() {
super.onResume();
Log.e("STATO","onResume Stato");
}
@Override
protected void onPause() {
super.onPause();
Log.e("STATO","onPause Stato");
}
@Override
protected void onStop() {
super.onStop();
Log.e("STATO","onStop Stato");
}
@Override
protected void onDestroy() {
super.onDestroy();
Log.e("STATO","onDestroy Stato");
}
@Override
protected void onRestart() {
super.onRestart();
Log.e("STATO","onRestart Stato");
}
*/
}
- activity_main2.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:gravity="center"
tools:context=".MainActivity2">
<TextView
android:id="@+id/benvenuto"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Benvenuto nell'activity 2"
android:textSize="20sp"/>
</LinearLayout>
- MainActivity2.java
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.widget.TextView;
import androidx.activity.EdgeToEdge;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.graphics.Insets;
import androidx.core.view.ViewCompat;
import androidx.core.view.WindowInsetsCompat;
public class MainActivity2 extends AppCompatActivity {
TextView benvenuto;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
EdgeToEdge.enable(this);
setContentView(R.layout.activity_main2);
ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main), (v, insets) -> {
Insets systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars());
v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom);
return insets;
});
benvenuto = findViewById(R.id.benvenuto);
Intent intent = getIntent();
String nome = intent.getStringExtra("nome");
benvenuto.setText("Benvenuto " + nome);
}
}