Broadcast Receivers ها به شما کمک میکنند تا هنگام رخداد هایی مانند ورود تماس، روشن شدن صفحه ،آلارم و غیره دستوراتی را اعمال کنید.
دسترسی به رخدادهای گوشی
Broadcast Receivers اندروید
Broadcast Receivers پاسخگوی پیام های از سایر نرم افزار ها یا از خود سیستم است. این پیام ها گاهی به نام رخداد یا اینتنت ( events or intents ) نامیده میشود. برای مثال نرم افزار میتواند Broadcast را آغاز کند، تا سایر نرم افزار های نصب شده، بدانند که داده های دانلود شده برای انها هم قابل استفاده است. بنابراین Broadcast Receivers ارتباطات اینچنینی را ردگیری و اقدام مناسب را نسبت به آنها انجام خواهد داد.
دو گام زیر برای ایجاد متد BroadcastReceiver برای broadcasted intents سیستم است.
- ایجاد متد Broadcast Receiver.
- فعال کردن متد 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
یک نرم افزار به یک رخداد خاص specific broadcast با ثبت یک broadcast receiver در فایل AndroidManifest.xml عکس العمل نشان خواهد داد. در نظر داشته باشید که ما MyReceiver را برای سیستم ساخت رویداد ACTION_BOOT_COMPLETED ثبت خواهیم کرد ، سیستمی که توسط اندروید به هنگام کامل شدن پردازش بارگذاری از سیستم خارج خواهد شد.
BROADCAST-RECEIVER :
<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>
کدهای بالا باعث میشود که هرزمان که دستگاه اندرویدی شما بارگزاری شد ، توسط BroadcastReceiver MyReceiver متوقف شده و implemented logic در داخل متد onReceive() پردازش خواهد شد.
چندین سیستم وجود دارد که رخداد های ایجاد می کند که بعنوان فیلدهای final static در کلاس Intent شناخته میشود. جدول زیر لیست رخداد های مهم سیستم را به نمایش در آورده ا ست.
شماره
|
رویدادهای ثابت و توضیحات
|
1
|
android.intent.action.BATTERY_CHANGED
Sticky broadcast: نمایش وضعیت شارش شامل سطح شارژ و دیگر اطلاعات باتری.
|
2
|
android.intent.action.BATTERY_LOW
نشاندهنده وضعیت ضعیف بودن باتری روی دستگاه
|
3
|
android.intent.action.BATTERY_OKAY
نمایش دهنده وضعیت مناسب باتری بعد از اینکه از حالت باتری ضعیف خارج شدیم.
|
4
|
android.intent.action.BOOT_COMPLETED
این کلاس یکبار در هنگام پایان بارگذاری سیستم به نمایش در خواهد آمد.
|
5
|
android.intent.action.BUG_REPORT
نمایش فعالیت برای گزارش یک باگ
|
6
|
android.intent.action.CALL
ایجاد تماس با کسی که داده ها مشخص کرده اند.
|
7
|
android.intent.action.CALL_BUTTON
کاربر روی دکمه تماس کلیک کرده و یا به سایر نرم افزار های تماس رفته و یک تماس ایجاد می کند.
|
8
|
android.intent.action.DATE_CHANGED
تاریخ تغییر کرده است.
|
9
|
android.intent.action.REBOOT
دستگاه راهندازی مجدد شده است
|
Broadcasting Custom Intents:
اگر میخواهید که نرم افزار شما custom intents را ایجاد و ارسال کند، شما باید این intents را با متد sendBroadcast() در داخل کلاس اکتیویتی خود ایجاد کنید. اگر شما از متد sendStickyBroadcast(Intent) استفاده کنید . intents ایجاد شده شما بصورت sticky یا همواره در حال نمایش خواهد بود . این بدان معنی است که intents ایجاد و ارسال شده توسط شما بعد از پایان نمایش نرم افزار همچنان بر روی صفحه ماندگار خواهد بود.
public void broadcastIntent(View view) {
Intent intent = new Intent();
intent.setAction("com.tutorialspoint.CUSTOM_INTENT");
sendBroadcast(intent);
}
این کد com.tutorialspoint.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="com.tutorialspoint.CUSTOM_INTENT">
</action>
</intent-filter>
</receiver>
</application>
مثال
در این مثال توضیح خواهید داد که چگونه BroadcastReceiver را برای ردگیری custom intent ایجاد کنیم. از آنجا که شما با واژه custom intent آشنا هستید، شما میتوانید نرم افزار خود را برای ممانعت کردن از اجرای Intent های سیستمی برنامه نویسی کنید. بنابراین در گام های بعد ما بر اساس آموزش های جدید نرم افزار سلام دنیای را تغییر خواهیم داد.
گام
|
توضیحات
|
1
|
شما از نرم افزار اندروید استودیو برای ایجاد یک نرم افزار اندرویدی استفاده کرده و نام آن را My Application قرار داده و آن را در packagecom.example.tutorialspoint7.myapplication قرار میدهید این گام ها در مثال سلام دنیا توضیح داده شده اند.
|
2
|
تغییر فایل فعالیت های اصلی MainActivity.java برای افزودن متد broadcastIntent()
|
3
|
ایجاد یک فایل جدید جاوا به نام MyReceiver.java در زیر پکیج com.example.tutorialspoint7.myapplication برای معرفی BroadcastReceiver
|
4
|
یک نرم افزار میتوانید یک یا تعداد بیشتری intents سیستمی و سفارشی را بدون محدودیت پردازش کند . هر intents که شما میخواهید ردگیری شود باید در فایل AndroidManifest.xml با استفاده از تگ <receiver.../> تعریف شود.
|
5
|
تغییر محتوای پیشفرض فایل res/layout/activity_main.xml با افزودن یک دکمه برای نمایش intent
|
6
|
نیازی به تغییر فایل رشته ای نیست، اندروید استودیو خود مراقب فایل string.xml خواهد بود.
|
7
|
اجرای نرم افزار برای اتصال به شبیه ساز اندروید و تائید نتایج تغییرات اعمال شده در نرم افزار
|
کدهای زیر محتوای تغییر یافته فعالیت های اصلی فایل MainActivity.java میباشند. این فایل میتواند حاوی هرکدام از متد های ساختار چرخه حیات باشد . ما متد broadcastIntent() را برای broadcast یک custom intent اضافه کرده ایم.
package com.example.tutorialspoint7.myapplication;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
public class MainActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
// broadcast a custom intent.
public void broadcastIntent(View view){
Intent intent = new Intent();
intent.setAction("com.tutorialspoint.CUSTOM_INTENT"); sendBroadcast(intent);
}
}
کد های زیر مربوط به محتوای تغییر یافته فایل MyReceiver.java میباشند:
package com.example.tutorialspoint7.myapplication;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.widget.Toast;
/**
* Created by TutorialsPoint7 on 8/23/2016.
*/
public class MyReceiver extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context, "Intent Detected.", Toast.LENGTH_LONG).show();
}
}
کد های زیر محتوای تغییر یافته فایل AndroidManifest.xml هستند که تگ <receiver.../> به آن اضافه شده تا شامل سرویس های ما باشد.
<?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 میباشد که دکمه نمایش محتوای سفارشی ما به آن اضافه شده است:
<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 در نوار ابزار کلیک کنید . اندروید استودیو نرم افزار شما را روی شبیه ساز نصب کرده و اگر همه چیز درست پیشرفت پنجره زیر به نمایش در خواهد آمد:
حالا برای پخش custom intent خود روی دکمه Broadcast Intent کلیک کنید این کار اینتنت سفارشی ما را به نمایش میگذارد com.tutorialspoint.CUSTOM_INTENT انتنتی که با BroadcastReceiver فعال شده ما ردگیری میشود . با توجه به MyReceiver و منطق اجرا این اینتنت در زیر پنجره شبیه ساز درست مانند تصویر زیر به نمایش درخواهد آمد:
حالا سعی کنید که سیستم های BroadcastReceiver دیگری برای ردگیری اینتنت های ساخته شده توسط سیستم مانند لود شدن ، تغییر تاریخ ، ضعیف بودن باتری و غیره را ایجاد کنید.
برای مشاوره رایگان جهت تولید نرم افزار اندرویدی تخصصی برای مشاغل مختلف و نرم افزار های کاربردی شخصی ما شرکت برنامه نویسی سارگون تماس حاصل فرمائید.