سلام دوستان گرامی وقت شما به خیر ، با امید به اینکه این مطالب اموزشی بتواند بهشما در این زمینه کمکی کرده باشد این آموزش را اغاز میکنیم .Broadcast Receivers ها به سادگی به پیام های منتشر شده از سوی سایر اپلیکیشن ها یا خودِ سیستم پاسخ می دهند. این پیام ها گاهی رویداد (event) یا مفهوم (intent) نامیده می شوند. برای مثال، اپلیکیشن ها می توانند برای آگاه کردن سایر اپلیکیشن ها از اینکه داده ی خاصی در دستگاه دانلود شده و آماده ی استفاده است، پیام هایی را به آنها ارسال کنند. این دریافت کننده پیام است که این ارتباط را شنود کرده و اقدام مناسب را انجام می دهد.
دو مرحله مهم برای کار کردن BroadcastReceiver در رابطه با intent های برودکست شده در سیستم وجود دارد که عبارت اند از
ایجاد Broadcast Receiver
ثبت (رجیستر کردن) Broadcast Receive
یک مرحله اضافی در حالتی که شما قصد دارید intent های سفارشی خود را ایجاد کنید وجود دارد. در این حالت شما باید intent ها را ایجاد کرده و آنها را منتشر کنید.
ایجاد Broadcast Receiver
یک Broadcast Receiver به صورت زیر کلاسی (subclass) از کلاس BroadcastReceiver و override کردن متد onReceive() پیاده سازی می شود که در آن هر پیام به صورت یک پارامتر شی Intent دریافت می شود.
آموزش اندروید-آموزش برنامه نویسی اندروید
ثبت کردن Broadcast Receiver
یک اپلیکیشن با ثبت کردن یک Broadcast Receiver در فایل AndroidManifest.xml به intent های منتشر شده ی خاصی گوش فرا می دهد. در نظر بگیرید که ما قصد داریم MyReceiver را برای رویداد سیستمی ACTION_BOOT_COMPLETED ثبت کنیم. این رویداد در زمان اتمام فرایند بوت کردن اندروید، به وسیله ی سیستم منتشر می شود.
آموزش اندروید-آموزش برنامه نویسی اندروید
اکنون هر وقت که دستگاه اندرویدی شما بوت (راه اندازی) می شود، به وسیله ی دریافت کننده ی پیام MyReceiver شنود می شود و منطق پیاده سازی شده در متد onReceive() اجرا می شود.
چندین رویداد ایجاد شده به وسیله ی سیستم وجود دارند که به صورت فیلدهای ایستای قطعی در کلاس Intent پیاده سازی می شوند. جدول زیر تعدادی از رویدادهای مهم سیستمی را لیست می کند.
ثابت مربوط به رویداد
توصیف
android.intent.action.BATTERY_CHANGED
این پیغام برودکست Sticky شامل وضعیت و سطح شارژ و اطلاعات دیگری در مورد باتری است.
android.intent.action.BATTERY_LOW
نشان دهنده ی وضعیت باتری پایین در دستگاه است.
android.intent.action.BATTERY_OKAY
نشان دهندهی این است که باتری کم شده، اکنون در وضعیت مناسبی قرار دارد.
android.intent.action.BOOT_COMPLETED
این یک پیغام برودکست است، که بعد از اتمام بوت کردن سیستم ارسال می شود.
android.intent.action.BUG_REPORT
نشان دهندهی فعالیت مربوط به گزارش یک باگ (اشکال) است.
Android.intent.action.CALL
یک تماس را با کسی که به وسیلهی داده مشخص شده است، برقرار می کند.
android.intent.action.CALL_BUTTON
مربوط به زمانیست که کاربر دکمه “call” را برای رفتن به شماره گیر یا یک واسط کاربری مناسب دیگر جهت برقراری تماس فشار می دهد.
android.intent.action.DATE_CHANGED
برای نشان دادن تغییر داده است.
android.intent.action.REBOOT
برای نشان دادن راه اندازی مجدد (reboot ) سیستم است.
انتشار intent های سفارشی (Broadcasting Custom Intents )
در صورتی که بخواهید اپلیکیشن شما خودش intent های سفارشی را ایجاد کرده و ارسال کند، شما باید این intent ها را با استفاده از متد sendBroadcast() در کلاس activity خود، ایجاد و ارسال کنید. در صورتی که شما از متد sendStickyBroadcast(Intent) استفاده کنید، intent شما sticky می شود به این معنا که Intent ارسالی شما، بعد از پایان انتشار باقی می ماند.
Intent (مفهوم) com.tutorialspoint.CUSTOM_INTENT نیز می تواند شبیه به intent های ایجاد شده به وسیله ی سیستم ثبت شود.
آموزش برنامه نویسی android-آموزش android-آموزش اندروید-آموزش-آموزش برنامه نویسی اندروید
مثال
این مثال، شرح می دهد که شما چگونه می توانید BroadcastReceiver را برای شنود intent سفارشی ایجاد کنید. زمانی که شما با intent سفارشی آشنا شدید، می توانید اپلیکیش خود را طوری برنامه نویسی کنید که intent های ایجاد شده به وسیله ی سیستم را شنود کند. مراحل زیر را برای تغییر اپلیکیشن اندرویدی ای که ما در بخش Hello World Example ایجاد کردیم، دنبال کنید.
توصیف
مرحله
از Eclipse IDE برای ایجاد یک اپلیکیشن اندرویدی استفاده کنید و آن را همانطور که در مثال بخش Hello World Example شرح داده شد، تحت پکیج Hello World Example، HelloWorld بنامید.
۱
فایل فعالیت اصلی MainActivity.java را برای اضافه کردن متد broadcastIntent() تغییر دهید.
۲
برای تعریف یک BroadcastReceiver، یک فایل جاوای جدید به نام MyReceiver.java را تحت پکیج com.example.helloworld ایجاد کنید.
۳
یک اپلیکیشن می تواند یک یا تعداد بیشتری intent سیستمی و سفارشی را بدون هیچ محدودیتی مدیریت کند. تمام intent هایی که مایل به شنود آنها هستید باید با استفاده از تگ در فایل AndroidManifest.xml پروژه شما ثبت شوند.
۴
محتوای پیش فرض فایل res/layout/activity_main.xml را طوی تغییر دهید که شامل یک دکمه برای انتشار intent باشد.
۵
یک ثابت broadcast_intent را در فایل res/values/strings.xml تعریف کنید.
۶
برای راه اندازی امولاتور اندروید اپلیکیشن را اجرا کنید و نتایج تغییرات اعمال شده در اپلیکیشن را بررسی کنید.
۷
در بخش ریز محتوای فایل فعالیت اصلی src/com.example.helloworld/MainActivity.java ارائه شده است. این فایل می تواند شامل هر کدام از متدهای اصلی چرخه حیات باشد. ما متد broadcastIntent() را برای انتشار یک intent سفارشی اضافه کرده ایم.
android-آموزش اندروید-آموزش برنامه نویسی اندروید
بخش زیر نشان دهندهی محتوای مربوط به فایل
src/com.example.helloworld/MyReceiver.java است.
android-آموزش اندروید-آموزش برنامه نویسی اندروید
بخش زیر نشان دهنده ی محتوای تغییریافته ی فایل AndroidManifest.xml است. در اینجا ما تگ را برای وارد کردن سرویس مان اضافه کرده ایم.
android-آموزش اندروید-آموزش برنامه نویسی اندروید
بخش زیر نشان دهنده ی محتوای فایل res/layout/activity_main.xml برای وارد کردن یک دکمه جهت انتشار intent سفارشی مان است.
android-آموزش اندروید-آموزش برنامه نویسی اندروید
بخش زیر نشان دهنده ی محتوای res/values/strings.xml برای تعریف دو ثابت جدید است.
آموزش برنامه نویسی android-آموزش android-آموزش اندروید-آموزش-آموزش برنامه نویسی اندروید
اکنون می خواهیم اپلیکیشن تغییر یافتهی Hello World! را اجرا کنیم، من فرض می کنم که شما ADV خود را در طول نصب محیط ایجاد کرده باشید. برای اجرای اپلیکیشن از Eclipse، یکی از فایل های فعالیت پروژهی خود را باز کنید و بر روی آیکن Run از نوار ابزار خود کلیک کنید. Eclipse، اپلیکیش را بر روی AVD شما نصب می کند و آن را آغاز می کند و در صورتی که همه ی موارد مربوط به تنظیمات و برنامه شما درست باشد، صفحه امولاتور زیر برای شما نمایش داده می شود.
android-آموزش اندروید-آموزش برنامه نویسی اندروید
اکنون برای انتشار intent سفارشی بر روی دکمه ی Broadcast Intent کلیک کنید. این کار intent سفارشی ما به نام “com.tutorialspoint.CUSTOM_INTENT” را منتشر می کند، این intent به وسیله ی BroadcastReceiver ثبت شده ی ما یعنی MyReceiver شنود می شود و با توجه به منطق پیاده سازی شدهی ما، عبارت Intent Detected در انتهای صفحه شبیه ساز به صورت زیر نمایش داده می شود.
آموزش اندروید-آموزش برنامه نویسی اندروید
اکنون شما می توانید سایر BroadcastReceiver ها را برای شنود intent های ایجاد شده به وسیله ی سیستم مانند system bootup، date changed، low battery و غیره امتحان کنید.