سلام خدمت شما کاربرای عزیز وگرامی، روز شما بخیر ، در این قسمت به آموزش Intent ها و فیلترهای آندروید : Android Intent & Filter میپردازیم.یک Intent اندرویدی شی ای است که یک intent (مفهوم) را حمل می کند. یک intent پیامی از یک مولفه به یک مولفه ­ی دیگر در داخل اپلیکیشن یا در خارج از اپلیکیشن است. Intent ها می توانند پیام ها را بین هر کدام از سه مولفه اصلی اپلیکیشن یعنی فعالیت ها، سرویس ها و دریافت کنندگان پیام، منتقل کنند.

خود intent، به عنوان یک شی Intent، یک ساختمان داده­ی غیر فعال(passive) است که شامل یک توصیف انتزاعی از عملی است که باید اجرا شود.

برای مثال، فرض کنید که شما دارای یک فعالیت هستید که نیازمند راه اندازی یک کلاینت ایمیل است و یک ایمیل را با استفاده از دستگاه اندرویدی شما می فرستد. بدین منظور Activity شما یک ACTION_SEND را همراه با chooser(انتخاب کننده) مناسب به Android Intent Resolver ارسال می کند. chooser تعیین شده برای انتخاب چگونگی ارسال ایمیل شما، واسط مناسب را به کاربر ارائه می دهد.

برای مثال فرض کنید که شما دارای یک فعالیت هستید که نیازمند باز کردن یک URL در یک مرورگر وب بر روی دستگاه اندرویدی شماست. بدین منظور، Activity شما برای باز کردن URL شما در مرورگر وب، Intent مربوط به ACTION_WEB_SEARCH را به Android Intent Resolver می فرستد. Intent Resolver لیستی از فعالیت ها را تجزیه و تحلیل می کند و موردی که بیشترین تطبیق را با Intent شما داشته باشد، یعنی فعالیت Web Browser را انتخاب می کند. Intent Resolver سپس صفحه وب شما را به مرورگر وب می فرستد و فعالیت Web Browser را آغاز می کند.

مکانیسم های جداگانه ای برای تحویل intent ها به هر کدام از مولفه های فعالیت ها، سرویس ها و دریافت کنندگان پیام وجود دارد.

شماره

متد و توصیف

۱

Context.startActivity()

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

۲

Context.startService()

شی Intent برای آغاز کردن یک سرویس یا تحویل دستور های جدید به یک سرویس موجود به این متد فرستاده می شود.

۳

Context.sendBroadcast()

شی Intent برای تحویل پیام به همه دریافت کنندگان پیام مورد نظر به این متد فرستاده می شود.

اشیا Intent

یک شی Intent، مجموعه ای از اطلاعات است که به وسیله­ی مولفه ای که intent را دریافت می کند، مورد استفاده قرار می گیرد بعلاوه اطلاعاتی که به وسیله ­ی سیستم اندرویدی استفاده می شود.

یک شی intent می تواند بر مبنای آنچه که مخابره یا اجرا می شود، شامل مولفه های زیر باشد.

ACTION (عمل)

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

http://www.tahlildadeh.com/

action در یک شی Intent می تواند به وسیله ­ی تابع setAction() تنظیم شده و به وسیله­ی تابع getAction() خوانده شود.

DATA (داده)

URI داده ای که باید بر روی آن عملی انجام شود و نوع MIME داده را مشخص می کند. برای مثال، اگر فیلد action برابر با ACTION_EDIT باشد، فیلد داده (Data) شامل URI سندی است که باید برای ویرایش نمایش داده شود. متد setData() فقط URI داده را مشخص می کند. setType() فقط نوع MIME داده را مشخص می کند و setDataAndType() هر دو مورد URI و نوع MIME را مشخص میکند. URI داده به وسیله­ ی getData() و نوع داده به وسیله­ ی getType() خوانده می شود.

تعدادی مثال از زوج های action/data (عمل/داده) به صورت زیر است.

شماره ترتیب

زوج های Action/Data و توصیف

۱

ACTION_VIEW content://contacts/people/1

