آموزش کار با Intent در اندروید

در برنامه نویسی اندروید، از Intent ها برای شرح هدفمان استفاده می‌کنیم. ساده ترین نمونه اینتنت این است که به سیستم عامل می‌گوییم لازم است از اکتیویتی A به اکتیویتی B منتقل شویم. در این فصل با intent آشنا می شویم که شامل مباحث زیر می باشد.

آنچه در این آموزش می‌خوانید:

  • معرفی intent
  • آشنایی با انواع intent
  • ساخت Activity جدید
  • آشنایی با تگ های اکتیویتی و اینتنت در مانیفست
  • Explicit Intents یا اینتنت های صریح در قالب پروژه
  • Implicit Intents یا اینتنت های ضمنی در قالب پروژه

 

این جلسه در قالب PDF و در ۶۶ صفحه تهیه شده که در ادامه چند صفحه‌ ابتدایی را مشاهده می‌کنید:

intent

به نام خدا. Intent در لغت به معنای قصد و نیت انجام کار است. در اندروید هم تا حدود زیادی همین معنی را می رساند. به اینصورت که به واسطه intent به سیستم عامل اندروید اعلام می کنیم قصد انجام چه کاری را داریم و سیستم عامل چه کاری باید برای ما انجام دهد. به طور کلی اینتنت واسطی است مابین کامپوننت های مختلف (شامل Activity ها، Service ها، Broadcast Receiver ها) درون یک اپلیکیشن و یا مابین چند اپلیکیشن. کاربرد های متعددی برای اینتنت وجود دارد که شاید ساده ترین آن را بتوان انتقال بین دو Activity درون یک اپلیکیشن دانست. به عنوان مثال یک اپلیکیشن ساده داریم که در اکتیویتی اصلی دو Button ایجاد کرده ایم با نام های “معرفی شرکت” و “تماس با شرکت”. کاربر با لمس هریک از دکمه ها از اکتیویتی اصلی یعنی MainActivity ، به اکتیویتی های مربوطه منتقل می شود که در آنها اطلاعات مدنظر ما برای کاربر نمایش داده می شود. از اینتنت برای انتقال داده بین اکتیویتی ها نیز استفاده می شود. به عنوان یک مثال ساده به عنوان توسعه دهنده می توانیم یک اپلیکیشن بسازیم که در صفحه اصلی، کاربر نام و سایر مشخصات خود را وارد کند و پس از لمس دکمه “تایید”، به اکتیویتی ثانویه منتقل شده و در آنجا اطلاعاتی که قبلا وارد کرده نمایش داده شود. مثال کاربرد اینتنت در بین اپلیکیشن ها می توان به “به اشتراک گذاری” تصاویر و متون اشاره کرد. به عنوان مثال در قسمت گالری تصاویر دیوایس، گزینه Share وجود دارد که با انتخاب تصویر و لمس گزینه Share، لیستی از سایر اپلیکیشن ها از جمله شبکه های اجتماعی نمایش داده شده که با انتخاب هرکدام، تصویر به اپلیکیشن مربوطه ارسال می شود. نمونه پرکاربرد این مثال اپلیکیشن Instagram است. داخل گالری تصاویر گوشی اندرویدی عکسی را باز می کنید، گزینه Share را لمس نموده و سپس اینستاگرام را انتخاب می کنید. اپلیکیشن اینستاگرام اجرا شده و تصویر موردنظر شما آماده ویرایش و ارسال می باشد. یا هنگامی که از داخل یک اپلیکیشن قصد باز کردن لینک وب سایتی را داشته باشیم، با لمس آدرس وب سایت توسط کاربر، به واسطه اینتنت به سیستم عامل دستوری ارسال می شود مبنی بر اینکه باید مرورگر وب را اجرا کند. و به عنوان آخرین مثال، اپلیکیشن ویرایش تصویری را در نظر بگیرید که از کاربر می خواهد با لمس یک Button به دوربین گوشی دسترسی داشته باشد و پس از گرفتن عکس به اپلیکیشن ویرایش تصویر برگشته و تصویر گرفته شده آماده ویرایش باشد. اینها تعداد محدودی از کاربردهای اینتنت در سیستم عامل اندروید بود که در ادامه بیشتر آشنا خواهیم شد.

