Неявные и явные намерения в Android с примерами

Опубликовано: 10 Января, 2023

Предпосылки:

  • Основы разработки приложений для Android для начинающих
  • Руководство по установке и настройке Android Studio
  • Андроид | Начиная с первого проекта приложения/андроида
  • Андроид | Запуск вашего первого приложения для Android

Эта статья призвана рассказать о неявных и явных намерениях и о том, как их использовать в приложении для Android.

Что такое намерение в Android?

Намерение — это объект обмена сообщениями, который передается между такими компонентами, как службы, поставщики контента, действия и т. д. Обычно метод startActivity() используется для вызова любого действия. Некоторые из общих функций намерения:

  1. Запустить службу
  2. Запуск активности
  3. Показать веб-страницу
  4. Показать список контактов
  5. Рассылка сообщений

Методы и их описание

Методы Описание
Контекст.startActivity() Это нужно, чтобы запустить новую активность или заставить существующую активность действовать.
Контекст.startService() Это нужно для запуска новой службы или доставки инструкций для существующей службы.
Контекст.sendBroadcast() Это должно доставить сообщение широковещательным приемникам.

Классификация намерений:

В андроиде есть два типа намерений

  1. Неявное намерение
  2. Явное намерение

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

Используя неявное намерение, компоненты не могут быть указаны. Действие, которое должно быть выполнено, объявляется неявным намерением. Затем операционная система Android будет отфильтровывать компоненты, которые будут реагировать на действие. Например,

В приведенном выше примере компонент не указан, вместо этого выполняется действие, то есть веб-страница будет открыта. Когда вы вводите название нужной веб-страницы и нажимаете кнопку «НАЖМИТЕ». Ваша веб-страница открыта.

Пошаговая реализация

Создание приложения Android для открытия веб-страницы с использованием неявного намерения

Шаг 1. Создайте новый проект в Android Studio.

Чтобы создать новый проект в Android Studio, обратитесь к разделу «Как создать/запустить новый проект в Android Studio». Код для этого был предоставлен как на Java, так и на языке программирования Kotlin для Android. Создайте файл XML и файл Java. Пожалуйста, обратитесь к предварительным требованиям, чтобы узнать больше об этом шаге.

Шаг 2: Работа с файлами XML

Далее перейдите к файлу activity_main.xml , представляющему UI проекта. Ниже приведен код файла activity_main.xml . Комментарии добавляются внутри кода, чтобы понять код более подробно.

Синтаксис:

android:id="@+id/id_name"

XML




<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">
 
    <EditText
        android:id="@+id/editText"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />
 
    <Button
        android:id="@+id/btn"
        android:text="Search"
        android:onClick="search"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/editText" />
 
 
</androidx.constraintlayout.widget.ConstraintLayout>

Шаг 3: Работа с файлом MainActivity

Теперь мы создадим Backend приложения. Для этого откройте файл MainActivity и создайте экземпляр компонента (кнопки), созданного в файле XML, с помощью метода findViewById(). Этот метод привязывает созданный объект к компонентам пользовательского интерфейса с помощью назначенного идентификатора.

Синтаксис:

ComponentType object = (ComponentType) findViewById(R.id.IdOfTheComponent);

Java




import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
 
public class MainActivity extends AppCompatActivity {
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
       
        EditText editText;
        Button button;
       
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
       
        button = findViewById(R.id.btn);
        editText = (EditText) findViewById(R.id.editText);
 
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                String url=editText.getText().toString();
                Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
                startActivity(intent);
            }
        });
    }
}

Kotlin




import android.content.Intent
import android.net.Uri
import android.os.Bundle
import android.widget.Button
import android.widget.EditText
import androidx.appcompat.app.AppCompatActivity
 
class MainActivity : AppCompatActivity() {
 
    lateinit var editText: EditText
 
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
 
        editText = findViewById(R.id.editText)
    }
 
    fun search() {
        val url = editText.text.toString()
        val urlIntent = Intent(Intent.ACTION_VIEW, Uri.parse(url))
        startActivity(urlIntent)
    }
}

Явное намерение

Используя явное намерение, можно указать любой другой компонент. Другими словами, целевой компонент определяется явным намерением. Таким образом, будет вызываться только указанный целевой компонент. Например:

