Intent ها در اندروید یک مفهوم کلی میباشند. به طور کلی ما برای ایجاد ارتباط با انواع مختلف کامپوننت های یک Application و حتی Component ها نرم افزاری سایر اپلیکیشنها ، از اینتنت ها در اندروید استفاده میکنیم. به مفهومی ساده ما به کمک Intent ها به OS (سیستم عامل) اندروید اطلاع میدهیم که قصد انجام چه کاری را داریم .
اینتنت ها به طور کلی شامل چه مواردی میباشند.
- نوع Intent: ما به کمک نوع اینتنت مشخص می کنیم که سیستم عامل دقیقا چه کاری را انجام دهد. به طور مثال اگر برنامه نویس قصد دارد یک اکتیویتی جدید را اجرا کند باید از نوع اینتنت Action_Main استفاده کنید.
- کلاس مقصد: همانطور که از اسم آن مشخص است کلاسی منظورمان است که میخواهیم به آن جابه جا شویم
- داده های Intent: زمانی که لازم است از اکتیویتی A به اکتیویتی B داده ای ارسال شود. مثلا یک سری نام و نام خانوادگی و … در صفحه ی ثبت نام از کاربر میگیریم و بعد از اتمام کار و در زمان جابهجایی به صفحه ی لاگین ، آنها را نیز ارسال میکنیم.
به طور کلی Intent ها در اندروید دونوع هستند:
- Intent های صریح (Explicit Intents): در این نوع اینتنت ما به طور مشخص میگویم که قصد داریم به یک اکتیویتی با نام B برویم .
به طور کلی مبدا و مقصد در این نوع Intent مشخص است . مانند کد زیر :
1 |
val intent = Intent(this, MyActivity::class.java) |
در کد بالا ، this به Context فعلی اشاره می کند. MyActivity::class.java کلاس مقصد Intent را مشخص می کند.
برای اینکه یک Explicit Intents را اجرا کنیم فقط کد بالا کافی نیست و باید کد زیر را نیز اجرا کنید تا اینتنت ما اجرا شود .
1 |
startActivity(intent) |
- Intent های ضمنی (Implicit Intents): اینتنت ضمنی یا Implicit Intent برای مواقعی است که شما میخواهید یکسری کار های خاص را به سیستم عامل اندروید بگوید ولی لازم نیست که یک Activity خاص را تعیین کنید . به عنوان مثال شما به سیستم عامل اندروید اعلام میکنید که قصد دارید یک ایمیل را به اشتراک بگذارید همان طور که متوجه شدید ما در اعلان خودمون اسمی از اکتیویتی نبردیم . و در این بین وظیفهی سیستم عامل این میباشد که تمامی برنامه هایی که میتوانند درخواست ما را اجرا کنند برای ما به نمایش بگذارد.
1 2 3 |
Intent intent=new Intent(Intent.ACTION_VIEW); intent.setData(Uri.parse(“http://code-it.ir/”)); startActivity(intent); |
کد بالا یک صفحه وب (سایت کدایت) را برای شما باز میکند .Intent.ACTION_VIEW همان تمایل ما است که به سیستم عامل میفرستیم و از سیستم عامل میخواهیم که اکتیویتی برای ما بیاورد تا صفحه وب بالا را در آن بازکنیم.
موارد استفاده Intent های صریح در اندروید :
- اجرا کردن یک اکتیویتی جدید
- ارسال یک پیام به یک سرویس
- اعلان یک رویداد
موارد استفاده Intent های ضمنی در اندروید :
- باز کردن یک فایل
- تماس با یک شماره تلفن
- ارسال یک ایمیل
انواع اطلاعاتی که توسط اینتنت ها قابل ارسال است.
- اطلاعات مربوط به کاربر: یکسری اطلاعات که برای کاربر میباشد و احتمالا شما نیاز دارید در صفحات دیگر از آن استفاده کنیدمانند نام شخص ، آدرس ایمیل و شماره تلفن و username , password
- اطلاعات مربوط به محتوا: اطلاعاتی مانند متن، تصویر، صدا و ویدئو
- اطلاعات مربوط به عمل: مانند نام عمل، پارامترهای عمل و نتایج عمل
به طور مثال فرض کنید شما میخواهید اسم کاربر را از یک Activity به Activity دیگری ارسال کنید در این موقع از متد ()putExtra استفاده میکنید. و این تابع دوتا پارامتر میگیرداولی به عنوان کلید و دومی همان مقدار میباشد .
1 2 3 |
Intent intent = new Intent(this, SecondActivity.class); intent.putExtra("name", "Ali"); startActivity(intent); |
و اما این اطلاعات را باید در صفحه ی مقابل دریافت کنید و نحوی دریافت اطلاعات در Activity مقصد با متد getExtra و به صورت زیر میباشد .
1 2 |
Intent intent = getIntent(); String name = intent.getStringExtra("name"); |
از جمله موارد مختلف استفاده از اینتنت ها در اندروید :
- رفتن از یک اکتیویتی به اکتیویتی دیگر و ارسال پارامتر هایی همراه آن
1 2 3 4 5 6 7 |
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 به همراه یکسری داده ها ارسال میکنید
1 2 3 |
val intent = Intent(this, YourService::class.java) intent.putExtra("کلید شما", "پیغام شما") startService(intent) |
- برای ارسال اعلان به یک BroadcastReceiver و اینکه میتوانید یکسری داده نیز ارسال کنید
1234val intent = Intent(this, YourBroadcastReceiver::class.java)intent.setAction(MyBroadcastReceiver.ACTION_MY_EVENT)//در اینجا ما آن رویدادی که لازم داریم را ارسال می کنیمintent.putExtra("message", "StartBroadcast")//اولی کلید و دومی پیغام ما است.sendBroadcast(intent) - زمانی که شما قصد دارید یک ایمیل بفرستید از Intent ها در اندروید استفاده میکنید
1 2 3 4 5 6 |
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) |
- برای گرفتن تماس با یک شماره تلفن
1 2 3 |
val intent = Intent(Intent.ACTION_DIAL) intent.setData(Uri.parse("tel:+1234567890"))//شماره تلفنی که قصد دارید با آن تماس بگیرید startActivity(intent) |
موارد بالا نمونه کمی از استفاده هایی میباشد که برنامه نویسان میتوانند از Intent ها در اندروید داشته باشند . ما در ادامه در قالب یک پروژه ، چندیدن مورد از این Intent ها را برای شما بررسی میکنم . در این پروژه کوچک ما قصد داریم ابتدا یک سری اطلاعات را از Activity 1 به اکتیویتی 2 ارسال کنیم و با کلیک به روی button های دیگر یک تماس گرفته شود و یک صفحه ی وب نیز به کمک Intent ها در اندروید باز کنیم.
مقالات پر بازدید کدایت : زبان برنامه نویسی کاتلین چیست ؟ و چه مزایایی نسبت به زبان جاوا دارد.
ابتدا یک اکتیویتی به اسم MyIntent ایجاد کنید و بعد از ایجاد در بخش لایه اکتیویتی و کد های XML آن کد های زیر را بنویسید.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
<?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 :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
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 لایه مقصد :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
<?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 :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
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 ها در اندروید چه کارایی دارد و انواع مختلف و فرق های که با هم داشتند را مشاهده کردیم . و همچنین چندین مورد از اینتنت ها پرکاربرد در اندروید را نیز برای شما آوردیم.
دیدگاهتان را بنویسید