آکادمی آموزش آنلاین طوسی

به کارگیری متد setAction در Implicit Intent ها

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

1. نحوه ایجاد یک Implicit Intent

2. نحوه اختصاص یک Action به Implicit Intent ها

3. نحوه ایجاد یک فیلتر برای Action تعریف شده درImplicit Intent

4. نحوه اختصاص یک Category به Implicit Intent

5. نحوه ایجاد یک فیلتر برای Category تعریف شده در Implicit Intent

در این آموزش به منظور درک بهتر و عملی مطالب تدریس شده پیرامون کلاسIntent Implicit اندروید در آموزش قسمت پنجاه و پنجم، پروژه ای تحت عنوان Intents Introduction به معنی "معرفی Intent ها" که در آموزش های 51 و 52 ایجاد کردیم را در این آموزش مجدد مورد استفاده قرار خواهیم داد.

اکنون برای آنکه رابط گرافیکی SecondActivity را کمی متفاوت سازیم یا می توانیم رنگ پس زمینه آن را تغییر دهیم و یا یک TextView در آن ایجاد کنیم حاوی متن This is the second layout که در این آموزش همانطور که در تصویر زیر مشخص است راه کار اول را دنبال می کنیم:

حال به FirstActivity رفته و آن را به صورت زیر تکمیل می کنیم:

 

همانطور که در کد فوق مشخص است یک شیئ از روی کلاسString تحت عنوان ACTION ساخته و مقدار آن را برابر با com.behzadmoradi.action.MY_ACTION قرار داده ایم. سپس نیاز داریم تا یک شیئ از روی کلاسIntent اندروید بسازیم. بنابراین واژه Intent را نوشته و سپس نامی برای آن انتخاب می کنیم. نامی که در این آموزش برای کلاسIntentدر نظر گرفته ایم intentObject است. سپس یک علامت مساوی قرار داده و کلید واژه new را می نویسیم (همانطور که در آموزش های پیشین توضیح داده شده است از آنجا که نیاز داریم تا یک شیئ جدید از روی کلاسمد نظر بسازیم بایستی اول کلید واژه new را نوشته سپس مجدد نام کلاس مد نظر را بنویسیم). پس از آنکه یک شیئ از روی کلاسIntent اندروید ساختیم حال نوبت به آن می رسد که برای این Intent خود یک وظیفه یا Action تعریف کنیم بنابراین نام شیئ ساخته شده از روی کلاسIntent را نوشته سپس متدی تحت عنوان setAction را به آن ضمیمه می کنیم و نام شیئی که از روی کلاس String تحت عنوان ACTION را ساختیم را به عنوان پارامتر این متد قرار می دهیم. اکنون از آنجا که می خواهیم این Intent را اجرا کنیم نیازاست متدی تحت عنوان startActivity را نوشته و متد مرتبط با آن را نام شیئ ساخته شده از روی کلاسIntent اندروید قرار می دهیم.

در ارتباط با این سوال که چرا نام شیئ ساخته شده از روی کلاسString را کاملا با حروف بزرگ نوشته ایم بایستی گفت که یک استاندارد برنامه نویسی بین المللی است که کارها یا Action های یک Intent را به صورت Constant بنویسیم (برای آشنایی بیشتر با Constant ها در زبان برنامه نویسی جاوا به سری آموزش های زبان برنامه نویسی جاوا در سایت نردبان قسمت پنجاهم مراجعه نمایید).

در واقع تا این مرحله از کار توانستهایم با موفقیت یک Intent از جنس Implicit ایجاد کنیم که این وظیفه را دارا است تا ما را به یک Activity دیگر ببرد. حال همانطور که پیش از این توضیح داده شد نیاز داریم تا یک Intent Filter ایجاد کنیم. برای این منظور فایل AndroidManifest.xml را به صورت زیر تکمیل می کنیم:

همانطور که در کد فوق ملاحظه می شود کد زیر به SecondActivity اضافه شده است:

همانطور که در کد فوق می بینیم برای SecondActivity یک Intent Filter قرار داده ایم که دارای دو بخش است. در بخش اول اقدام به تعریف Action کرده ایم تا تست کند ببیند آیا می تواند Action یی معادل با MY_ACTION بیابد یا خیر. حال اگر در این کار موفق شود پس Intent یی که حاوی آن Action است را اجرا خواهد کرد. سپس اقدام به تعریف Category کرده ایم که مقدار آن برابر با android.intent.category.DEFAULT قرار داده شده است. این Category کار خاصی انجام نمی دهد فقط همواره بایستی این نکته را به خاطر داشته باشیم که هر Intent Filter یی که دارای Category های MAIN و LAUNCHER نباشد بایستی حتماً دارای DEFUALT باشد.

حال اپلیکیشن خود را اجرا می کنیم:

می بینیم که FirstActivity مسئول نمایش رابط گرافیکی کاربری است که مشکلی رنگ بوده و دارای یک TextView حاوی عبارت Hello World, FirstActivity می باشد اما این در حالی است که پس از اجرای اپلیکیشن بلافاصله به SecondActivity می رویم. علت این مسئله آن است که توانسته ایم یک Intent از جنس Implicit اجرا کنیم که هدف آن اجرای Component یی است که دارای Action یی معادل با MY_ACTION است. به عبارت دیگر این Intent می گردد ببیند آیا می تواند Component یی حاوی MY_ACTION پیدا کند یا خیر. حال از آنجا که در فایل AndroidManifest.xml برای SecondActivity یک Intent Filter حاوی Actionیی برابر با MY_ACTION قرار داده ایم، از اینرو سیستم عامل اندروید Action موجود در Intent و هم چنین فیلتر موجود در فایل AndroidManifest.xml را با یکدیگر اصطلاحاً Match کند. حال از آنجا که این Match در SecondActivity صورت گرفته است بنابراین SecondActivity اجرا خواهد شد.

حال می خواهیم ببینیم که اگر Implicit Intent ما نتواند یک Match برای خود پیدا کند چه اتفاقی خواهد افتاد. برای این منظور در فایل AndroidManifest.xml اقدام به کامنت کردن Action موجود در SecondActivity می کنیم:

لازم به ذکر است در فایل های XML بر خلاف فایل جاوا که با قرار دادن // می توانیم چیزی را کامنت کنیم، بایستی بخشی از کد خود را که می خواهیم از دید Compiler پنهان بماند را داخل علامت های <-- --!> قرار دهیم. حال با اینکار گویی چنین Action یی در اپلیکیشن ما وجود ندارد. اکنون اپلیکیشن خود را مجدد اجرا می کنیم تا ببینیم اگر Intent ما نتواند Action یی متناظر پیدا کند چه اتفاقی خواهد افتاد: 

در یک جمله اپلیکیشن ما Crash می کند و علت هم کاملا مشخص است و این است که Implicit Intent ما نتوانسته است یک Match برای خودش از طریق Intent Filter بیابد. در آموزش آتی به بررسی Exception یا همان خطای بوجود آمده در پنجره LogCat خواهیم پرداخت.

پس از مطالعه این آموزش انتظار می رود بتوانیم به سؤالات زیر پاسخ بدهیم:

1. نحوه ایجاد یک Intent از جنس Implicit چگونه است؟

2. چگونه می توان یک Action برای Intent خود در نظر بگیریم؟

3. نحوه کامنت کردن بخشی از کد در فایل XML چگونه است؟

برای مشاهده نظرات وارد سایت شوید یا ثبت‌نام کنید.

56th_Session,_Implicit_Intents_in_A_Real_Project.pdf

لینک دانلود فایل درس به کارگیری متد setAction در Implicit Intent ها

سرفصل های آموزشی دوره رایگان برنامه نویسی اندروید Android

منبع این درس در سایت سکان (www.sokanacademy.com)