اطلاعاتی را در مورد فردی که شناسه­ی او “۱” است، نمایش می دهد.

۲

ACTION_DIAL content://contacts/people/1

شماره گیر تلفن را با شماره های افراد موجود در آن نمایش می دهد.

۳

ACTION_VIEW tel:123

شماره گیر تلفن را با شماره تلفن مورد نظر نمایش می دهد.

۴

ACTION_DIAL tel:123

شماره گیر تلفن را با شماره فرد مورد نظر نمایش می دهد

۵

ACTION_EDIT content://contacts/people/1

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

۶

ACTION_VIEW content://contacts/people/

لیستی از افرادی را نشان میدهد که کاربر می تواند آنها را مرور کند.

CATEGORY(طبقه بندی)

Category یک بخش اختیاری از شی Intent است و رشته ای است که شامل اطلاعات اضافی در مورد نوع مولفه ای است که باید توسط Intent اداره شود. متد addCategory() یک Category را به یک شی Intentاضافه می کند.removeCategory() ، طبقه بندی ای (category) که قبلا اضافه شده را حذف می کند. و getCategories() مجموعه همه طبقه بندی هایی (category) که در حال حاضر در شی موجود است را بر میگرداند. در آدرس زیر لیست Category های استاندارد اندروید ارائه شده است.

http://www.tahlildadeh.com/

شما می توانید. برای درک اینکه چگونه ما از category ها برای انتخاب فعالیت مناسب متناظر با یک Intent استفاده می کنیم، جزئیات Intent Filter ها را در بخش زیر بررسی کنید.

Extras

Extra ها زوج هایی یا مقادیر کلیدی برای اطلاعات اضافی هستند که باید به مولفه ای که intent را اداره می کند، تحویل داده شوند. Extra ها می توانند به ترتیب با استفاده از متدهای putExtras() و getExtras() تنظیم شده و خوانده شوند.

در آدرس زیر لیستی از داده های Extra استاندارد مربوط به Intent اندرویدی ارائه شده است.

http://www.tahlildadeh.com/

Flags

این flag ها بخش های اختیاری شی Intent هستند و به سیستم اندرویدی دستور می دهند که چگونه یک فعالیت را راه اندازی کنند و بعد از راه اندازی چگونه در مورد آن عمل کند و غیره.

Component Name(نام مولفه)

این فیلد اختیاری یک شی ComponentNameاندرویدی است که نشان دهنده کلاس BroadcastReceiver، Service یا Activity است. در صورتی که این فیلد تنظیم شود، شی Intent به نمونه ای از کلاس تعیین شده تحویل داده می شود. در غیر این صورت اندروید از اطلاعات دیگر موجود در شی Intent برای یافتن مقصد مناسب استفاده می کند.

فیلد component name به وسیله­ی متدهای setComponent()،setClass() یا setClassName() تنظیم می شود و به وسیله­ ی متد getComponent() خوانده می شود.

Intent انواع

دو نوع Intent زیر به وسیله­ ی اندرویدِ تا نسخه­ ی ۴٫۱ پشتیبانی می شوند.

Explicit Intent های صریح

این Intent ها مولفه­ ی مقصد را با نام آن مشخص می کنند و معمولا برای پیام های داخلی اپلیکیشن به کار می روند. به عنوان مثال زمانی که یک فعالیت یک سرویس فرعی را آغاز می کند یا یک Sibling Activity را راه اندازی می کند. برای مثال

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

Implicit Intents های ضمنی

این Intent ها مقصد را نام گذاری نمی کنند و فیلد component name آن ها خالی باقی می ماند. Intent های ضمنی، اغلب برای فعال کردن مولفه ها در اپلیکیشن های دیگر به کار می روند.

برای مثال

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

مولفه­ ی مقصدی که intent را دریافت می کند، می تواند از متد getExtras() برای گرفتن اطلاعات اضافی ارسال شده به وسیله­ی مولفه­ ی مبدا استفاده کند، برای مثال

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

مثال

مثال زیر عملکرد یک Intent اندرویدی را در راه اندازی اپلیکیشن های موجود در اندروید، نشان می­دهد.

مرحله

