Intent ها در اندروید چگونه پیاده سازی می‌شود ؟

جابه‌جایی بین اکتیویتی ها در اندروید چگونه انجام می‌گیرد؟ | نحوی کار با Intent ها در اندروید

Intent ها در اندروید یک مفهوم کلی می‌باشند. به طور کلی ما برای ایجاد ارتباط با انواع مختلف کامپوننت های یک Application و حتی Component ها نرم افزاری سایر اپلیکیشن‌ها ، از اینتنت ها در اندروید استفاده می‌کنیم. به مفهومی ساده ما به کمک Intent ها به OS (سیستم عامل)  اندروید اطلاع می‌دهیم که قصد انجام چه کاری را داریم .

اینتنت ها به طور کلی شامل چه مواردی می‌باشند.

  • نوع Intent: ما به کمک نوع اینتنت مشخص می کنیم که سیستم عامل دقیقا چه کاری را انجام دهد. به طور مثال اگر برنامه نویس قصد دارد یک اکتیویتی جدید را اجرا کند باید از نوع اینتنت Action_Main استفاده کنید.
  • کلاس مقصد: همانطور که از اسم آن مشخص است کلاسی منظورمان است که می‌خواهیم به آن جابه جا شویم
  • داده های Intent: زمانی که لازم است از اکتیویتی A به اکتیویتی B داده ای ارسال شود. مثلا یک سری نام و نام خانوادگی و … در صفحه ی ثبت نام از کاربر می‌گیریم و بعد از اتمام کار و در زمان جابه‌جایی به صفحه ی لاگین ، آنها را نیز ارسال می‌کنیم.

به طور کلی Intent ها در اندروید دونوع هستند:

  • Intent های صریح (Explicit Intents):  در این نوع اینتنت ما به طور مشخص می‌گویم که قصد داریم به یک اکتیویتی با نام B برویم .
Intent های صریح (Explicit Intents) دراندروید

Intent های صریح (Explicit Intents) دراندروید

به طور کلی مبدا و مقصد در این نوع Intent مشخص است . مانند کد زیر :

val intent = Intent(this, MyActivity::class.java)

در  کد بالا ، this به Context فعلی اشاره می کند. MyActivity::class.java کلاس مقصد Intent را مشخص می کند.

برای اینکه یک Explicit Intents  را اجرا کنیم فقط کد بالا کافی نیست و باید کد زیر را نیز اجرا کنید تا اینتنت ما اجرا شود .

startActivity(intent)
  • Intent های ضمنی (Implicit Intents): اینتنت ضمنی یا Implicit Intent  برای مواقعی است که شما میخواهید یکسری کار های خاص را به سیستم عامل اندروید بگوید ولی لازم نیست که یک Activity خاص را تعیین کنید . به عنوان مثال شما به سیستم عامل اندروید اعلام می‌کنید که قصد دارید یک ایمیل را به اشتراک بگذارید همان طور که متوجه شدید ما در اعلان خودمون اسمی از اکتیویتی نبردیم . و در این بین وظیفه‌ی سیستم عامل این می‌باشد که تمامی برنامه هایی که می‌توانند درخواست ما را اجرا کنند برای ما به نمایش بگذارد.