انواع Intent :

انواع intent

به طور کلی اینتنت ها به دو بخش تقسیم می شوند :
۱ – Explicit intent یا اینتنت های صریح (آشکار)
۲ – Implicit intent یا اینتنت های ضمنی
در ادامه به بررسی هر دو نوع اینتنت می پردازیم.

۱ – Explicit intent یا اینتنت های صریح (آشکار)

اینتنت هایی هستند که مقصد مشخصی دارند و ما به عنوان توسعه دهنده نام مقصد را درون اینتنت قید می کنیم. ساده ترین مثال برای اینتنت های صریح همان مثالی است که در قسمت قبل اشاره کردیم. یعنی انتقال از یک اکتیویتی به اکتیویتی دیگر درون یک اپلیکیشن. یک پروژه جدید با نام Intent و API Level 10 و اکتیویتی از نوع Empty Activity می سازیم تا به صورت عملی با برخی از کاربردهای اینتنت آشنا شویم (در زمان تهیه این آموزش، API پیشنهادی گوگل که ۱۰۰ درصد توسط دیوایس ها پشتیبانی می شود، API 10 می باشد و لزومی ندارد مانند آموزش های قبل از API 9 استفاده کنیم).

ساخت پروژه اندروید

در حال حاضر یک اکتیویتی داریم که طبق معمول TextView پیش فرض Hello World را حذف نموده و لایه را از RelativeLayout به LinearLayout از نوع vertical (چینش عمودی) تغییر می دهیم. کد فعلی اکتیویتی به اینصورت است :
activity_main.xml :

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="ir.android_studio.intent.MainActivity"
    android:orientation="vertical">
</LinearLayout>

MainActivity.java :

package ir.android_studio.intent;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
}

قصد داریم درون این اکتیویتی یک دکمه داشته باشیم که با لمس آن به یک Sub-activity (ساب اکتیویتی) منتقل شویم. Sub-activity همان اکتیویتی معمولی است و فقط یک اصطلاح برای معرفی اکتیویتی هایی هست که توسط یک اکتیویتی دیگر اجرا می شود. (همانطور که در مباحث Menu در طراحی وب و اپلیکیشن هم Menu و Sub-menu را داریم). حال می بایست یک اکتیویتی جدید ایجاد کنیم.

ساخت اکتیویتی جدید

مطابق تصویر در حالتی که پروژه به صورت Project Explorer و Android نمایش داده شده، روی فولدر app راست کلیک کرده و مسیر New > Activity را دنبال می کنیم. در این مرحله نیز مانند هنگام ساخت پروژه جدید، Empty Activity را انتخاب می کنیم تا یک اکتیویتی ساده داشته باشیم.

ساخت اکتیویتی جدید

در مرحله بعد باید اطلاعات اکتیویتی جدید را وارد کنیم :

ساخت اکتیویتی جدید

می خواهیم در اکتیویتی دوم اطلاعاتی از خودمان به کاربر ارائه دهیم که با لمس دکمه در اکتیویتی نخست و اصلی اپلیکیشن به آن دسترسی داشته باشد. ما نام دلخواه About را برای اکتیویتی جدید انتخاب کردیم :

ساخت اکتیویتی جدید

گزینه Generate Layout File به صورت پیش فرض انتخاب شده که مربوط به ایجاد فایل Layout اکتیویتی می باشد. در فیلد بعد نام Layout را به دلخواه تعیین می کنیم که البته چون ما نام اکتیویتی را About وارد کردیم، اندروید استودیو به صورت خودکار نام activity_about را پیشنهاد داده که نیازی به تغییر نمی بینیم. Launcher Activity به اکتیویتی اصلی اپلیکیشن گفته می شود که کاربر با اجرای اپلیکیشن آن را مشاهده می کند. اکتیویتی اصلی ما همان MainActivity بوده بنابراین نباید این گزینه را انتخاب کنیم. گزینه Backwards Compatibility هم مربوط به استفاده کتابخانه AppCompat درون اکتیویتی می باشد که در آموزش آشنایی با ساختار اکتیویتی با مفهوم کتابخانه و کاربرد کتابخانه AppCompat آشنا شدیم. با زدن گزینه Finish اکتیویتی جدید ایجاد می شود :