توصیف

۱

از Eclipse IDE برای ایجاد یک اپلیکیشن اندرویدی استفاده کنید و آن را تحت پکیج com.example.intentdemo، IntentDemoبنامید. در حالیکه این پروژه را ایجاد می کنید برای استفاده از سطوح بالاتر API ها، از آخرین نسخه Target SDK و Compile With اطمینان حاصل کنید.

۲

فایل src/MainActivity.javaرا تغییر دهید و کدهایی را برای تعریف دو شنود کننده­ی(listeners) متناظر با دو دکمه یعنی Start Browser و Start Phone اضافه کنید.

۳

فایل XML صفحه بندی res/layout/activity_main.xmlرا برای اضافه کردن سه دکمه به ترتیب خطی تغییر دهید.

۴

فایل res/values/strings.xmlرا برای تعریف مقادیر ثابت مورد نیاز تغییر دهید.

۵

برای راه اندازی امولاتور اندروید اپلیکیشن را اجرا کنید و نتایج تغییرات اعمال شده در اپلیکیشن را بررسی کنید.

در بخش زیر محتوای تغییر یافته­ ی فایل فعالیت اصلی

src/com.example.intentdemo/MainActivity.java ارائه شده است.

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

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

بخش زیر محتوای فایل res/layout/activity_main.xml است.

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

بخش زیر محتوای فایل res/values/strings.xml برای تعریف دو ثابت جدید است.

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

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

بخش زیر محتوای فایل AndroidManifest.xmlاست.

اکنون می خواهیم اپلیکیشن IntentDemo را اجرا کنیم. من فرض می­کنم که شما AVD خود را در زمان نصب محیط ایجاد کرده باشید. برای اجرای اپلیکیشن از Eclipse، یکی از فایل های فعالیت پروژه­ی خود را باز کنید و بر روی آیکن Run از نوار ابزار کلیک کنید. Eclipse، اپلیکیش را بر روی AVD شما نصب می کند و آن را آغاز می کند، و در صورتی که همه­ ی موارد مربوط به تنظیمات و برنامه شما درست باشد، صفحه امولاتور زیر برای شما نمایش داده می شود.

Android Intent Screen

اکنون بر روی دکمه Start Browser کلیک کنید. این کار مرورگر تنظیم شده را راه اندازی می کند و همان طور که در شکل زیر نشان داده شده است، http://www.tahlildadeh.com را نمایش می دهد.

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

به صورت مشابه شما می توانید واسط تلفن را با استفاده از دکمه Start Phone راه اندازی کنید، که به شما اجازه می دهد با شماره ای که قبلا به سیستم داده شده است، تماس بگیرید.
Intent Filter ها

شما دیدید که چگونه یک Intent برای فراخوانی یک فعالیت دیگر به کار می رود. سیستم عامل اندروید از فیلتر ها برای اشاره کردن به مجموعه ای از فعالیت ها(Activities)، سرویس ها(Services) و دریافت کنندگان پیام های منتشر شده(Broadcast receivers) استفاده می کند، که می تواند Intent را با کمک مجموعه­ ی تعیین شده ای از اعمال (action)، دسته بندی ها (categories) و شمای داده­ی(data scheme) مربوط به یک Intent، اداره کند. شما باید از عنصر در فایل مانیفست برای لیست کردن اعمال (actions)، طبقه بندی ها (categories) و انواع داده (data types) مربوط به هر فعالیت، سرویس یا دریافت کننده پیام، استفاده کنید.

بخش زیر مثالی از بخشی از فایل AndroidManifest.xmlبرای مشخص کردن یک فعالیت com.example.intentdemo.CustomActivity است که می تواند به وسیله­­ ی هر کدام از دو عمل (action) ذکر شده، فراخوانی شود، و شامل یک طبقه بندی (Category) و یک داده (data) است.

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

زمانیکه این فعالیت به وسیله­ی فیلترهای مطرح شده در بالا تعریف می شود، سایر فعالیت ها می توانند این فعالیت را با استفاده از android.intent.action.VIEW یا با استفاده از عمل com.example.intentdemo.LAUNCH فراخوانی کنند، به شرط آنکه طبقه بندی مربوط به آنها android.intent.category.DEFAULT باشد.

