Explicit и Implicit Intent в Kotlin Android: намерение явное и неявное

Android Intent — это объект обмена сообщениями, используемый для запроса другого компонента приложения на выполнение действия. Intent облегчает пользователям взаимодействие с компонентом приложения несколькими способами, такими как запуск действия, запуск службы, доставка широковещательного приемника и т. д.

Интенты Android в основном используются, чтобы:

  • Запустить службу
  • Запустить активность
  • Показать веб-страницу
  • Показать список контактов
  • Сделать рассылку сообщений
  • Набрать номер телефона и т.д.

Типы интентов Android

В Kotlin Android есть два типа намерений — Explicit Intent и Implicit Intent:

Explicit Intent: это намерение удовлетворяет запрос в компоненте приложения. Он принимает полное имя класса действий или служб, которые мы хотим запустить.

 
intent = Intent(applicationContext, SecondActivity::class.java) 
startActivity(intent) 

Implicit Intent: это намерение не указывает имя компонента. Он вызывает компонент другого приложения для его обработки.

 
intent = Intent(Intent.ACTION_VIEW) 
intent.setData(Uri.parse("https://www.javatpoint.com/")) 
startActivity(intent) 
 
intent= Intent(Intent.ACTION_VIEW, Uri.parse("https://www.javatpoint.com/")) 
startActivity(intent) 

Пример Explicit Intent Kotlin Android

В этом примере мы вызовем класс активности из другого класса активности, используя явное намерение. Используя Intent, мы отправим данные из первого класса во второй класс активности. Второй класс активности получает эти данные и отображает их во всплывающем сообщении.

Intent Kotlin Android

Activity_main.xml

Добавьте следующий код в файл activity_main.xml.

<?xml version="1.0" encoding="utf-8"?>  
<android.support.constraint.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="example.javatpoint.com.kotlinexplicitintent.MainActivity">  
  
    <TextView  
        android:id="@+id/textView"  
        android:layout_width="wrap_content"  
        android:layout_height="wrap_content"  
        android:layout_marginBottom="8dp"  
        android:layout_marginTop="8dp"  
        android:text="First Activity"  
        android:textSize="18sp"  
        app:layout_constraintBottom_toBottomOf="parent"  
        app:layout_constraintHorizontal_bias="0.501"  
        app:layout_constraintLeft_toLeftOf="parent"  
        app:layout_constraintRight_toRightOf="parent"  
        app:layout_constraintTop_toTopOf="parent"  
        app:layout_constraintVertical_bias="0.172" />  
  
    <Button  
        android:id="@+id/button"  
        android:layout_width="wrap_content"  
        android:layout_height="wrap_content"  
        android:layout_marginBottom="8dp"  
        android:layout_marginEnd="8dp"  
        android:layout_marginStart="8dp"  
        android:layout_marginTop="8dp"  
        android:text="Click"  
        app:layout_constraintBottom_toBottomOf="parent"  
        app:layout_constraintEnd_toEndOf="parent"  
        app:layout_constraintStart_toStartOf="parent"  
        app:layout_constraintTop_toBottomOf="@+id/textView"  
        app:layout_constraintVertical_bias="0.77" />  
  
</android.support.constraint.ConstraintLayout>

MainActivity.kt

Добавьте следующий код в класс MainActivity.kt. В этом классе мы создаем экземпляр класса Intent и вызываем класс активности компонента SecondActivity.kt. Метод putExtra(key, value) класса Intent отправляет данные в класс SecondActivity.kt. Метод startActivity() запускает Intent.

 
package example.javatpoint.com.kotlinexplicitintent 
 
import android.content.Intent 
import android.support.v7.app.AppCompatActivity 
import android.os.Bundle 
import kotlinx.android.synthetic.main.activity_main.* 
 
class MainActivity : AppCompatActivity() { 
    val id:Int = 10 
    val language:String = "kotlin" 
    override fun onCreate(savedInstanceState: Bundle?) { 
        super.onCreate(savedInstanceState) 
        setContentView(R.layout.activity_main) 
 
        button.setOnClickListener() { 
            intent = Intent(this, SecondActivity::class.java) 
            intent.putExtra("id_value", id) 
            intent.putExtra("language_value", language) 
            startActivity(intent) 
        } 
    } 
} 

Создайте еще один класс действий с именем SecondActivity.

second_activity.xml

В файл second_activity.xml добавьте следующий код.

 <?xml version="1.0" encoding="utf-8"?>  
<android.support.constraint.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="example.javatpoint.com.kotlinexplicitintent.SecondActivity">  
  
    <TextView  
        android:id="@+id/textView2"  
        android:layout_width="wrap_content"  
        android:layout_height="wrap_content"  
        android:layout_marginBottom="8dp"  
        android:layout_marginEnd="8dp"  
        android:layout_marginStart="8dp"  
        android:layout_marginTop="8dp"  
        android:text="SecondActivity"  
        android:textSize="18sp"  
        app:layout_constraintBottom_toBottomOf="parent"  
        app:layout_constraintEnd_toEndOf="parent"  
        app:layout_constraintStart_toStartOf="parent"  
        app:layout_constraintTop_toTopOf="parent"  
        app:layout_constraintVertical_bias="0.107" />  
  
    <Button  
        android:id="@+id/button2"  
        android:layout_width="wrap_content"  
        android:layout_height="wrap_content"  
        android:layout_marginBottom="8dp"  
        android:layout_marginEnd="8dp"  
        android:layout_marginStart="8dp"  
        android:layout_marginTop="8dp"  
        android:text="back"  
        app:layout_constraintBottom_toBottomOf="parent"  
        app:layout_constraintEnd_toEndOf="parent"  
        app:layout_constraintStart_toStartOf="parent"  
        app:layout_constraintTop_toTopOf="parent"  
        app:layout_constraintVertical_bias="0.774" />  