Intent intent=new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse(“https://code-it.ir/”));
startActivity(intent);

کد بالا یک صفحه وب (سایت کدایت) را برای شما باز می‌کند .Intent.ACTION_VIEW  همان تمایل ما است که به سیستم عامل می‌فرستیم و از سیستم عامل می‌خواهیم که اکتیویتی برای ما بیاورد تا صفحه وب بالا را در آن بازکنیم.

موارد استفاده Intent های صریح در اندروید :

  • اجرا کردن یک اکتیویتی جدید
  • ارسال یک پیام به یک سرویس
  • اعلان یک رویداد

موارد استفاده Intent های ضمنی در اندروید :

  • باز کردن یک فایل
  • تماس با یک شماره تلفن
  • ارسال یک ایمیل

انواع اطلاعاتی که توسط اینتنت ها قابل ارسال است.

  • اطلاعات مربوط به کاربر: یکسری اطلاعات که برای کاربر میباشد و احتمالا شما نیاز دارید در صفحات دیگر از آن استفاده کنیدمانند نام شخص ، آدرس ایمیل و شماره تلفن و username , password
  • اطلاعات مربوط به محتوا: اطلاعاتی مانند متن، تصویر، صدا و ویدئو
  • اطلاعات مربوط به عمل: مانند نام عمل، پارامترهای عمل و نتایج عمل

به طور مثال فرض کنید شما می‌خواهید اسم کاربر را از یک Activity به Activity دیگری ارسال کنید در این موقع از متد ()putExtra استفاده می‌کنید. و این تابع دوتا پارامتر می‌گیرداولی به عنوان کلید و دومی همان مقدار می‌باشد .

Intent intent = new Intent(this, SecondActivity.class);
intent.putExtra("name", "Ali");
startActivity(intent);

و اما این اطلاعات را باید در صفحه ی مقابل دریافت کنید و نحوی دریافت اطلاعات در Activity مقصد با متد getExtra و به صورت زیر می‌باشد .

Intent intent = getIntent();
String name = intent.getStringExtra("name");

از جمله موارد مختلف استفاده از اینتنت ها در اندروید :

  • رفتن از یک اکتیویتی به اکتیویتی دیگر و ارسال پارامتر هایی همراه آن
 val intent = Intent(this, MyActivity::class.java)
        intent.putExtra("name", "علی")
        intent.putExtra("lastname", "فرجی")
        intent.putExtra("age", 27)
        intent.putExtra("userName", "ali_75")
        intent.putExtra("password", "123456")
        startActivity(intent)
  • زمانی که اعلانی به یک Service به همراه یکسری داده ها ارسال می‌کنید
   val intent = Intent(this, YourService::class.java)
        intent.putExtra("کلید شما", "پیغام شما")
        startService(intent)
  • برای ارسال اعلان به یک BroadcastReceiver و اینکه میتوانید یکسری داده نیز ارسال کنید
       val intent = Intent(this, YourBroadcastReceiver::class.java)
            intent.setAction(MyBroadcastReceiver.ACTION_MY_EVENT)//در اینجا ما آن رویدادی که لازم داریم را ارسال می کنیم
            intent.putExtra("message", "StartBroadcast")//اولی کلید و دومی پیغام ما است.
            sendBroadcast(intent)
    
  • زمانی که شما قصد دارید یک ایمیل بفرستید از Intent ها در اندروید استفاده می‌کنید
val intent = Intent(Intent.ACTION_SEND)
        intent.setType("text/plain")
        intent.putExtra(Intent.EXTRA_EMAIL, arrayOf("در اینجا ایمیل ای که می خواهید پیغام را به آن بفرستید"))
        intent.putExtra(Intent.EXTRA_SUBJECT, "در این قسمت Subject خودتون را باید قرار دهید")
        intent.putExtra(Intent.EXTRA_TEXT, "متن پیغامتون را باید اینجا قرار دهید")
        startActivity(intent)
  •  برای گرفتن تماس با یک شماره تلفن
      val intent = Intent(Intent.ACTION_DIAL)
        intent.setData(Uri.parse("tel:+1234567890"))//شماره تلفنی که قصد دارید با آن تماس بگیرید
        startActivity(intent)

موارد بالا نمونه کمی از استفاده هایی می‌باشد که برنامه نویسان می‌توانند از Intent ها در اندروید داشته باشند . ما در ادامه در قالب یک پروژه ، چندیدن مورد از این Intent ها را برای شما بررسی می‌کنم . در این پروژه کوچک ما قصد داریم ابتدا یک سری اطلاعات را از Activity 1  به اکتیویتی 2 ارسال کنیم و با کلیک به روی button های دیگر یک تماس گرفته شود و یک صفحه ی وب نیز به کمک Intent ها در اندروید باز کنیم.

مقالات پر بازدید کدایت : زبان برنامه نویسی کاتلین چیست ؟ و چه مزایایی نسبت به زبان جاوا دارد.

 

ابتدا یک اکتیویتی به اسم MyIntent ایجاد کنید و بعد از ایجاد در بخش لایه اکتیویتی و کد های 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=".MyIntent">

    <EditText
        android:id="@+id/edtMessage"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="30dp"
        android:hint="پیغام خود را وارد کنید"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        tools:ignore="MissingConstraints" />

    <Button
        android:id="@+id/btn1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="30dp"
        android:text="رفتن به اکتیویتی هدف"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@id/edtMessage"
        tools:ignore="MissingConstraints" />




    <Button
        android:id="@+id/btnCall"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="30dp"
        android:text="ایجاد تماس"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@id/btn1"
        tools:ignore="MissingConstraints" />



    <Button
        android:id="@+id/btnWeb"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="30dp"
        android:text="باز کردن یک آدرس در وب"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@id/btnCall"
        tools:ignore="MissingConstraints" />


</androidx.constraintlayout.widget.ConstraintLayout>

در کد بالا و در قسمت xml ما یک EditText به همراه 3 تا Button ایجاد کردیم . با کلیک به روی Button اولی ، پیغامی که در EditText وارد ساختید به اکتیوتی مقصد ارسال می شود. همچنین با کلیک به روی Button ایجاد تماس ، یک تماس گرفته می‌شود و در آخر با Button آخری شما میتوانید یک صفحه وب با آدرسی که خودمان دادیم باز کنید.

کد های کاتلین بخش اکتیویتی MyIntent  :

import android.annotation.SuppressLint
import android.content.Intent
import android.net.Uri
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.Button
import android.widget.EditText
import android.widget.Toast

class MyIntent : AppCompatActivity() {

    lateinit var btn1: Button
    lateinit var btncall: Button
    lateinit var btnweb: Button
    lateinit var edtmessage: EditText


    @SuppressLint("MissingInflatedId")
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_my_intent)
        btn1 = findViewById(R.id.btn1)
        btncall = findViewById(R.id.btnCall)
        btnweb = findViewById(R.id.btnWeb)
        edtmessage = findViewById(R.id.edtMessage)

        btn1.setOnClickListener {

            val message = edtmessage.text
            val intent = Intent(this, MainActivity::class.java)
            intent.putExtra("key_message", message.toString())
            startActivity(intent)

        }
        btncall.setOnClickListener {

            val intent = Intent(Intent.ACTION_DIAL)
            intent.setData(Uri.parse("tel:+1234567890"))
            startActivity(intent)


        }
        btnweb.setOnClickListener {

            val intent = Intent(Intent.ACTION_VIEW)
            intent.setData(Uri.parse("https://code-it.ir/"))
            startActivity(intent)

        }


    }
}

