Broadcast Receivers یا همان گیرنده های اعلام در اندروید

Broadcast Receivers

خلاصه آموزش:

  • برودکست چیست؟
  • Broadcast Receivers در اندروید
  • استفاده از متد ()onReceive
  • ساخت پروژه گیرنده های اعلام در اندروید استودیو

گیرنده های اعلام (Broadcast Receivers) به سادگی به پیام هایی که از طرف نرم افزار های دیگر یا سیستم عامل به سایر نرم افزار ها اعلام می شوند پاسخ می دهند. به طور مثال نرم افزار ها می توانند پیام هایی را ارسال کنند که طی آن به سایر نرم افزارها اعلام می شود داده ای دانلود شده و آن ها اجازه دارند از آن استفاده کنند. در این هنگام گیرنده های اعلام پیام را دریافت، شناسایی نموده و به آن واکنش نشان می دهند.

در زیر دو مرحله ی مهم که باعث می شود گیرنده ی اعلام در مواجه با پیام های اعلام شده از طرف سیستم واکنش نشان دهد آورده شده است.

۱ـ  ایجاد کردن یک گیرنده ی اعلام

۲ـ  ثبت کردن گیرنده ی اعلام

در اینجا ممکن است پیاده سازی یک مرحله ی دیگر هم لازم باشد و آن مربوط به زمانی است که شما می خواهید یک پیام را به صورت سفارشی (custom) پیاده سازی کنید که در نتیجه ی آن شما مجبور به پیاده سازی سیستم اعلام آن پیام نیز خواهید بود.

ایجاد یک گیرنده ی اعلام

یک گیرنده اعلام به عنوان یک زیر کلاس از کلاس BroadcastReceiver پیاده سازی می شود و از آنجایی که هر پیام به عنوان یک پارامتر شی Intent دریافت می شود استفاده از متد ()onReceive اجتناب ناپذیر خواهد بود.

ثبت گیرنده ی اعلام

گیرنده های اعلام یک نرم افزار، با ثبت شدن در فایل AndroidManifest.xml xml برنامه، همواره برای دربافت پیام های اعلام آماده اند. توجه کنید که در کد های زیر قصد داریم گیرنده ی MyReceiver برای رویداد ACTION_BOOT_COMPLETED که تنها یک بار پس از کامل شدن فرآیند بوت، توسط سیستم تولید می گردد تعریف کنیم.

ثبت گیرنده ی اعلام

حالا هر زمان که دستگاه اندروید شما بوت شود، توسط گیرنده ی اعلام MyReceiver شناسایی خواهد شد و کد های پیاده سازی شده در داخل متد ()onReceive اجرا می شود.

چندین رویداد تولید شده به وسیله ی سیستم وجود دارند که به عنوان یک فیلد نهایی (final static field) در کلاس Intent تعریف می شوند و وقایعی را اعلام می کنند. جدول زیر تعداد کمی از رویداد های سیستمی را نشان می دهد.

رویداد های ثابت سیستمی توضیحات
android.intent.action.BATTERY_CHANGED اعلام های مهم مربوط به باتری نظیر وضعیت شارژ، میزان شارژ و غیره را شامل می شود.
android.intent.action.BATTERY_LOW کم شارژ بودن باتری را اعلام می کند.
android.intent.action.BATTERY_OKAY بعد از اعلام ضعیف بودن باتری، هنگامی که وضعیت شارژ باتری مطلوب شود، آن را اعلام می کند.
android.intent.action.BOOT_COMPLETED این پیام تنها یک بار، زمانی که بوت سیستم به پایان برسد اعلام می شود.
android.intent.action.BUG_REPORT اشکال (bug) در یک اکتیویتی را اعلام می کند.
android.intent.action.CALL انجام تماس با داده های مشخص را اعلام می کند.
android.intent.action.CALL_BUTTON فشرده شدن دکمه ی “call” را برای رفتن به صفحه ی شماره گیر یا صفحه ی انجام تماس اعلام می کند.
android.intent.action.DATE_CHANGED تغییر تاریخ را اعلام می کند.
android.intent.action.REBOOT راه اندازی مجدد سیستم را علام می کند.

اعلام در پیام های سفارشی (custom intents)