</android.support.constraint.ConstraintLayout&gt
  

SecondActivity.kt

Добавьте следующий код в класс SecondActivity.kt. В этом классе мы получаем данные о намерениях, создавая экземпляр класса Bundle с помощью намерения.extras и отображая данные во всплывающем сообщении. Нажав на кнопку, мы вызываем Intent для вызова класса MainActivity.kt.

 
package example.javatpoint.com.kotlinexplicitintent 
 
import android.content.Intent 
import android.support.v7.app.AppCompatActivity 
import android.os.Bundle 
import android.widget.Toast 
import kotlinx.android.synthetic.main.activity_second.* 
 
class SecondActivity : AppCompatActivity() { 
 
    override fun onCreate(savedInstanceState: Bundle?) { 
        super.onCreate(savedInstanceState) 
        setContentView(R.layout.activity_second) 
 
        val bundle:Bundle = intent.extras 
        val id = bundle.get("id_value") 
        val language = bundle.get("language_value") 
        Toast.makeText(applicationContext,id.toString()+" "+language,Toast.LENGTH_LONG).show() 
        button2.setOnClickListener(){ 
            intent = Intent(this,MainActivity::class.java) 
            startActivity(intent) 
        } 
    } 
} 

Выход:

Явное намерение Kotlin AndroidВывод

Неявное намерение

Implicit Intent (Неявное намерение) Android в Котлин вызывает компонент другого приложения для обработки запроса. Оно не указывает конкретное имя компонента.

Например, если мы хотим поделиться данными с помощью Intent, он вызывает соответствующий компонент для выполнения запроса.

Неявное намерение Kotlin Android

 
intent = Intent(Intent.ACTION_VIEW) 
intent.setData(Uri.parse("https://www.javatpoint.com/")) 
startActivity(intent) 
 
intent= Intent(Intent.ACTION_VIEW, Uri.parse("https://www.javatpoint.com/")) 
startActivity(intent) 

Пример неявного намерения Kotlin Android, вызывающего URL-адрес

В этом примере мы будем вызывать URL-адрес в Котлин, используя неявное намерение, нажав кнопку.

Activity_main.xml

Добавьте следующий код в файл activity_main.xml. В этом действии мы используем кнопку для вызова Intent.

 <?xml version="1.0" encoding="utf-8"?>  
<android.support.constraint.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="example.javatpoint.com.kotlinimplicitintent.MainActivity">  
  
    <TextView  
        android:id="@+id/textView"  
        android:layout_width="wrap_content"  
        android:layout_height="wrap_content"  
        android:layout_marginBottom="8dp"  
        android:layout_marginTop="8dp"  
        android:text="Your First Activity"  
        android:textSize="18sp"  
        app:layout_constraintBottom_toBottomOf="parent"  
        app:layout_constraintHorizontal_bias="0.501"  
        app:layout_constraintLeft_toLeftOf="parent"  
        app:layout_constraintRight_toRightOf="parent"  
        app:layout_constraintTop_toTopOf="parent"  
        app:layout_constraintVertical_bias="0.172" />  
  
    <Button  
        android:id="@+id/button"  
        android:layout_width="wrap_content"  
        android:layout_height="wrap_content"  
        android:layout_marginBottom="8dp"  
        android:layout_marginEnd="8dp"  
        android:layout_marginStart="8dp"  
        android:layout_marginTop="8dp"  
        android:text="click to invoke intent"  
        app:layout_constraintBottom_toBottomOf="parent"  
        app:layout_constraintEnd_toEndOf="parent"  
        app:layout_constraintStart_toStartOf="parent"  
        app:layout_constraintTop_toBottomOf="@+id/textView"  
        app:layout_constraintVertical_bias="0.77" />  
  
  
</android.support.constraint.ConstraintLayout>

MainActivity.kt

Добавьте следующий код в класс MainActivity.kt. В этом классе мы вызываем URL-адрес при нажатии кнопки с использованием неявного намерения. Чтобы вызвать это намерение, мы передаем тип действия и URL-адрес. Метод startActivity() используется для запуска Intent.

 
package example.javatpoint.com.kotlinimplicitintent 
 
import android.content.Intent 
import android.net.Uri 
import android.support.v7.app.AppCompatActivity 
import android.os.Bundle 
import kotlinx.android.synthetic.main.activity_main.* 
 
class MainActivity : AppCompatActivity() { 
 
    override fun onCreate(savedInstanceState: Bundle?) { 
        super.onCreate(savedInstanceState) 
        setContentView(R.layout.activity_main) 
 
        button.setOnClickListener(){ 
            intent = Intent(Intent.ACTION_VIEW) 
            intent.setData(Uri.parse("https://www.javatpoint.com/")) 
            startActivity(intent) 
            /*  intent= Intent(Intent.ACTION_VIEW, Uri.parse("https://www.javatpoint.com/")) 
            startActivity(intent)*/ 
        } 
    } 
} 

Вывод:

Вывод 1Вывод 2

Вывод 3

Оцените статью