عنصر نوع داده ای که انتظار می رود به وسیله­ی فعالیت فراخوانی شود را تعیین می کند و در مثال بالا، فعالیت ما انتظار دارد که داده با http:// شروع شود.

ممکن است موقعیتی وجود داشته باشد که در آن یک intentبتواند به چندین فیلتر یا بیش از یک فعالیت یا سرویس داده شود. در این حالت ممکن است از کاربر سوال شود که کدام مولفه فعال شود. در صورتی که هیچ مقصدی یافت نشود یک حالت استثنا به وجود می آید.

تست های مربوط به چک ها و بررسی های اندروید قبل از فراخوانی یک فعالیت در ادامه ارائه شده اند.

یک فیلتر می تواند همانطور که در بالا نشان داده شد،بیش از یک عمل (action) را لیست کند ولی این لیست نمی تواند خالی باشد. یک فیلتر باید حداقل شامل یک عنصر باشد، در غیر این صورت، تمام intent ها را بلوکه می کند. اگر بیش از یک عمل (action) مطرح شود آنگاه اندروید سعی می کند که یکی از action های ذکر شده را قبل از فراخوانی یک فعالیت تطبیق بدهد.

یک فیلتر <intent-filter> می تواند، صفر، یک یا بیش از یک category را لیست کند. اگر هیچ category ذکر نشود آنگاه اندروید همیشه این تست را پشت سر می گذراند. ولی اگر بیش از یکی category ذکر شود، آنگاه برای اینکه یک intent از این تست عبور کند، تمام category های موجود در شی Intent باید با category موجود در فیلتر مطابقت داشته باشند.

هر عنصر می تواند یک URI و یک نوع داده را (نوع رسانه MIME) مشخص کند. ویژگی های جداگانه ای مانند scheme، host، port و path برای هر بخش از URL وجود دارند. یک شی Intent که شامل هر دو مورد URL و نوع داده است، فقط در حالتی از بخشِ تست نوع داده عبور می کنند که نوع داده با یک نوعِ لیست شده در فیلتر مطابقت داشته باشد.

مثال

مثال زیر تغییری از مثال بالا است. در این مثال ما می بینیم که چگونه اندروید در حالتی که یک intent دو فعالیت تعریف شده در خود را فراخوانی کند، ناسازگاری را حل می کند. سپس نحوه فراخوانی یک فعالیت سفارشی را با استفاده از یک فیلتر می بینیم و پس از آن یک حالت استثنا را بررسی می کنیم که در آن اندروید فعالیت مناسب تعریف شده برای یک intent را پیدا نمی کند.

مرحله

توصیف

۱

از Eclipse IDE برای ایجاد یک اپلیکیشن اندرویدی استفاده کنید و آن را تحت پکیج com.example.intentdemo، IntentDemo بنامید. در حالیکه این پروژه را ایجاد می کنید، از Target SDK و Compile With در آخرین ورژن Android SDK برای استفاده از سطوح بالاتر API ها اطمینان حاصل کنید

۲

فایل src/MainActivity.java را تغییر دهید و کدهایی را برای تعریف سه شنود کننده متناظر با سه دکمه تعریف شده در فایل layoutاضافه کنید.

۳

یک فایل جدید src/CustomActivity.java را برای ایجاد یک فعالیت سفارشی که به وسیله­ی intrnt های مختلف فراخوانی می شود، اضافه کنید.

۴

فایل XML صفحه بندی، es/layout/activity_main.xmlرا برای اضافه کردن سه دکمه به ترتیب خطی، تغییر دهید.

۵

یک فایل XML صفحه بندی res/layout/custom_view.xml را برای اضافه کردن یک عنصر ساده برای نمایش داده­ی ارسال شده از طریق intent اضافه کنید.

۶

فایل res/values/strings.xml را برای تعریف مقادیر ثابت مورد نیاز تغییر دهید.

۷

فایل AndroidManifest.xml را برای تعریف قوانینی برای intent تان جهت فراخوانی فعالیت سفارشی، تغییر دهید.

