no-img
سامنتا

broadcast reciver (برودکست رسیور ) در اندروید


سامنتا
دانلودهای ویژه
اطلاعیه های سایت

ادامه مطلب

broadcast reciver (برودکست رسیور ) در اندروید
zip
اردیبهشت ۲۸, ۱۳۹۵

broadcast reciver (برودکست رسیور ) در اندروید


 

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

ویدیو آموزشی به زبان فارسی وبا کیفیت بالا برای این قسمت اضافه شد لطفا از لینک زیر خرید فرمائید 

20,000RIAL – خرید

 

دو قدم بسیار مهم در پیاده سازی BroadcastReceiver  برای  کار با  برودکست اینتنت های سیستم :

  • ساخت Broadcast Receiver 
  • ثبت Broadcast Receiver 

 

ساخت Broadcast Receiver در اندروید 

ابتدا باید  کلاس برودکست از کلاس BroadcastReceiver ارث بری کند و سپس متد onReceive() را برای دریافت تمام پیام ها بصورت Intent  ایجاد کنید :

public class MyReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Toast.makeText(context, "Intent Detected.", Toast.LENGTH_LONG).show(); }
}

ثبت Broadcast Receiver در اندروید 

هر برنامه ی اندرویدی منتظر دریافت پیام های Broadcast های خاصی هستند که در فایل AndroidManifest.xml ثبت شده هستند .در نظر داشته باشید ما میخواهیم برودکست اختصاصی خودمان با نام MyReceiver  را ثبت کنیم که برای پیام ACTION_BOOT_COMPLETED منتظر میماند و وقتی که از طریق سیستم این پیام منتشر شد عکس العمل نشان میدهد . این پیام زمانی از طریق سیستم منتشر میشود که بوت شدن اندروید سیستم کامل شود  : 

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

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

<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>

 

حال هر زمان که اندروید بصورت کامل بوت شد یک پیام برودکستی به کل سیستم منتشر میکند ، این پیام توسط برودکست سیور Broadcast Reciver ما که با نام MyReceiver  ایجاد کردیم دریافت میشود این پیام در متد  onReceive() که در بالاتر گفتیم دریافت میشود و عملیات مدنظری که آنجا نوشته ایم روی آن اعمال میشود.

چندین رویداد سیستمی وجود دارد که بعنوان فیلد های نهایی ثابت درون کلاس Intent تعریف میشوند . جدول زیر تعدادی از رویدادی های مهم سیستمی را نشان میدهد : 

رویدادتوضیحات
android.intent.action.BATTERY_CHANGED
یک broadcast که شامل وضعیت شارژ ، میزان شارژ و دیگر اطلاعات مربوطه به باطری را داراست
android.intent.action.BATTERY_LOWوقتی که باطری کم و یا در حال تمام شدن هست 
android.intent.action.BATTERY_OKAYنشان میدهد در حال حاضر باطری اوکی هست یعنی در حال LOW نیست
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وقتی که سیستم ریبوت میشود

Broadcast اینتنت های اختصاصی 

اگر میخواهید برنامه ی اندرویدی شما ، Intent های اختصاصی خودش را تولید و ارسال کند بایستی برای ساخت و ارسال آن از متد sendBroadcast() درون اکتیویتی خود استفاده کنید . اگر شما از متد sendStickyBroadcast(Intent) استفاده کنید ، اینتنت شما sticky خواهد بود به این معنی اینتنت ارسالی شما ، تا زمانی که broadcast  کامل شود باقی می ماند. 

public void broadcastIntent(View view)
{ Intent intent = new Intent(); intent.setAction("ir.samenta.CUSTOM_INTENT"); sendBroadcast(intent);
}

این اینتنت که ایجاد کردیم (ir.samenta.CUSTOM_INTENT) میتواند درون شناسنامه ی سیستم به سادگی ثبت شود همانطور که در قسمت ثبت برودکست ها گفتیم : 

