آموزش کار با 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 را دانلود نمائید.

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

در صورتی که در دانلود از طریق باکس زیر (سبد دانلود) با مشکل مواجه شدید، با مراجعه به این لینک گزینه Intent به مبلغ ۵,۰۰۰ تومان را انتخاب نمائید.

دانلود فایل این آموزش با فرمت PDF به همراه سورس پروژه
تعداد صفحات : ۶۶
حجم : ۲ مگابایت
قیمت : ۵,۰۰۰ تومان
این مطلب چقدر برایتان مفید بود؟
آموزش کار با Intent در اندروید
تعداد رأی: 2   امتیاز: 5

دوره آموزش برنامه نویسی اندروید
دوره آموزش برنامه نویسی اندروید

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

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

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

  • عرفان گفت:

    سلام یه سوال فنی داشتم اگه بزرگواری کنید جواب بدید ممنون میشم.
    در محتوایی که شما دارید اون قسمت رو که کدها به صورت افقی اسکرول میشن از چه افزونه ای برای وردپرس استفاده کردید؟و یا برنامه ای برای اندروید استودیو باید نصب کنیم در نوشته که بتونیم یک همچین اسکرولی درست کرد‌.
    با تشکر از شما

  • Saeed Masumi گفت:

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

  • محمد گفت:

    سلام وخسته نباشید
    به طور کلی در این اموزش چه مباحثی گفته میشه؟؟
    آیا مباحث زیر در این اموزش هستند؟؟؟
    ۱-share کردن فایل ها از خارج برنامه با اپلیکیشن و پردازشششون داخل برنامه
    ۲-share کردن فایل های همین برنامه با سایر برنامه ها
    ۳-IntentService
    ممنون میشم کامل پاسخ بدید..

    • سید مهدی مطهری (مدیر) گفت:

      در این مبحث آموزش کلی اینتنت ارائه شده و یک مثال ساده برای شیر کردن متن مطرح شده که برای فایل و سایر موارد هم مشابه هست و نیاز به تغییراتی داره که با مطالعه این آموزش و بررسی مثالهای موجود در وب به جواب میرسید

  • تجاری اپ گفت:

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

  • Hosein Sami گفت:

    سلام مهندس خسته نباشید
    منPDF رو خریدم . توی صفحه های ۳۳ تا ۳۹ . برای قسمت سن
    توی قسمت جاوای صفحه دوم اپلیکیشن (About.java) هیچی تعریف نکردین ولی برنامه تون سن رو هم برمیگردونه ؟ چطوری؟؟

    من خودم برای سن توی همون قسمت تعریف کردم ولی صفر برمیگردونه
    لطفا راهنمایی کنید. ممنون

  • javad shakouri گفت:

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

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

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

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

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

  • محسن گفت:

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

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

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

کد امنیتی *