Filtro de intención en Android con aplicación de demostración

La intención es un objeto de mensajería que indica qué tipo de acción se debe realizar. El uso más significativo de la intención es el lanzamiento de la actividad. La intención facilita la comunicación entre los componentes.

Nota: los componentes de la aplicación son los componentes básicos de la aplicación.

Caso de uso fundamental de Intents

Actividad inicial

Una actividad representa la pantalla única en una aplicación. Sin pasar por la instancia de intención, podemos iniciar una actividad.

Ejemplo:

Kotlin

var intent = Intent(this, SecondActivity:: class.java)
startIntent(intent)

Puede agregar información adicional usando putExtra().

Inicio de un servicio

Un Servicio es un componente que realiza operaciones en segundo plano sin una interfaz de usuario, lo que también se denomina proceso en segundo plano.

Entrega de una transmisión

Una transmisión es un mensaje que cualquier aplicación puede recibir. En Android, el sistema ofrece varios eventos del sistema de transmisión, como que el dispositivo comience a cargarse, desactive o active el modo avión, etc.

Tipo de intención

Hay dos tipos de intenciones

  1. Intención explícita: la intención explícita puede realizar la acción específica de la aplicación que establece el código, como cambiar la actividad. En la intención explícita, el usuario sabe todas las cosas, como después de hacer clic en un botón, qué actividad comenzará y las intenciones explícitas se utilizan para la comunicación dentro de la aplicación.
  2. Intención implícita: las intenciones implícitas no nombran un componente específico como la intención explícita, sino que declaran una acción general a realizar, lo que permite que se maneje un componente de otra aplicación.

Por ejemplo: cuando toca el botón Compartir en cualquier aplicación, puede ver Gmail, Bluetooth y otras opciones de aplicaciones para compartir. 

Filtro de intención

  • La intención implícita utiliza el filtro de intención para atender la solicitud del usuario.
  • El filtro de intentos especifica los tipos de intentos a los que puede responder una actividad, un servicio o un receptor de difusión.
  • Los filtros de intención se declaran en el archivo de manifiesto de Android.
  • El filtro de intención debe contener <acción>

Ejemplo:

XML

<intent-filter
  android:icon="drawable resource"
  android:label="string resource"
  android:priority="integer" >
   . . .
</intent-filter>

La mayoría de los filtros de intención se describen por su 

  1. <acción>, 
  2. <categoría> y
  3. <datos> .

1. <acción>

Sintaxis:

XML

<action android:name="string" />

Agrega una acción a un filtro de intenciones. Un elemento <intent-filter> debe contener uno o más elementos <action>. Si no hay elementos <action> en un filtro de intención, el filtro no acepta ningún objeto de intención.

Ejemplos de acción común:

  • ACTION_VIEW: use esta acción con intención con startActivity() cuando tenga información que la actividad puede mostrar al usuario, como mostrar una imagen en una aplicación de galería o una dirección para ver en una aplicación de mapa
  • ACTION_SEND: debe usar esto con la intención de startActivity() cuando tenga algunos datos que el usuario puede compartir a través de otra aplicación, como una aplicación de correo electrónico o una aplicación para compartir en redes sociales.

2. <categoría>

Sintaxis:

XML

<category android:name="string" />

Agrega un nombre de categoría a un filtro de intenciones. Una string que contiene información adicional sobre el tipo de componente que debe controlar la intención.

Ejemplo de categorías comunes:

  • CATEGORY_BROWSABLE: la actividad de destino permite que un navegador web la inicie para mostrar los datos a los que hace referencia un enlace.

3. <datos>

Sintaxis:

XML

<data android:scheme="string"
      android:host="string"
      android:port="string"
      android:path="string"
      android:pathPattern="string"
      android:pathPrefix="string"
      android:mimeType="string" />

Agrega una especificación de datos a un filtro de intenciones. La especificación puede ser solo un tipo de datos, solo un URI o un tipo de datos y un URI.

Nota: El identificador uniforme de recursos (URI) es una string de caracteres que se utiliza para identificar un recurso. Un URI identifica un recurso por ubicación, por nombre o por ambos.

Implementación del filtro de intención con una aplicación de demostración

Paso 1: Crear un nuevo proyecto

Para crear un nuevo proyecto en Android Studio, consulte Cómo crear/iniciar un nuevo proyecto en Android Studio . Tenga en cuenta que seleccione Kotlin como lenguaje de programación.

Paso 2: Agregar dependencias al archivo build.gradle(Module:app)

Agregue la siguiente dependencia al archivo build.gradle(Module:app) . Agregamos estas dos dependencias para evitar usar findViewById() en nuestro archivo MainActivity.kt . Pruebe esto, de lo contrario, use la forma normal como findViewById() .

aplicar complemento: ‘kotlin-android’

aplicar complemento: ‘kotlin-android-extensions’

Paso 3: trabajar con el archivo activity_main.xml

Vaya a la aplicación > res > diseño > actividad_principal.xml y agregue el siguiente código a ese archivo. A continuación se muestra el código para el archivo  activity_main.xml .

XML

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
    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:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">
  
    <Button
        android:id="@+id/sendButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="SEND"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.476"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintVertical_bias="0.153" />
  
    <Button
        android:id="@+id/buttonView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="View"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.498"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="0.826" />
      
</androidx.constraintlayout.widget.ConstraintLayout>

Paso 4: trabajar con el archivo AndroidManifest.xml

El siguiente es el código para el archivo AndroidManifest.xml .

XML

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.menuapplication">
  
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/Theme.MenuApplication">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
  
            <!--SEND INTENT FILTER-->
            <intent-filter>
                <action android:name="android.intent.action.SEND"/>
                <category android:name="android.intent.category.DEFAULT"/>
                <data android:mimeType="text/plain"/>
            </intent-filter>
  
            <!--VIEW INTENT FILTER-->
            <intent-filter>
                <action android:name="android.intent.action.VIEW"/>
                <category android:name="android.intent.category.DEFAULT"/>
                <category android:name="android.intent.category.BROWSABLE"/>
                <data android:scheme="http"/>
            </intent-filter>
  
        </activity>
  
    </application>
  
</manifest>

Paso 5: trabajar con el archivo MainActivity.kt

Vaya al archivo MainActivity.kt  y consulte el siguiente código. A continuación se muestra el código del archivo MainActivity.kt  . Se agregan comentarios dentro del código para comprender el código con más detalle.

Kotlin

package com.example.intentfilter
  
import android.content.Intent
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import kotlinx.android.synthetic.main.activity_main.*
  
class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
  
        // send button on click listener
        sendButton.setOnClickListener {
            var intent = Intent(Intent.ACTION_SEND) // intent
            intent.type = "text/plain"
            intent.putExtra(Intent.EXTRA_EMAIL, "niranjantest@gmail.com")
            intent.putExtra(Intent.EXTRA_SUBJECT, "This is a dummy message")
            intent.putExtra(Intent.EXTRA_TEXT, "Dummy test message")
            startActivity(intent)
        }
  
        // View on click listener
        buttonView.setOnClickListener {
            var intent = Intent(Intent.ACTION_VIEW)
            startActivity(intent)
        }
    }
}

Salida con explicación:

Haga clic en el botón Enviar, verá una pantalla como esta,

Ahora elija la aplicación Gmail,

Ahora ve a nuestra aplicación y haz clic en el botón Ver,

nuestra aplicación ficticia. Puede elegir cualquier aplicación de estas opciones porque estamos usando un filtro de intención de vista.

Publicación traducida automáticamente

Artículo escrito por niranjannaik y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *