آشنایی با Intent ها در اندروید

در این فصل با intent آشنا می شویم که شامل مباحث زیر می باشد :

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

این فصل در ۶۶ صفحه تهیه شده که در ادامه می توانید چند صفحه ابتدایی را مشاهده نمایید :
به نام خدا

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);
}

توجه : سورس پروژه نیز به همراه فایل آموزش درون پوشه Exercises قرار داده شده است.

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

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

در صورتی که در پرداخت سبد خرید زیر با مشکل مواجه شدید، با مراجعه به این لینک مشخصات خود را به همراه مبلغ ۴۰۰۰ تومان ثبت نمایید.

دانلود فایل آموزشی با فرمت PDF به همراه سورس پروژه
تعداد صفحات : ۶۶
حجم : ۲ مگابایت
قیمت : ۴۰۰۰ تومان

۲۹ آذر ۱۳۹۵
سوالاتی که مشمول موارد زیر باشد تایید و پاسخ داده نخواهد شد :
۱ : جزء موارد پاسخ داده شده در مطلب "مشکلات و پرسش های رایج" باشد
۲ : سوال قبلا توسط افراد در دیدگاهها مطرح و پاسخ داده شده باشد
۳ : سوال خارج از مبحث آموزشی موجود در این صفحه باشد
  • javad shakouri گفت:

    با سلام
    خسته نباشید
    آقای مهندس از آموزش های مفید و جامع تون کمال تشکر و قدردانی را دارم
    اما در صورت امکان مباحث رو کمی سریعتر بزارید
    بعضی مواقع فاصله آموزشی زیاد شده و نیاز به مرور کل مطالب از اول میباشد

  • ابوالفضل سلمانی گفت:

    سلام واسه یه اموزش ساده ۴.۰۰۰ تومان زیاد نیست؟

    1. Admin گفت:

      بزرگوار بستگی داره تعریفتون از آموزش ساده چی باشه و اینکه آیا این محتوا و این قیمت با محتوای مشابه از نظر قیمت مقایسه شده یا نه
      ممنون از شما

      1. اشکان گفت:

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

  • سعید محمدی گفت:

    سلام من فایلو خرید کرم ولی باز نیشه لطفا برای من تو ایمیل پایین ارسال کنید
    Sabaasimo@gmail.com
    یا
    Sabaasimo007@gmail .com
    ممنون اگه خواستین صفحه ای که خرید شده را براتون میفرستم با تشکر

    1. Admin گفت:

      سلام. ایمیل دانلود مجدد ارسال شد. لطفا نتیجه رو اعلام بفرمایید

      1. امیر گفت:

        سلام
        فایلها بصورت جداگانه میبایست خریداری بشه؟
        امکان ارائه فایل آموزش کامل وجود نداره؟

        1. Admin گفت:

          سلام
          میتونید همه فایلها (رایگان و غیر رایگان) رو به سبد خرید اضافه کنید و در نهایت فقط یک بار پرداخت رو انجام بدید. (فایلهایی که رایگان هستن مبلغی رو به سبد خرید اضافه نمیکنن و در حال حاضر مجموع فایلهای غیر رایگان ۱۲۰۰۰ تومن هستش)

  • محسن گفت:

    سلام خسته نباشین امکانش هست که فضای آموزشی android studio که داخل PDF از سیاه به سفید تغییرش بدین چون من می خوام pdfچاپ کنم داشته باشم نمی شه خیلی جوهر مصرف می شه لطفا در آموزش بعدی این تغیر اعمال کنید تشکر

پاسخ دهید

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

چگونه آموزش های اندروید استودیو را مطالعه کنم؟

مشکلات و پرسش های رایج

معرفی
با انتشار نسخه ۱ اندروید استودیو، گوگل، توسعه دهندگان را به مهاجرت از ایکلیپس به این محیط برنامه نویسی تشویق می کند.
با توجه به اینکه اکثر آموزشهای موجود (به خصوص آموزشهای فارسی) بر پایه محیط Eclipse هستند، تصمیم گرفتیم آموزشهای ویژه برنامه نویسی در محیط Android Studio را به زبان فارسی منتشر نماییم.
آموزشهای پایه در حال تکمیل بوده و در کنار آموزش پایه، مباحث تکمیلی به صورت رایگان منتشر خواهد شد.