ساخت اکتیویتی جدید

ساخت اکتیویتی جدید

مشاهده می کنیم دو فایل مربوط به اکتیویتی جدید یعنی activity_about.xml و About.java به پروژه اضافه شد.
تذکر : به جهت کوتاهتر شدن آموزش، از رعایت موارد مربوط به Hardcode که در آموزش های قبل آشنا شدیم صرف نظر کردیم.

فایل activity_about.xml :

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_about"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="ir.android_studio.intent.About">
</RelativeLayout>

فایل About.java :

package ir.android_studio.intent;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

public class About extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_about);
    }
}

اندروید استودیو به صورت خودکار کلاس اکتیویتی، متد onCreate و دستور setContentView را که مربوط به اتصال فایل xml به اکتیویتی می باشد را می سازد. در جلسات قبل با AndroidManifest.xml تا حدودی آشنا شدیم. هر اکتیویتی که به پروژه اضافه می کنیم باید درون مانیفست تعریف شود در غیر اینصورت از نظر سیستم عامل اندروید این اکتیویتی وجود خارجی ندارد. قبلا لازم بود اکتیویتی را به صورت دستی درون مانیفست تعریف کنیم که خوشبختانه در اندروید استودیو این عمل خودکار انجام می شود. مانیفست پروژه ما قبل از ساخت اکتیویتی About به اینصورت بود :

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="ir.android_studio.intent">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

مشاهده می کنیم که اکتیویتی اصلی یعنی MainActivity درون تگ <activity> </activity> تعریف شده که برای هر اکتیویتی باید این تگ اضافه شود.

<activity android:name=".MainActivity">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>

در خط اول تگ، نام اکتیویتی توسط android:name تعریف شده که مقدار آن همان کلاس جاوای اکتیویتی با کاراکتر نقطه در ابتدای آن و بدون ذکر پسوند می باشد. با intent filter در ادامه مبحث آشنا خواهیم شد. پس از ساخت اکتیویتی جدید، تگ مربوط به آن نیز پس از تگ اکتیویتی اصلی اضافه شد :

<activity android:name=".About"></activity>

کد نهایی :

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="ir.android_studio.intent">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name=".About"></activity>
    </application>

</manifest>

برمی‌گردیم به اکتیویتی اصلی. یک دکمه با عنوان “معرفی شرکت” به اکتیویتی اضافه می کنیم. برای زیبایی بیشتر پروژه یک متن کوتاه نیز به قبل از دکمه اضافه می کنیم. یک نکته که اشاره به آن خالی از لطف نیست، مربوط به زمانی است که تصمیم دارید ویژگی های View ها را از قسمت Properties و نه مستقیما درون کد xml اعمال و یا ویرایش کنید. معمولا اندروید استودیو در ابتدا تعداد محدودی از ویژگی ها را نمایش می دهد که برای مشاهده لیست کامل ویژگی ها کافیست روی گزینه View all properties کلیک کنید:

تنظیمات کامل

TextView و Button را اضافه کردیم :

MainActivity

فایل activity_main.xml :

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="ir.android_studio.intent.MainActivity"
    android:orientation="vertical">

    <TextView
        android:text="اپلیکیشن وب سایت اندروید استودیو"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/welcome_txt"
        android:textAlignment="center"
        android:textSize="25sp"/>

    <Button
        android:text="معرفی شرکت"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/btn_about"
        android:layout_marginTop="30pt"
        android:textSize="20sp"/>
</LinearLayout>

