اینتنت (Intent) چیست؟

نویسنده : سید ایوب کوکبی ۱۸ اسفند ۱۳۹۷

اینتنت (Intent) چیست؟

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

آناتومی یک Intent

شما برای رسیدن به این صفحه، باید آدرس URL آن را بلد باشید. در واقع آدرس سایت نشان‌دهندۀ جایی است که می‌خواهید بروید. اما Intent نشان‌دهندۀ کاری است که می‌خواهید انجام دهید. «می‌خواهم به بقالی فلان خیابان بروم و کمی ماست بخرم.» این چیزی است که URL بیان می‌کند. اما در هنگام تعریف اینتنت فقط می‌گویید: «می‌خواهم ماست بخورم.»

تا الان از این زاویه به موضوع نگاه کرده بودید؟ جالب است نه؟ در واقع از دید URL مهم است که ماست را کجا بخرید. ولی از دید Intent مهم نیست ماست را از کدام بقالی بخرید؛ مهم خود ماست است که لازمش دارید. در سیستم‌عامل اندروید دقیقاً همین کار توسط اینتنت صورت می‌گیرد. می‌خواهم تصویر را ویرایش کنم. می‌خواهم عکس بگیرم. می‌خواهم با یک شماره تماس بگیرم. می‌خواهم این URL را باز کنم. این خواسته‌ها توسط اینتنت بیان می‌شود.

انواع Intent

اگرچه تقسیم‌بندی اینتنت‌ها به دو دستۀ actions و requests کار درستی نیست ولی برای فهم بهتر موضوع این تقسیم‌بندی را لحاظ کرده‌ایم.

وقتی قرار است اینتنت شما اکشنی انجام دهد، مثلاً بخواهد شماره‌گیری کند از  ACTION_DIAL استفاده می‌کند. به همین ترتیب اکشن‌های دیگری مثل ACTION_VIEW, ACTION_DELETE یا ACTION_EDIT و … .

اما وقتی اطلاعاتی درخواست می‌کند از اکشن‌هایی مثل ACTION_PICK یا ACTION_GET_CONTENT استفاده می‌کند. به عنوان مثال وقتی می‌خواهید تصاویر گالری را در برنامۀ خود نمایش دهید.

بخوانید  راه و رسم یادگیری برنامه نویسی اندروید

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

اجرای اکشن

Action Intents (اسمی من درآورردی برای فهم بهتر) معمولاً با استفاده از ()Activity.startActvity اجرا می‌شوند. این متد از سیستم می‌خواهد تا بهترین اکتیوتی‌ای که می‌تواند این Intent را هندل کند اجرا نماید. در صورتی که بیش از یک اکتیویتی در دستگاه نصب باشد، کادری باز می‌شود و از کاربر می‌خواهد یک اکتیوتی(برنامه) را انتخاب کند. مثلاً وقتی درخواست پخش یک فایل صوتی را می‌کنید، اگر چندین پلیر روی گوشی نصب باشد. کادری باز می‌شود و از کاربر می‌خواهد پلیر مورد نظر را انتخاب کند. در صروتی که فقط یک پلیر وجود داشته باشد. اندروید به صورت خودکار همان برنامه را اجرا می‌کند. یا همین موضوع برای باز کردن یک صفحۀ اینترنتی:

Intent - Choose Activity

فکرش را بکنید Intent وجود نمی‌داشت. برای نمایش یک صفحۀ ساده قوانین و مقررات حتماً بایستی وب‌ویویی تعریف می‌کردید و داخل آن محتوای مورد نظر را نشان می‌دادید. یا بدتر برای پخش یک فایل موسیقی باید پلیر اختصاصی طراحی می‌کردید. اینتنت کمک می‌کند تا کاربر روی دکمۀ اشتراک‌گذاری کلیک کرده و مطالب را در شبکۀ اجتماعی مورد‌علاقه‌اش به اشتراک بگذارد یا آن را در قالب یک پیامک به دوستش بفرستد. بدون اینتنت همۀ این کارها را خودتان باید انجام دهید.

