Intents

Qué es un intent?

Intents and filters

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

MainActivity.java

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