اگر می خواهید نرم افزار شما به طور خودکار پیام ها را تولید و اعلام کند؛ لازم است برای ایجاد و اعلام پیام، از متد ()sendBroadcast در داخل کلاس اکتیویتی برنامه ی خودتان استفاده کنید. اگر شما برای ساخت و اعلام، از متد (sendStickyBroadcast(Intent استفاده کنید، پیام شما چسبنده (Sticky) خواهد بود، یعنی پیامی که شما در حال ارسال آن هستید پس از آن که به تمام قسمت ها اعلام شود در محیط باقی خواهد می ماند.

پیام com.oration.CUSTOM_INTENT را که ایجاد کرده ایم نیز باید مشابه قسمت بالا در سیستم تولید پیام ثبت شود.

مثال

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

مرحله توضیحات
۱ با استفاده از اندروید استودیو یک پروژه ی جدید ایجاد کنید و مانند آنچه در مثال Hello World توضیح داده شد نام آن را Broadcast Receivers تحت بسته ی com.example.broadcast.receivers تعیین کنید.
۲ فایل اصلی اکتیویتی یعنی MainActivity.java را تغییر داده و متد ()broadcastIntent را به آن اضافه کنید.
۳ برای تعریف یک گیرنده اعلام، یک فایل جاوا با نام MyReceiver.java در زیرشاخه ی بسته com.example.broadcast.receivers پروژه، ایجاد کنید.
۴ یک نرم افزار بدون هیچ محدودیتی می تواند یک یا چندین پیام سفارشی و پیام سیستمی را مدیریت کند. شما باید اعلام های هر پیامی را که می خواهید شناسایی شود را در فایل AndroidManifest.xml برنامه با استفاده از تگ </…receiver> ثبت کنید.
۵ محتوای پیش فرض فایل res/layout/activity_main.xml را برای افزودن یک دکمه که اعلام کننده ی پیام هست تغییر دهید.
۶ رشته های مورد نیاز برنامه را به فایل res/values/strings.xml اضافه کنید.
۷ نرم افزار را با استفاده از شبیه ساز دستگاه اندروید اجرا و نتیجه را مورد بررسی قرار دهید.

در زیر محتوای تغییر یافته ی فایل java/com.example.broadcast.receivers/MainActivity.java را آورده ایم. این فایل می تواند هر کدام از متدهای اساسی چرخه حیات را شامل شود. ما متد ()broadcastIntent را برای اعلام یک پیام سفارشی به فایل افزوده ایم.

کد های زیر محتوای فایل java/com.example.broadcast.receivers/MyReceiver.java را نشان می دهند:

در زیر محتوای تغییر یافته ی فایل AndroidManifest.xml را مشاهده می کنید. در این فایل با استفاده از تگ </…receiver> گیرنده ی اعلام تعریف شده است:

در ادامه محتوای فایل res/layout/activity_main.xml را مشاهده می کنید که یک دکمه برای اعلام پیام و دو متن به آن افزوده شده

و در آخر محتوای جدید فایل res/values/strings.xml که پنج ثابت رشته ای در آن تعریف شده است.

حال اجازه دهید برنامه را که با نام گیرنده های اعلام نصب خواهد شد، با استفاده از اندروید استودیو اجرا کنیم. به این منظور فایل پروژه را باز کنید و بعد روی آیکون Run که در نواز ابزار اندروید استودیو قرار دارد کلیک کنید. اندروید استودیو برنامه ی شما را روی شبیه ساز نصب و سپس اجرا می کند و اگر همه چیز بدون مشکل پیش برود خروجی برنامه شما مانند زیر خواهد بود.

گیرنده های اعلام در اندروید

حالا برای اعلام کردن پیامی که ساخته ایم روی دکمه ی اعلام پیام کلیک کنید که باعث اعلام شدن پیام سفارشی “com.oration.CUSTOM_INTENT” می شود، که توسط BroadcastReceiver ثبت شده در مثال، شناسایی خواهد شد. هر بار که گیرنده MyReceiver فعالیت کند، یک پیام در پایین شبیه ساز نمایش داده خواهد شد؛ مانند تصویر زیر

برودکست در اندروید