В приведенном выше примере есть два действия (FirstActivity и SecondActivity). Когда вы нажимаете кнопку «ПЕРЕХОД К ДРУГОЙ ДЕЯТЕЛЬНОСТИ» в первом действии, вы переходите ко второму действию. Когда вы нажимаете кнопку «ПЕРЕХОД НА ДОМАШНЕЕ ЗАНЯТИЕ» во втором упражнении, вы переходите к первому упражнению. Это делается с помощью Explicit Intent.

Пошаговая реализация

Как создать приложение для Android, чтобы перейти к следующему действию, используя явное намерение (с примером)

Шаг 1. Создайте новый проект в Android Studio.

Чтобы создать новый проект в Android Studio, обратитесь к разделу «Как создать/запустить новый проект в Android Studio». Код для этого был предоставлен как на Java, так и на языке программирования Kotlin для Android. Пожалуйста, обратитесь к предварительным требованиям, чтобы узнать больше об этом шаге.

Шаг 2: Работа с файлом activity_main.xml

Далее переходим к файлу activity_main.xml , представляющему UI проекта. Ниже приведен код файла activity_main.xml . Комментарии добавляются внутри кода, чтобы понять код более подробно.

Синтаксис:

android:id="@+id/id_name"

XML




<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">
 
    <TextView
        android:id="@+id/editText"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Welcome to GFG Home Screen"
        android:textAlignment="center"
        android:textSize="28sp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.0"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />
 
    <Button
        android:id="@+id/btn1"
        android:text="Go to News Screen"
        android:onClick="newsScreen"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/editText" />
</androidx.constraintlayout.widget.ConstraintLayout>

Шаг 3: Работа с файлом MainActivity

Теперь мы создадим Backend приложения. Для этого откройте файл MainActivity и создайте экземпляр компонента (Button, TextView), созданного в файле XML, с помощью метода findViewById(). Этот метод привязывает созданный объект к компонентам пользовательского интерфейса с помощью назначенного идентификатора.

Синтаксис:

ComponentType object = (ComponentType) findViewById(R.id.IdOfTheComponent);
Intent i = new Intent(getApplicationContext(), <className>);
startActivity(i);

Java




import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
 
public class MainActivity extends AppCompatActivity {
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
 
    public void newsScreen(View view) {
        Intent i = new Intent(getApplicationContext(), MainActivity2.class);
        startActivity(i);
    }
}

Kotlin




import android.content.Intent
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
 
class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
    }
 
    fun newsScreen() {
        val i = Intent(applicationContext, MainActivity2::class.java)
        startActivity(i)
    }
}

Шаг 4: Работа с файлом activity_main2.xml

Теперь нам нужно создать второе действие в качестве целевого действия. Шаги для создания второго действия: «Файл» > «Создать» > «Действие» > «Пустое действие».

Далее переходим к файлу activity_main2.xml , представляющему UI проекта. Ниже приведен код файла activity_main2.xml . Комментарии добавляются внутри кода, чтобы понять код более подробно.

XML




<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity2">
 
    <TextView
        android:id="@+id/editText"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Welcome to GFG News Screen"
        android:textAlignment="center"
        android:textSize="28sp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.0"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />
 
    <Button
        android:id="@+id/btn2"
        android:text="Go to Home Screen"
        android:onClick="homeScreen"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/editText" />
</androidx.constraintlayout.widget.ConstraintLayout>

Шаг 5: Работа с файлом MainActivity2

Теперь мы создадим Backend приложения. Для этого откройте файл MainActivity и создайте экземпляр компонента (Button, TextView), созданного в файле XML, с помощью метода findViewById(). Этот метод привязывает созданный объект к компонентам пользовательского интерфейса с помощью назначенного идентификатора.

Синтаксис:

ComponentType object = (ComponentType) findViewById(R.id.IdOfTheComponent);
Intent i = new Intent(getApplicationContext(), <className>);
startActivity(i);

Java




import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
 
public class MainActivity2 extends AppCompatActivity {
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);
    }
 
    public void homeScreen(View view) {
        Intent i = new Intent(getApplicationContext(), MainActivity.class);
        startActivity(i);
    }
}