از حرکت بین صفحات اپلیکیشن خودتان تا استفاده از صفحات اپلیکیشنهای دیگر نصب شده بر روی گوشی کاربر، با یادگیری دو مفهوم Intent و Intent Filter میتوانید از Activity های دیگر اپلیکیشنها از جمله جیمیل، تلگرام، دوربین و ... در درون اپلیکیشن خود استفاده کنید.
یک پاکت نامه را در نظر بگیرید، شما از این پاکت نامه برای ارسال اطلاعات به شخص دیگری در هر جای دنیا میتوانید استفاده کنید. Intent هم پاکت نامهای است که آن را به سیستم عامل میدهید تا Component مورد نظر شما را اجرا کند.
val intent = Intent(context, SomeOtherActivity::class.java)
منظور از Component چیست؟
اندروید بر پایه چهار جز (Component) اصلی با نامهای زیر تشکیل شده است:
به جز Content Provider برای شروع و ارتباط با سه Component دیگر از Intent استفاده میکنیم.
دو نوع پیغام در اندروید میتوانیم ارسال کنیم:
پیغام Explicit چیست؟
پیغامی است که در آن گیرنده کاملا مشخص است. باز کردن صفحات دیگر اپلیکیشن خودتان از این نوع Intent میباشد:
val intent = Intent(context, SomeOtherActivity::class.java) startActivity(intent)
پیغام Implicit چیست؟
هنگامی که شما به سیستمعامل اندروید درخواست میدهید تمامی Componentهایی که توانایی کمک به انجام عمل خاص شما را دارند معرفی کند.
در اینجا Action چیست؟
در واقع Action عملیاتی است که یک Activity توانایی اجرای آن را دارد. در اینجا به سیستم عامل اندروید میگویید به من Activityهایی را نمایش بده که توانایی ارسال (از هر نوعی) دارند.
منظور از Type چیست؟
نوع یا همان MIME Type میباشد. اولین بار MIME Typeها در مبحث وب مورد استفاده قرار گرفتند و نشاندهنده نوع اطلاعات بودند. در اندروید هم ما از MIME Type برای مشخص کردن نوع اطلاعات استفاده میکنیم. در اینجا میگوییم تمام Activityهایی را برای من نمایش بده که قابلیت ارسال نوشته (Text) و از نوع ساده (Plain) را دارند.
مثال:
منظور از Plain این میباشد که نوشته عادی میباشد و هیچ مفهوم دیگری ندارد، مثلا HTML یا CSS نیست.
دلیل استفاده از فانکشن putExtra چیست؟
برای ارسال اطلاعات مورد نظرمان میتوانیم از Extra های از پیش تعیین شده استفاده کنیم. در اینجا Text کلیدی است که برای ارسال اطلاعات به گیرنده ارسال میشود.
هر Action ای با هر Extra ای سازگار نیست! و بستگی به توسعهدهنده اپلیکیشن گیرنده دارد.
دلیل استفاده از Intent.createChooser چیست؟
این فانکشن هر بار برای کاربر یک دیالوگ برای انتخاب اپلیکیشن مورد نظر نمایش میدهد. اگر در نسخههای جدید اندروید از این فانکشن استفاده نکنید دیالوگ کوچک دیگری نمایش داده میشود و کاربر حق انتخاب از بین اپلیکیشنها را دارد، اگر گزینه به یاد بسپار را کلیک کند دیگر این دیالوگ نمایش داده نمیشود.
با استفاده از intent-filter هایی که در AndroidManifest.xml تعریف میشود سیستمعامل Activity ها را شناسایی و به سایرین معرفی میکند.
به Activity اصلی اپلیکیشن خود در AndroidManifest.xml نگاهی بندازید:
<activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity>
در اینجا صفحهاصلی برنامه Action یا عمکرد اصلی خود را به عنوان Main یا شروعکننده معرفی میکند و همچنین خود را در دستهبندی شروع کننده اپلیکیشن یا Launcher قرار میدهد.
برای مثالهای قبلی چه نوع Intent Filter ای لازم هست؟
<activity android:name=".SenderActivity"> <intent-filter> <action android:name="android.intent.action.SEND"/> <category android:name="android.intent.category.DEFAULT"/> <data android:mimeType="text/plain"/> </intent-filter> </activity>
چرا Category در اینجا Default میباشد؟
در Intent هایی که میخواهید implicit باشند Category را بر روی DEFAULT قرار دهید که معنای قابل شناسایی توسط اندروید را میدهد تداعی میکند. بدون این خط برنامه شما در لیست نمایش داده نمیشود.
برای مثال اپلیکیشن واتساپ را میخواهیم شروع کرده و پیغامی ارسال کنیم:
دلیل استفاده از resolveActivity چیست؟
در اینجا به دنبال آن میگردیم آیا اپلیکیشنی با مشخصات داده شده وجود دارد یا خیر؟ اگر مقدار null باشد اپلیکیشن با خطا همراه خواهد شد که ما در بلاک let از آن جلوگیری کردهایم.