اینتنت یا Intent در برنامه نویسی اندروید چیست؟!
یکی از پرکاربردترین مباحث اندروید، Intent ها هستند که در بسیاری از برنامههایمان مجبوریم از آنها استفاده کنیم. اما این Intent ها چه هستند؟!
Intent چیست؟
اینتنت در لغت به معنای: قصد، نیت، منظور، مرام، مفاد، تصمیم، عمد، معنی، فکر و مصمم می باشد و این معنی با خواندن توضیحات زیر برای شما قابل درک میشود.
مثال هایی ساده از کاربرد های Intent
- باز کردن یک آدرس اینترنتی با استفاده از مرورگرها و ..!
- تماس گرفتن با استفاده از برنامه های تماس! (لینک آموزش)
- اجرای یک Activity دیگر و ارسال اطلاعاتی به آن!
- درخواست عکس برداری
- باز کردن آیدی یک کانال در تلگرام و …
- باز کردن فایلها با فایل منیجرهای نصب شده روی گوشی
- و …
در واقع وظیفهی Intent این است که در برخی جاها، به اندروید میگوید چه چیزی میخواهد و اگر سیستم عامل اندروید (با توجه به برنامههای سیستمی خود و نرمافزارهای نصب شده) آن چیز خواسته شده در توانش باشد، به او کمک خواهد کرد؛ همان طور که از معنی ظاهریش پیداست.
در ادامه انواع Intent ها را بررسی میکنیم.
Intent صریح (Explicit)
برای فراخوانی یک سرویس یا Activity مشخصی به کار میرود.
فرض کنید اپلیکیشن شما دارای دو Activity میباشد و قصد دارید از طریق اکتیویتی اول، اکتیویتی دوم را اجرا کنید؛ که در این صورت باید از Intent صریح به صورت زیر استفاده کرد:
Intent intent = new Intent(this, Activity2.class); startActivity(intent);
یا برای اجرای یک سرویس، از متد زیر استفاده میشود:
startService(intent);
Intent ضمنی (Implicit)
وقتی قصد دارید اندروید برای شما کاری را انجام دهد و برایتان مهم نیست که چه اکتیویتی یا سرویسی آن کار را انجام میدهد، باید از Intent ضمنی استفاده کنید. در این صورت اندروید تمام اجزائی که قابلیت انجام آن کار را دارند را برای کاربر لیست میکند و کاربر جزء دلخواه خود را میتواند انتخاب کند. برای مثال فرض کنید قصد دارید یک تصویر را به کاربر نمایش دهید و فرقی نمیکند که چه ابزاری برای نمایش تصویر استفاده میشود؛ و برای این کار به صورت ضمنی از اندروید میخواهیم که تصویر مورد نظر را نمایش دهد. در این صورت اندروید تمام Acitvity هایی که به عنوان نمایش دهندهی تصویر در اندروید ثبت شدهاند را برای کاربر لیست میکند و تصویر توسط نرم افزار دلخواه کاربر نمایش داده میشود.
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(“آدرس عکس”)); intent.setType(“image/*”); startActivity(intent);
در آموزشهای بعدی در مورد این نوع Intent و کاربردهای معمول و پراستفادهی آن بیشتر خواهیم گفت.
Intent-filter
وقتی از طریق Intent درخواستی برای اندروید فرستاده میشود، اندروید همهی نرم افزارهایی که برای انجام آن درخواست مناسب هستند را تشخیص داده و برای کاربر لیست میکند؛ تا کاربر نرم افزار دلخواه خود را برای انجام آن درخواست انتخاب کند. در واقع اندروید به وسیلهی IntentFilter ها تشخیص میدهد که آیا یک نرم افزار امکان اجرای آن درخواست را دارد یا نه.
یک IntentFilter مشخص میکند که نرم افزار شما قادر است چه نوع درخواست هایی را اجرا کند. در واقع IntentFilter، قابلیتهای نرم افزار شما را تعریف میکند. و اگر برای یک اکتیویتی یا سرویس، IntentFilter تعریف نشود، آن Activity فقط به صورت صریح (Explicit Intent) قابلیت فراخوانی دارد.
برای تعریف IntentFilter دو راه وجود دارد.
1- تعریف در فایل AndroidManifest.xml:
در این صورت وقتی نرم افزار نصب میشود، اندروید تمام IntentFilter هایی که تعریف کردهاید را ثبت میکند؛ با این کار برای پیشنهاد نرم افزار شما برای انجام درخواست کاربر، نیازی نیست که نرم افزار شما در حال اجرا یا قبلا اجرا شده باشد.
برای مثال در صورتی که میخواهید نرم افزار شما به عنوان مرورگر وب در اندروید ثبت شود، باید این قابلیت را به صورت زیر در فایل AndroidManifest.xml ثبت نمایید:
<activity android:name=”.ActivityFullKade” android:label=”FullKade”> <intent-filter> <action android:name=”android.intent.action.VIEW” /> <category android:name=”android.intent.category.DEFAULT”/> <data android:schema=”http”/> </intent-filter> </activity>
حال وقتی کاربر یا نرم افزاری درخواست باز شدن آدرس اینترنتی را داشته باشد و به طور صریح نرم افزار مشخصی را برای این کار ذکر نکرده باشد، اندروید نرمافزار شما را هم برای اجرای این درخواست به کاربر پیشنهاد میدهد.
2- استفاده از BroadCastReceiver:
در صورتی که قصد دارید نرم افزارتان فقط زمانی که در حال اجراست درخواستها را دریافت کند، باید از BroadCastReceiver استفاده کنید.
رد و بدل کردن داده بین دو Activity یا Service با استفاده از Intent
هنگام تعریف یک Intent باید اطلاعات مربوط به آن Intent را مشخص کنیم؛ در واقع یک Intent دارای یک سرآیند از اطلاعات پایهای میباشد. آن اطلاعات عبارتند از کاری که میخواهیم انجام شود؛ از جمله (Action) ونوع (Type) که البته برای هر نوع درخواستی ممکن است اطلاعات بیشتری نیز مورد نیاز باشد. همچنین برای دریافت دادههای اکشن و تایپ نیز کافیست از متدهای ()getIntent().getAction و ()getIntent().getType در مقصد خود استفاده کنید.
اما غیر از این اطلاعات ضروری، ممکن است بخواهید دادههای بیشتر و اضافه ای را به یک Activity ارسال کنید؛ مثلا فرض کنید در اکتیویتی اول، لیستی از عناوین را نمایش میدهید و کاربر با انتخاب هر یک از عناوین، میتواند از اکتیویتی دوم، محتوای آن عنوان را مشاهده نماید. برای این کار لازم است که عنوان انتخاب شده به اکتیویتی دوم ارسال شود تا محتوای متناسب با آن عنوان درآن اکتیویتی نمایش داده شود. به صورت زیر عمل میکنیم:
الف: ارسال داده از اکیتویتی اول به اکتیویتی دوم:
Intent intent = new Intent(this, ActivityFullKade.class); intent.putExtra(“KEY”, VALUE); startActivity(intent);
در واقع، دادههای اضافی را با استفاده از متد putExtra برای Intent تعریف میکنید. این دادهها به صورت کلید/مقدار میباشند.
- پارامتر اول تابع putExtra، نام کلید و از نوع String است.
- پارامتر دوم نیز مقدار داده میباشد که میتواند از انواع متغیرهای اصلی (int, float, String, …) باشد.
ب: دریافت داده در اکتیویتی دوم:
برای دریافت دادههای ارسالی در اکتیویتی دوم، یا سرویس و … به روش زیر عمل میکنیم:
Bundle bundle = getIntent().getExtras(); if (bundle == null) { return; } // گرفتن داده از کلید String valeu = extras.getString(“KEY”);
مطالب مرتبط
- قطعه کد درخواست روشن کردن و خاموش بلوتوث
- قطعه کد درخواست روشن و خاموش کردن GPS
- قطعه کد درخواست تماس گرفتن با یک شماره تلفن
- قطعه کد درخواست نظر دادن و ستاره زدن یک برنامه در بازار
- قطعه کد درخواست حذف برنامه
- قطعه کد درخواست باز کردن آیدی در تلگرام
- قطعه کد ریستارت کردن اپلیکیشن در اندروید و اجرای مجدد برنامه
- آموزش ارسال آبجکت به یک اکتیویتی دیگر
- …
نظرات ثبت شده بدون دیدگاه