گروه مقاله : اندروید
تاريخ انتشار : 1396/04/14 - 15:46
كد :7685

دسترسی به رخدادهای سیستمی گوشی

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 دیگری برای ردگیری اینتنت های  ساخته شده توسط سیستم مانند لود شدن ، تغییر تاریخ ، ضعیف بودن باتری و غیره را ایجاد کنید.

برای مشاوره رایگان جهت تولید نرم افزار اندرویدی تخصصی برای مشاغل مختلف و نرم افزار های کاربردی شخصی ما شرکت برنامه نویسی سارگون تماس حاصل فرمائید.

 

نظرات كاربران :