Intents
Qué es un intent?
Los intents: tipos y ejemplos (punto 7 de la unidad 2)
Intents en developer.android.com
Verificar que existe al menos una actividad para lanzar el intent
Intent sendIntent = new Intent(Intent.ACTION_SEND); ... // Always use string resources for UI text. // This says something like "Share this photo with" String title = getResources().getString(R.string.chooser_title); // Create intent to show the chooser dialog Intent chooser = Intent.createChooser(sendIntent, title); // Verify the original intent will resolve to at least one activity if (sendIntent.resolveActivity(getPackageManager()) != null) { startActivity(chooser); }
Ejemplo de intent implícito
public void openWebPage(String url) { Uri webpage = Uri.parse(url); Intent intent = new Intent(Intent.ACTION_VIEW, webpage); if (intent.resolveActivity(getPackageManager()) != null) { startActivity(intent); } else { Toast.makeText(this, "Error al lanzar el intent", Toast.LENGTH_SHORT).show(); } }
Ejemplo de intent explícito
intent = new Intent(this, SecondActivity.class); Bundle extras = new Bundle(); extras.putString("usuario", "Carmelo Cotón); extras.putInt("edad", 27); intent.putExtras(extras); startActivity(intent);
Ejemplo: Comunicación de actividades mediante intents
package com.example.comunicacionactividades; import androidx.appcompat.app.AppCompatActivity; import android.content.Intent; import android.net.Uri; import android.os.Bundle; import android.view.View; import android.widget.Toast; import com.example.comunicacionactividades.databinding.ActivityMainBinding; public class MainActivity extends AppCompatActivity implements View.OnClickListener { private ActivityMainBinding binding; int code = 1; public static final String RESULTADO = "resultado"; Intent intent; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); binding = ActivityMainBinding.inflate(getLayoutInflater()); View view = binding.getRoot(); setContentView(view); binding.button1.setOnClickListener(this); binding.button2.setOnClickListener(this); binding.button3.setOnClickListener(this); binding.button4.setOnClickListener(this); binding.button5.setOnClickListener(this); } @Override public void onClick(View view) { if (view == binding.button1) { //ACTION_VIEW. Abrir el navegador con una URL indicada como dato String enlace = "https://iesalandalus.org"; intent = new Intent(Intent.ACTION_VIEW, Uri.parse(enlace)); if (intent.resolveActivity(getPackageManager()) != null) { startActivity(intent); } else { Toast.makeText(this, "Error al lanzar el intent", Toast.LENGTH_SHORT).show(); } } if (view == binding.button2) { //ACTION_VIEW. Muestra dirección en mapa indicada como dato // (El emulador o AVD en el que se pruebe debe incluir las API de Google) String dir = "Calle+Larios+Malaga"; intent = new Intent(Intent.ACTION_VIEW, Uri.parse("geo:0,0?q=" + dir)); if (intent.resolveActivity(getPackageManager()) != null) { startActivity(intent); } else { Toast.makeText(this, "Error al lanzar el intent", Toast.LENGTH_SHORT).show(); } } if (view == binding.button3) { // ACTION_DIAL.Marca el número de teléfono indicado como dato. String tlf = "951297929"; intent = new Intent(Intent.ACTION_DIAL, Uri.parse("tel:" + tlf)); if (intent.resolveActivity(getPackageManager()) != null) { startActivity(intent); } else { Toast.makeText(this, "Error al lanzar el intent", Toast.LENGTH_SHORT).show(); } } if (view == binding.button4) { intent = new Intent(this, SecondActivity.class); Bundle extras = new Bundle(); extras.putString("usuario", binding.editText.getText().toString()); extras.putInt("edad", 27); intent.putExtras(extras); startActivity(intent); } if (view == binding.button5) { intent = new Intent(this, SecondActivity.class); Bundle extras = new Bundle(); extras.putString("usuario", binding.editText.getText().toString()); extras.putInt("edad", 27); intent.putExtras(extras); startActivityForResult(intent, code); } } @Override protected void onActivityResult (int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == code && resultCode == RESULT_OK) { String res = data.getExtras().getString(RESULTADO); binding.editText.setText(res); } } }
SecondActivity.java
package com.example.comunicacionactividades; import androidx.appcompat.app.AppCompatActivity; import android.content.Intent; import android.os.Bundle; import android.view.View; import com.example.comunicacionactividades.databinding.ActivityMainBinding; import com.example.comunicacionactividades.databinding.ActivitySecondBinding; public class SecondActivity extends AppCompatActivity implements View.OnClickListener { private ActivitySecondBinding binding; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); binding = ActivitySecondBinding.inflate(getLayoutInflater()); View view = binding.getRoot(); setContentView(view); binding.button.setOnClickListener(this); Bundle extras = getIntent().getExtras(); //recupera el valor asociado a “usuario” String str = extras.getString("usuario"); //recupera el valor asociado a “edad” int edad = extras.getInt("edad"); binding.textView.setText(str + ", " + edad); } @Override public void onClick(View view) { if (view == binding.button) { Intent intent = new Intent(); intent.putExtra(MainActivity.RESULTADO, binding.editText.getText().toString()); setResult(RESULT_OK, intent); finish(); } } }
Código de Comunicacion de actividades
Ejercicio 2 de la tarea online
Más información:
Comunicar actividades a través de Intents
Deja una respuesta
Lo siento, debes estar conectado para publicar un comentario.