با عرض سلام و وقت بخیر خدمت کاربران سایت پی وی لرن . و کاربرانی که دوره کامل آموزش برنامه نویسی اندروید را دنبال می کنند. Broadcast Receiver در اندروید به سادگی به پیام های وضعیت های مختلف از برنامه های دیگر یا از سیستم عامل خود پاسخ می دهد. این پیام ها گاهی به عنوان رویداد یا هدف شناخته می شوند. به عنوان مثال، برنامه ها می توانند Broadcast Receiver را اجرا کنند تا برنامه های دیگر بدانند که برخی از داده ها به دستگاه بارگیری شده اند و برای آنها در دسترس است، بنابراین این Broadcast Receiver است که این ارتباط را پیگیری می کند و اقدام مناسب را آغاز می کند. برای آشنایی با برودکست ریسیور در اندروید در ادامه ی مباحث این بخش با ما همراه باشید.
در ادامه ی مباحث این بخش ما شما را با چگونگی ایجاد و مدیریت Broadcast Receiver در اندروید آشنا می کنیم.
دو مرحله مهم برای ایجاد برنامه Broadcast Receiver برای اهداف broadcaste سیستم وجود دارد:
یک Broadcast Receiver به عنوان یک زیر کلاس از Class BroadcastReceiver اجرا می شود.
Broadcast Receiver با متد () onReceive که هر پیام را به عنوان پارامتر Intent object دریافت می کند اجرا می شود:
1 2 3 4 5 6 | public class MyReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Toast.makeText(context, "Intent Detected.", Toast.LENGTH_LONG).show(); } } |
یک برنامه برای اهداف Broadcast Receiver با ثبت یک گیرنده پخش از فایل AndroidManifest.xml گوش می دهد.
در نظر داشته باشید ما قصد داریم MyReceiver را برای رویداد تولید شده ACTION_BOOT_COMPLETED ثبت کنیم.
سپس بعد از اینکه سیستم اندروید فرآیند بوت را کامل انجام داد توسط رویداد MyReceiver خارج می شود.
1 2 3 4 5 6 7 8 9 10 11 12 13 | <application android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <receiver android:name="MyReceiver"> <intent-filter> <action android:name="android.intent.action.BOOT_COMPLETED"> </action> </intent-filter> </receiver> </application> |
و پیاده سازی منطقی در onReceive() انجام می شود.
چندين رویداد سيستمی توليد شده به عنوان پايگاه هاي استاتيك آخر در كلاس Intent وجود دارد.
جدول زیر شامل لیستی از رویدادهای مهم سیستمی است.
ردیف | رویداد و توضیحات مربوطه |
---|---|
۱ | android.intent.action.BATTERY_CHANGED Sticky broadcast حاوی وضعیت شارژ، سطح و سایر اطلاعات مربوط به باتری است. |
۲ | 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 دستگاه را راه اندازی مجدد کنید. |
اگر می خواهید خودتان برنامه خود را تولید و ارسال شدن نکاتی را سفارشی کنید، شما باید با استفاده از متد () sendBroadcast در داخل کلاس فعالیت خود، این اهداف را ایجاد و ارسال کنید.
اگر از متد (sendStickyBroadcast (Intent استفاده کنید، نکته ارسالی بعد از کامل شدن broadcast باقی می ماند:
1 2 3 4 5 | public void broadcastIntent(View view) { Intent intent = new Intent(); intent.setAction("com.pvlearn.CUSTOM_INTENT"); sendBroadcast(intent); } |
این هدف com.pvlearn.CUSTOM_INTENT را نیز می توان با متد مشابه ثبت کرد، همانطور که قصد تولید سیستم را داریم:
1 2 3 4 5 6 7 8 9 10 11 12 13 | <application android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <receiver android:name="MyReceiver"> <intent-filter> <action android:name="com.pvlearn.CUSTOM_INTENT"> </action> </intent-filter> </receiver> </application> |
این مثال به شما توضیح می دهد که چگونه BroadcastReceiver را برای ردیابی هدف سفارشی ایجاد کنید.
هنگامی که با سفارشی کردن اهداف آشنا هستید، می توانید برنامه خود را برای ردگیری اهداف تولید شده سیستم برنامه ریزی کنید.
ما مراحل اجرای مثال زیر را برای تغییر دادن برنامه ی Hello World که در بخش قبلی ایجاد کردیم ارائه می کنیم:
مراحل | توضیحات |
---|---|
۱ | مراحل ایجاد برنامه در اندروید استدیو را طبق بخش های قبلی دنبال کرده و نام پکیج را com.example.pvlearn.myapplication قرار بدهید. |
۲ | در فایل MainActivity.java متد () broadcastIntent را اضافه کنید. |
۳ | ایجاد یک فایل جاوا جدید به نام MyReceiver.java تحت پکیج com.example.pvlearn.myapplication برای تعریف BroadcastReceiver ایجاد می کند. |
۴ | یک برنامه می تواند یک یا چند متد سفارشی و سیستمی را بدون هیچ محدودیتی اداره کند. هر هدف که میخواهید دنبال کنید باید در فایل AndroidManifest.xml شما با استفاده از برچسب <receiver…/> ثبت شود. |
۵ | به محتوای فایل res / layout / activity_main.xml دو دکمه برای اجرای broadcast اضافه کنید. |
۶ | فایل string.xml را بدون تغییر رها کنید. |
۷ | برنامه را اجرا کنید تا شبیه ساز آندروید را راه اندازی کنید و نتیجه تغییرات انجام شده در برنامه را تأیید کنید. |
کد برنامه ی زیر محتوای اصلاح شده ی فایل MainActivity.java است.
ما به فایل MainActivity.java متد () broadcastIntent را اضافه کرده ایم.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | package com.example.pvlearn.myapplication; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.View; public class MainActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } public void broadcastIntent(View view){ Intent intent = new Intent(); intent.setAction("com.tutorialspoint.CUSTOM_INTENT"); sendBroadcast(intent); } } |
محتوای فایل MyReceiver.java بصورت زیر است:
1 2 3 4 5 6 7 8 9 10 11 12 13 | package com.example.pvlearn.myapplication; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.widget.Toast; public class MyReceiver extends BroadcastReceiver{ @Override public void onReceive(Context context, Intent intent) { Toast.makeText(context, "Intent Detected.", Toast.LENGTH_LONG).show(); } } |
ما به محتوای فایل FileManifest.xml نیز برچسب <receiver…/> را برای افزودن سرویس اضافه کرده ایم:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.tutorialspoint7.myapplication"> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:supportsRtl="true" android:theme="@style/AppTheme"> <activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <receiver android:name="MyReceiver"> <intent-filter> <action android:name="com.tutorialspoint.CUSTOM_INTENT"> </action> </intent-filter> </receiver> </application> </manifest> |
به مجتوای فایل res/layout/activity_main.xml نیز دو دکمه برای مدیریت broadcast اضافه کرده ایم:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 | <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity"> <TextView android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Example of Broadcast" android:layout_alignParentTop="true" android:layout_centerHorizontal="true" android:textSize="30dp" /> <TextView android:id="@+id/textView2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Tutorials point " android:textColor="#ff87ff09" android:textSize="30dp" android:layout_above="@+id/imageButton" android:layout_centerHorizontal="true" android:layout_marginBottom="40dp" /> <ImageButton android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/imageButton" android:src="@drawable/abc" android:layout_centerVertical="true" android:layout_centerHorizontal="true" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/button2" android:text="Broadcast Intent" android:onClick="broadcastIntent" android:layout_below="@+id/imageButton" android:layout_centerHorizontal="true" /> </RelativeLayout> |
برای اجرای برنامه ی اندرویدی خود یکی از فایل های activity در برنامه ی خود کلیک کنید.
سپس روی نماد (Run) از نوار ابزار برای شروع اجرای برنامه کلیک کنید.
اگر همه چیز بخوبی پیش برود شبیه ساز اندروید پنجره ی زیر را نمایش خواهد داد:
اکنون برای رسیدن به اهداف دلخواه ما، بر روی دکمه Broadcast Intent کلیک می کنیم.
این کار هدف سفارشی ما “com.tutorialspoint.CUSTOM_INTENT” را که توسط BroadcastReceiver ثبت شده ما یعنی MyReceiver است را اجرا می کند.
به عنوان پیاده سازی منطقی در پایین صفحه یک تست از شبیه ساز نمایش داده می شود:
شما می توانید پیاده سازی های دیگر BroadcastReceiver را اجرا کنید تا از برخی اعمال سیستم مانند ریست شدن سیستم، تغییر تاریخ، باتری کم و… با اعلام این وضعیت به کاربر جلوگیری کنید.
Broadcast Receiver در اندروید در واقع یک سیستم دریافت انواع وضعیت از طرف سیستم عامل اندروید است. مثالا می خواهید به محض قطع شدن اینترنت دستگاه و یا کم شدن شارژ باتری به کاربر اعلام کنید، برای این منظور می توانید از Broadcast Receiver استفاده کنید.