در کد های بالا ما button ها و EditText  رو تعریف کردیم و گفتیم که با کلیک به روی هر کدام چه کاری انجام شود . و اما در صفحه مقصد باید بگویم که مقداری که با کلیک به روی Button اول فرستادیم را دریافت و نمایش دهد .

کد های 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">

    <TextView
        android:id="@+id/txtShowintent"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="22sp"
        android:textStyle="bold"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        tools:ignore="MissingConstraints" />
</androidx.constraintlayout.widget.ConstraintLayout>

کد های کاتلین اکتیویتی MainActivity :

import android.os.Bundle
import android.widget.TextView
import androidx.appcompat.app.AppCompatActivity


class MainActivity : AppCompatActivity() {


    lateinit var txtShowIntennt: TextView
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        val intent = intent
        val name = intent.getStringExtra("key_message")
        txtShowIntennt = findViewById(R.id.txtShowintent)
        txtShowIntennt.text = name


    }

}

خروجی کد بالا : 

 

چکیده مطالب

ما در این مقاله ، یاد گرفتیم که Intent ها در اندروید چه کارایی دارد و انواع مختلف و فرق های که با هم داشتند را مشاهده کردیم . و همچنین چندین مورد از اینتنت ها پرکاربرد در اندروید را نیز  برای شما آوردیم.

 

مقالات مرتبط :  کاتلین مولتی پلتفرم موبایل  چه نوع فناوری است ؟
مقالات مرتبط : ازsharedpreferences در کاتلین چگونه استفاده می‌شود؟
برای امتیاز به این نوشته کلیک کنید!
[کل: 2 میانگین: 5]
تصویر فرشید حبیبی

فرشید حبیبی

من فرشید حبیبی، توسعه‌دهنده نرم‌افزار با تمرکز بر برنامه‌نویسی اندروید هستم. در کنار فعالیت حرفه‌ای خود، وب‌سایت آموزشی «کدایت» را مدیریت می‌کنم و در آن به تولید محتوای آموزشی در حوزه برنامه‌نویسی اندروید می‌پردازم. هدف من، اشتراک دانش و کمک به برنامه‌نویسان برای یادگیری و پیشرفت در مسیر حرفه‌ای‌شان است.

مقالات آموزشگاه کدایت

جدیدترین مقالات و آموزش‌های تکمیلی برنامه‌نویسی را در وبلاگ کدایت بخوانید؛ مرجعی برای یادگیری مباحث پیشرفته کاتلین، توسعه اندروید، وب و فناوری‌های نوین.​

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

آموزشگاه کدایت

پلتفرم یادگیری مهارت‌های مهندسی نرم‌افزار

آموزشگاه کدایت، مرجع تخصصی یادگیری برنامه‌نویسی مدرن، توسعه موبایل و وب است. هدف ما، تسهیل ورود شما به بازار کار از طریق آموزش دانش روز، انتقال تجربیات واقعی و تربیت متخصصان توانمند صنعت نرم‌افزار است.

اطلاعات تماس

تمامی حقوق این وب‌سایت متعلق به مجموعه کدایت است.

طراحی سایت : ایپک