قدم بعد استفاده از intent بر روی دکمه است. کاربر پس از لمس یا کلیک روی دکمه “معرفی شرکت” باید به اکتیویتی About منتقل شود. برای این کار نیاز به رویداد onClick داریم که در جلسه کنترل رویدادها در اندروید آشنا شدیم. اما راه ساده تری هم برای استفاده از رویداد onClick وجود دارد که در عین سادگی باعث می شود تا کد کمتری بزنیم. این نحوه فراخوانی متد onClick در موارد متعددی از جمله اینتنت ها می تواند مورد استفاده قرار گیرد. ابتدا باید ویژگی (خاصیت) onClick را درون تگ مربوط به دکمه اضافه کنیم. این کار هم از بخش کد Layout و همچنین در قسمت Properties ، فیلد onClick قابل انجام است. ما این ویژگی را با مقدار دلخواه goToAboutActivity به دکمه اضافه کردیم:

<Button
    android:text="معرفی شرکت"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/btn_about"
    android:layout_marginTop="30pt"
    android:textSize="20sp"
    android:onClick="goToAboutActivity" />

فعلا کار ما با Layout اکتیویتی اصلی به پایان رسیده و به سراغ کلاس جاوای آن می رویم تا اینتنتی تعریف کنیم که وظیفه اش درخواست اجرای اکتیویتی مقصد یعنی About از سیستم عامل است. بعد از متد onCreate یک متد public از نوع بازگشتی void و حاوی یک پارامتر از نوع View همنام با نامی که برای رویداد onClick درنظر گرفته بودیم ایجاد می کنیم :

package ir.android_studio.intent;

import android.support.v7.app.AppCompatActivity;
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 goToAboutActivity(View v) {
        
    }
}

ما متد goToAboutActivity با پارامتر از نوع View و نام دلخواه v ساختیم. حال از کلاس intent یک شی جدید ایجاد می کنیم. Intent سازنده (Constructor) های متعددی دارد.

public void goToAboutActivity(View v) {
    Intent about_activity = new Intent(this, About.class);
    startActivity(about_activity);
}

جهت مطالعه ادامه آموزش، فایل PDF را دانلود نمائید

توجه : سورس پروژه داخل پوشه Exercises قرار داده شده است.

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

دانلود نسخه کامل این آموزش به همراه سورس پروژه
تعداد صفحات : ۶۶
حجم : ۲ مگابایت
قیمت : ۳۰ هزار تومان
توجه: صرفا در صورتی از درگاه پشتیبان استفاده کنید که قادر به پرداخت از طریق سبد دانلود نباشید.
افزودن به سبد دانلود درگاه پشتیبان
این مطلب چقدر برایتان مفید بود؟ لطفا امتیاز دهید
4.1/5 - (11 امتیاز)
پرسش‌ها و دیدگاه‌های کاربران
دوره آموزش برنامه نویسی اندروید
دوره آموزش برنامه نویسی اندروید

با دریافت این دوره به تمامی آموزش‌های غیر رایگان و رایگان موجود در وب سایت دسترسی دارید که تخفیفی برای آموزش‌های غیر رایگان نیز درنظر گرفته شده. این پکیج به دو صورت دانلودی و ارسال پستی ارائه می‌گردد.
آموزش‌های اندروید استودیو در دو دسته «پایه» و «تکمیلی» منتشر می‌شوند.
آموزش‌های پایه شامل مباحث اصلی و ضروری و آموزش‌های تکمیلی مطالبی است که می‌بایست در کنار مطالب اصلی بررسی شود.
با خرید این دوره، به تمامی آموزش‌های غیر رایگانی که در آینده منتشر می‌شود نیز به صورت رایگان دسترسی خواهید داشت!

یک دیدگاه بنویسید

پرسش‌های زیر تایید و پاسخ داده نـــخواهند شد:
۱: جزء موارد مطرح شده در صفحات مشکلات و پرسش‌های رایج و بروزرسانی‌های محتوای آموزشی باشد
۲: سوال قبلا توسط کاربران در دیدگاه‌ها مطرح و پاسخ داده شده باشد
۳: پرسش خارج از مبحث آموزشی موجود در این صفحه باشد