میخوای وارد بازار کار بشی و محصولات خودت رو بفرشی همین الان ثبت نام کن
0

Intent filter در اندروید چیست ؟

Intent ها رخداد یک اتفاق را به سیستم اندروید اعلان می کنند و در پی آن تمامی Activity و Service هایی که برای آن اتفاق در سیستم ثبت شده اند، صدا خورده و اجرا می شوند. Intent ها معمولا عملیاتی که باید اجرا شوند را شرح داده و اطلاعاتی را نیز درباره ی عملیاتی که باید اجرا شود ارائه می دهد. برای مثال، اپلیکیشن شما می تواند جهت دسترسی به آدرس URL خاص، با استفاده از آبجکت intent یک کامپوننت مرورگر را راه اندازی کند. در تکه کد زیر این عملیات به نمایش گذاشته شده است.

 

String url = "http://www.vogella.com";
Intent i = new Intent(Intent.ACTION_VIEW);
i.setData(Uri.parse(url));
startActivity(i);

اینجا یک سوال مطرح می شود: چگونه سیستم اندروید می تواند کامپوننت هایی را که قادر به اجرای درخواست intent خاص و واکنش نشان دادن به آن هستند را شناسایی کند؟

در سیستم اندروید، کامپوننت ها می توانند به وسیله ی intent filter خود را برای عملیات یا داده ای خاص ثبت کنند و در واقع اعلان نمایند که قابلیت انجام درخواست و عملیات intent مورد نظر را دارند. به بیانی دیگر intent filter با تعریف قابلیت های یک کامپوننت، نوع intentا ی که یک service ،activity یا broadcast receiver قادر به پاسخ گویی آن است را مشخص می کند.

کامپوننت های اندروید intent filter را یا به صورت static و ثابت در فایل AndroidManifest.xml تعریف می کنند و یا در خصوص broadcast reciever به صورت dynamic و از طریق کدنویسی. Intent filter از طریق action ،category و data تعریف می شود (در فایل تنظیمات به وسیله ی تگ  <intent-filter> می توانید فهرستی از actionها، categoryها و dataهایی را که با هر کدام از کامپوننت های service ،activity یا broadcast receiver مرتبط هستند را معرفی کنید.) .

نیز داشته باشد meta data می تواند intent filter

زمانی که یک intent به سیستم اندروید ارسال می شود، محیط ( platform ) یا بستر اجرای android دریافت کننده ی آن را شناسایی می کند. این کار را با استفاده از داده های موجود در آبجکت intent انجام می دهد. در صورتی که چندین کامپوننت برای یک intent filterثبت نام کرده و گوش بدهند، در آن صورت سیستم اندروید لیستی از کامپوننت هایی که باید راه اندازی شده و پردازش یا درخواست را اجرا کنند برای کاربر نمایش داده و به دنبال آن کاربر می تواند تصمیم بگیرد کدام کامپوننت باید اجرا شود.

 


تعریف  intent filter

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

کامپوننت های اندرویدی خود را به وسیله ی intent filter برای event و رخدادهای خاص معرفی کنید (در واقع به کامپوننت ها اعلان کنید که به رخدادهای مورد نظر گوش داده و منتظر فعال شدن آن ها باشند). در صورتی که این کار برای کامپوننت معینی انجام نشده باشد، آنگاه فقط intentهای صریح ( explicit ) می توانند آن کامپوننت را فراخوانی کنند.

مبحث حاضر نحوه ی ثبت یک کامپوننت برای intent معین را با ذکر مثال شرح می دهد. نکته ی مهم و کلیدی این است که کامپوننت ها برای mime-type ،action مناسب ثبت نام کرده و گوش فرادهند و  meta-data ( اطلاعاتی پایه ای درباره ی intent ) مربوطه را دربر گیرد.

اگر شما چنین intent ای را به سیستم اندروید ارسال کنید، سیستم تمامی کامپوننت هایی که برای این intentبه ثبت رسیده اند را شناسایی می کند. در صورتی که چندین کامپوننت برای این intent ثبت شده باشند، سیستم اندروید آن ها را برای کاربر لیست می کند و کاربر می تواند تصمیم بگیرد با کامپوننت درخواست اجرا شود.

 


مثال: ثبت و تخصیص یک activity به عنوان مرورگر

کد زیر یک activity را برای intent ثبت می کند. این intent زمانی که کاربر می خواهد یک صفحه ی وب را باز کند، فعال شده و فراخوانی می گردد.

 

<activity android:name=".BrowserActivitiy"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<data android:scheme="http"/>
</intent-filter>
</activity>

 


مثال: ثبت و تخصیص یک activity برای intent به اشتراک گذاری و ارسال اطلاعات

مثال زیر یک activity ویژه ی ACTION_SEND ثبت می کند. همان طور که در کد زیر می بینید activity حاضر تنها قادر به پردازش داده هایی از نوع text/plain می باشد (با استفاده از -intent filterخود را مربوط به این داده اعلان یا ثبت کرده است).

 

<activity
android:name=".ActivityTest"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.SEND" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="text/plain" />
</intent-filter>
</activity>

اگر یک کامپوننت intent filter تعریف نکند، در آن صورت فقط intent صریح می تواند آن را فراخوانی کند.

 

 


امیدواریم آموزش Intent filter در اندروید چیست ؟ نیز برای شما مفید واقع شده باشد و ادامه آموزش برنامه نویسی اندروید رو دنبال کنید . برای مطالعه پست‌ها بیشتر ، ما را در مدرسه کدنویسی تلگرام  و یا در تی جوان اینستاگرام دنبال کنید.

نظراتتون رو زیر همین پست با ما به اشتراک بگذارید.

ارسال دیدگاه

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

×

سلام کاربر عزیز

هر سوالی دارید در این بخش هستیم تا شما رو راهنمائی کنیم

روی لوگومون کلیک کنید

× چطور میتونم کمکتون کنم؟