با استفاده از Intent Filter برنامۀ شما نیز می‌تواند در لیست اپلیکیشن‌های پیشنهادی به کاربر نشان داده شود. مثلاً برنامه‌ای ساخته‌اید که تصاویر را ویرایش می‌کند. با کمک فیلترها می‌توانید اپ خود را در دسته‌بندی ابزارهای ویرایش تصویر قرار دهید تا هر وقت کاربری در اپ دیگری درخواست ویرایش تصویر داد، برنامۀ شما نیز در لیست پیشنهادی نمایش داده شود.

بخوانید  آموزش زبان کاتلین – درس 18 (سازنده‌ها)

درخواست محتوا

Request Intents روشی عالی برای درخواست داده‌ها از خارج از برنامه است. اینطور دیگر نگران ذخیرۀ داده‌ها و حفظ امنیت آن‌ها نیستید. این نوع اکشن‌ها معمولاً توسط متد ()Activity.startActivityForResult درخواست شده و توسط متد ()Activity.onActivityResult پاسخ دریافت می‌شود.

به عنوان مثال با اجرای Intent.ACTION_PICK و فرستادن Contacts.CONTENT_URI اپلیکیشن پیش‌فرضِ لیست مخاطبین اجرا شده و کاربر می‌تواند مخاطب مورد نظر را انتخاب کند.

Intent intent = new Intent(Intent.ACTION_PICK);
intent.setData(Contacts.CONTENT_URI);
startActivityForResult(intent, 1);

به دلایل مختلفی این کار بهتر از آن است که خودتان یک لیست مخاطبین اختصاصی بسازید. اولاً نیازی به زحمت اضافه برای کدنویسی و طراحی UI ندارید. دوماً شما که نمی‌دانید کاربر، مخاطبانش را کجا ذخیره می‌کند. معلوم نیست شاید در همان contact manager پیش‌فرض، شاید در سرویس‌های ابری یا حتی در یک فایل متنی ساده. وقتی از اینتنت استفاده می‌کنید دیگر نیازی به دانستن ای موضوعات نیست. شما یک مخاطب می‌خواهید و کاربر خودش آن مخاطب را برای شما تأمین می‌کند.

این موضوع خیلی مهمی است بخصوص در رابطه با تصاویر. سرویس‌های ابری زیادی مثل دراپ‌باکس، گوگل درایو، گوگل فوتو، فیسبوک وجود دارند که هر کاربری بنا به سلیقه از یکی از آن‌ها استفاده می‌کند. وقتی برنامۀ شما به تصویر نیاز داشته باشد، نمی‌تواند تک‌تک جاها را برای یافتن تصاویر بگردد. به جایش اینتنتی ارسال می‌کنید تا کاربر خودش تصویر یا تصاویر مورد نظر را به برنامه ارسال کند.

و فایدۀ آخر Intent این است که دیگر نیازی به درخواست پرمیژن یا مجوزهایی که باعث ترس کاربر می‌شوند نیست.

برخی از برنامه‌نویس‌ها تصور می‌کنند استفاده از اینتنت‌ها باعث می‌شود تا کنترل آن‌ها روی جنبه‌های بصری برنامه کاهش یافته و برنامه از یکدستی خارج شود. در واقع آن‌ها نگران برندسازی محصول خود هستند. شاید این دیدگاه درمورد برندسازی درست باشد ولی مواجه کردن کاربر با محدودیت، اشتباه و ریسک بزرگتری است. نمونه‌اش اپلیکیشن Microsoft’s XIM sharing app؛ این برنامه به جای اینکه از اینتنت استفاده کند و حق انتحاب تصویر را به کاربر بدهد، چند گزینۀ پیش‌فرض مثل، گالری، وان‌درایو، دراپ‌باکس، فیسبوک، اینستاگرام و … در نظر گرفته است. خب اگر کاربری در هیچ یک از این سایت‌ها تصویری نداشت تکلیف چیست؟ مایکروسافت با این کار قصد دارد سرویس وان‌درایوش را جلوی چشم کاربر قرار دهد؛ غافل از اینکه وقتی محدودیت ایجاد کنید کاربر به اپلیکیشن دیگری سوئیچ می‌کند.

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

جمع‌بندی

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

سید ایوب کوکبی

نویسنده و مترجم...

1 دیدگاه

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




    پژمان

    شنبه ۱۰ فروردین ۱۳۹۸

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