برقراری ارتباط بین اکتیویتی ها و اپلیکیشن ها در اندروید - بخش اول
آن اپلیکیشن اندرویدی که از چندین اکتیویتی ساده تشکیل شده باشد ارائه دهنده تجربه کاربری بهتری نسبت به اپلیکیشنی است که تمامی عملیات را در یک اکتیویتی بزرگ و پیچیده گرد هم آورده است. یک اصل ساده اما کاربردی، سعی در محدود ساختن هر اکتیویتی به یک وظیفه غیرقابل تقسیم می باشد.
اما به منظور استفاده از این اکتیویتی ها و انجام عملکردهای موردنظر لازم است یک ارتبط بین آنها بوجود آورید و داده هایی را بین این اکتیویتی های ساده رد و بدل نمایید. در این مطلب آموزشی قصد داریم نحوه استفاده از Intentها جهت برقراری ارتباط بین اکتیویتی ها و ارسال داده از یک اکتیویتی به دیگری را شرح دهیم، با ما همراه باشید.
1. Intent چیست؟
معنای Intent در زبان فارسی نیت و قصد انجام کاری است، به طور کلی برای انجام هر کاری قصدی داریم و همین شرایط نیز در دنیای اپلکیشن های اندروید حکم فرماست. جهت شروع یک اپلیکیشن اندروید باید یک هدف یا intent از انجام آن داشته باشید.
اینتنت ها نمونه هایی از کلاس Intent هستند و جزئی یکپارچه از پلتفرم اندروید محسوب می شوند و حتی ساده ترین اپلیکیشن ها هم به آنها نیازمندند. برای مثال اپلیکیشن ساده Hello World را در نظر بگیرید، این اپلیکیشن زمانی آماده کار می شود که آیکون آن را لمس کنید، زیرا قادر به واکنش به اینتنی است که توسط اپلیکیشن لانچر بر روی گوشی شما ساخته شده است.
در کنار جزئیات اکتیویتی، یک اینتنت دربرگیرنده داده های اضافه نیز هست که extra data نام دارند، از این داده ها به منظور ارسال آرگومنت ها و یا باز گرداندن نتیجه از یک اکتیویتی به دیگری استفاده می شود.
2. انواع Intent ها
اینتنت ها دو نوع می باشند، explicit یا صریح و implicit یا ضمنی. یک اینتنت زمانی از نوع صریح است که آن را با استفاده از لفظ کلاس از اکتیویتی که می خواهید شروع کنید، اینشیالایز نمایید، اما برای اینتنت ها از نوع ضمنی تنها کار لازم مشخص کردن اکشنی است که می خواهید به اجرا برسد، مابقی کار یعنی تشخیص اکشنی که باید شروع شود، بر عهده سیستم عامل اندروید می باشد.
معمولا اینتنت های ضمنی برای شروع اکیتیویتی هایی مورد استفاده قرار می گیرند که متعلق به اپلیکیشن هستند، در حالی که کاربرد اینتنت های ضمنی برای اکتیویتی هایی است که به سایر اپلیکیشن های نصب شده در گوشی کار تعلق دارند.
3. ساخت یک اینتنت ضمنی
به منظور ساخت یک اینتنت ضمنی می توانید از متد ()setClass از آبجکت Intent استفاده کرده و لفظ کلاس از اکتیویتی را همراه با یک رفرنس به اکتیویتی کنونی به عنوان محتوا، به آن ارسال کنید. برای مثال چنانچه اکتیویتی کنونی شما MainActivity است و می خواهید یک اینتنت برای شروع یک اکتیویتی به نام OtherActivity بسازید، باید از کدهای زیر استفاده نمایید:
Intent intent = new Intent();
intent.setClass(MainActivity.this, OtherActivity.class);
چنانچه مایل به ساخت یک اینتنت صریح برای یک اکتیویتی باشید که به اپلیکیشن شما تعلق ندارد، باید از متد ()setComponent استفاده کنید. در این حالت لازم است آبجکت ComponentName را که با استفاده از نام پکیج اپلیکیشن موردنیاز و نام کلاس واجد شرایط از اکتیویتی موردنیاز اینشیالایز شده، به عنوان آرگومنت به متد ارسال کنید.
برای مثال در زیر نحوه ساخت یک اینتنت برای یک اکتیویتی به نام OtherActivity که متعلق به اپلیکیشنی است که پکیج آن com.exampli.otherapp نام دارد، نشان داده شده است:
Intent intent = new Intent();
intent.setComponent(
new ComponentName("com.example.otherapp",
"com.example.otherapp.OtherActivity"
)
);
4. ساخت یک اینتنت ضمنی
جهت ساخت یک اینتنت ضمنی باید از متد ()setAction از آبجکت Intent استفاده کرده و یک آبجکت رشته ای برای آن ارسال نمایید. آبجکت رشته ای نام اکشنی را که قصد انجام آن را دارید مشخص می کند. Android SDK دارای اکشن های استاندارد متعددی است، برای اکثر این اکشن ها باید از متد ()setData به منظور مشخص کردن داده هایی که اکشن باید با آنها کار کند، استفاده نمایید، داده ها باید همیشه به صورت یک آبجکت Uri باشد.
یکی از اکشن هایی که به طور گسترده مورد استفاده قرار می گیرد ACTION_VIEW است که جهت راه اندازی تعدادی اپلیکیشن مانند مرورگز پیش فرض، شماره گیر و اپلیکیشن مخاطبین قابل استفاده می باشد.
برای مثال در زیر نحوه ساخت یک اینتنت ضمنی برای گرفتن شماره 123456789 نشان داده شده است:
Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
// Generate a valid URI for the telephone number
// using the Uri.parse method and pass it to setData
intent.setData(Uri.parse("tel:123456789"));
با تغییر آبجکت Uri که به متد ()setData ارسال کرده اید، قادر به تغییر ACTION_VIEW اپلیکیشن هستید. برای مثال اگر مایل به باز کردن مرورگر و باز کردن وبسایت tutsplus در آن هستید، فراخوانی متد ()setdata باید چیزی مشابه زیر باشد:
intent.setData(Uri.parse("https://tutsplus.com"));
در مطلب بعدی با نحوه استفاده از اینتنت ها آشنا خواهیم شد، با ما همراه باشید.