۸

اپلیکیشن را برای راه اندازی امولاتور اندروید اجرا کنید و نتایج تغییرات اعمال شده در اپلیکیشن را ببینید.

در بخش زیر محتوای تغییر یافته­ ی فایل فعالیت اصلی

src/com.example.intentdemo/MainActivity.javaنمایش داده شده است.

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

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

در بخش زیر محتوای تغییر یافته­ ی فایل فعالیت اصلی

src/com.example.intentdemo/CustomActivity.javaارائه شده است.

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

در بخش زیر محتوای فایل res/layout/activity_main.xml ارائه شده است.

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

در بخش زیر محتوای فایل res/layout/custom_view.xmlارائه شده است.

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

بخش زیر محتوای فایل res/values/strings.xml برای تعریف دو ثابت جدید است.

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

بخش زیر محتوای پیش فرض فایل AndroidManifest.xml است.

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

اکنون می خواهیم اپلیکیشن IntentDemo را اجرا کنیم. من فرض می­ کنم که شما AVD خود را در زمان نصب محیط ایجاد کرده باشید. برای اجرای اپلیکیشن از Eclipse، یکی از فایل های فعالیت پروژه­ ی خود را باز کنید و بر روی آیکن Run از نوار ابزار کلیک کنید. Eclipse، اپلیکیش را بر روی AVD شما نصب میکند و آن را آغاز میکند، و در صورتی که همه­ ی موارد مربوط به تنظیمات و برنامه شما درست باشد، صفحه امولاتور زیر برای شما نمایش داده می شود.

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

اکنون بر روی اولین دکمه Start Browser with VIEW Action کلیک کنید. در اینجا ما فعالیت سفارشیمان را با استفاده از یک فیلتر “android.intent.action.VIEW” تعریف کرده ایم و یک فعالیت پیش فرض از قبل در مقابل عمل VIEW وجود دارد که به وسیله اندروید تعریف شده است و مرورگر وب را راه اندازی می کند. بنابراین اندروید دو گزینه­ ی زیر را برای انتخاب فعالیتی که می خواهید راه اندازی کنید، نمایش می دهد.

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

اکنون اگر شما Browser را انتخاب کنید، اندروید مرورگر وب را راه اندازی می کند و وب سایت example.com را باز می کند. ولی اگر شما گزینه ­ی IndentDemo را انتخاب کنید، آنگاه اندروید CustomActivity را راه اندازی می کند که کار خاصی انجام نمی دهد بلکه فقط متن وارد شده را می گیرد و آن را در غالب یک متن به صورت زیر نمایش می دهد.

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

اکنون با استفاده از دکمه back به عقب برگردید و بر روی دکمه “Start Browser with LAUNCH Action” کلیک کنید. در اینجا اندروید از فیلتر (filter) برای انتخاب تعریف فعالیت استفاده می کند و به سادگی فعالیت سفارشی شما را راه اندازی می کند و باردیگر پنجره زیر را نمایش می دهد.

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

دوباره با استفاده از دکمه back به عقب برگردید و بر روی دکمه “Exception Condition” کلیک کنید. در اینجا اندروید سعی می کند که یک فیلتر مناسب را برای intent مورد نظر پیدا کند، ولی یک فعالیت معتبر تعریف شده را پیدا نمی کند زیرا این بار ما به جای داده­ی http از https استفاده کردیم.بنابراین اندروید یک حالت استثنا را اعلام می کند و پنجره زیر را نمایش می دهد.

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

مقاله قبلی
قطعات اندروید

۴۳۴۷
۶۷۰
تاریخ ارسال : ۱۳۹۴/۰۷/۲۷

دانلود PDF
دانشجویان گرامی اگر این مطلب برای شما مفید بود لطفا ما را در GooglePlus محبوب کنید
رمز عبور: tahlildadeh.com یا www.tahlildadeh.com
لطفا به این مطلب امتیاز دهید
۰
۲ ۰
ارسال دیدگاه
نظرات کاربران
شماره موبایل دیدگاه
عنوان پست الکترونیک