<application android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <receiver android:name="MyReceiver"> <intent-filter> <action android:name="ir.samenta.CUSTOM_INTENT"> </action> </intent-filter> </receiver>
</application>

مثال برای برودکست Intent اختصاصی :

در این مثال به شما نحوه ی دریافت برودکست اینتنت اختصاصی توسط BroadcastReceiver  را نشان خواهیم داد . قبلا شما با مفهوم Intent اختصاصی آشنا شدید همچنین BroadcastReceiver  ها برای دریافت پیام های سیستمی که از طریق اینتنت های سیستمی منتشر میشود نیز آشنا شدید ، خب اکنون بیایید مثال معروف خودمان که قبل تر ها نوشته بودیم با عنوان Hello World  را ویرایش کنیم : 

گامتوضیحات
۱شما باید از محیط Android Studio استفاده کنید و پروژه ای با نام My Application درون پکیجی با نام com.example.My Application قرار دهید 
۲MainActivity.java را برای افزودن متد broadcastIntent() ویرایش کنید 
۳برای تعریف Broadcast Reciver یک فایل جاواایی درون همین پکیج ایجاد کنید به نام MyReceiver.java
۴هر برنامه ی اندرویدی میتواند به  تعداد نامحدودی Intent های اختصاصی یا سیستمی داشته باشد بدون اینکه تداخلی به هم داشته باشند . هر intent ای که شما قصد دریافت آنها را دارید باید در فایل  AndroidManifest.xml با استفاده از تگ <receiver…/> معرفی شده باشد 
۵فایل res/layout/activity_main.xml را ویرایش کنید و یک دکمه برای دریافت برودکستِ اینتنت قرار دهید .
۶نیازی به ویرایش فایل string.xml  نیست
۷برنامه را روی ماشین مجازی نصب و اجرا کنید  (run)

 

کدهای زیر ، درون فایل src/com.example.My Application/MainActivity.java که پیش تر آنرا ویرایش کردیم . ما متد broadcastIntent() را جهت برودکست کردن Intent اضافه کرده ایم : 

package com.example.My Application;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.content.Intent;
import android.view.View;
public class MainActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.activity_main, menu); return true; } // broadcast a custom intent. public void broadcastIntent(View view){ Intent intent = new Intent(); intent.setAction("ir.samenta.CUSTOM_INTENT"); sendBroadcast(intent); }
}

کدهای زیر محتویات فایل src/com.example.My Application/MyReceiver.java هستند :

package com.example.My Application;
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(); }
}

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

<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.My Application" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="22" /> <application android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name=".MainActivity" android:label="@string/title_activity_main" > <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="ir.samenta.CUSTOM_INTENT"> </action> </intent-filter> </receiver> </application>
</manifest>

کدهای زیر محتویات فایل res/layout/activity_main.xml خواهد بود که دکمه ای را برای بردکست کردن Intent به آن اضافه کرده ایم : 

<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="Samenta.ir" 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>

محتویات فایل res/values/strings.xml نیز شامل کدهای زیر خواهد بود :

<resources> <string name="menu_settings">Settings</string> <string name="title_activity_main">My Application</string>
</resources>

برنامه را اجرا کنید و نتیجه را باید مانند شکل زیر باشد : 

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

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

و بعد از کلیک روی دکمه ی BROADCAST INTENT  :

broadcast 2 برودکست در اندروید Android

broadcast 2 برودکست در اندروید Android

 




درباره نویسنده

تیم سامنتا 75 نوشته در سامنتا دارد . مشاهده تمام نوشته های

دیدگاه ها


یک پاسخ به “broadcast reciver (برودکست رسیور ) در اندروید”

  1. abbasalim گفت:

    سلام آقا عباس

    بنده جنتا از مقاله هاتون رو دیدم فوق العاده است.

    اگه تمایل به  همکاری با سایت اسفندونه رو دارید لطفا با

    info@esfandune.ir

    تماس بگیرید

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *