broadcast receiver در اندروید

منتشرشده توسط حامد قنبری در تاریخ

broadcast receiver (گیرنده) یکی از عناصر مهم سیستمAndroid است که به شما اجازه می دهد تا برای رویدادها یا کنش خاصی که در سیستم اندروید اتفاق می افتد واکنش های مناسبی را تدارک ببینید  در واقع  سیستم Android زمانی که رویدادهای مختلف رخ می دهد برای مثال هنگامی که سیستم بارگیری می شود یا دستگاه شروع به شارژ می کند، پخش و اجرا می شود. از این رو گیرنده های ثبت شده برای یک رویداد هنگامی که آن رویداد اتفاق می افتد اجرا می شود.

پیاده سازی

گیرنده را باید  از طریق فایل AndroidManifest.xml ثبت کرد.البته به جای ثبت در فایل AndroidManifest.xml ، می توانید یک گیرنده را به صورت پویا از طریق روش ()Context.registerReceiver  ثبت کنید.

باید کلاس اجرای کلاس گیرنده را به نوع  BroadcastReceiver را گسترش می دهد.اگر رویدادی که گیرنده پخش ثبت شده اتفاق بیافتد، روش ()onReceive  گیرنده توسط سیستم Android نامیده می شود.

پردازش ناهمگام

قبل از API 11، شما  نمی توانستیدعملیات غیر همزمان را در روش ()onReceive  انجام دهید، زیرا هنگامی که روش ()onReceive  به پایان می رسید، سیستم Android فقط مجاز به پردازش آن مولفه می شد. در این حالت اگر شما می خواستید عملیات بالقوه طولانی انجام دهید،می بایست باید به جای آن یک سرویس را پیاده سازی کنید.

این در حالی است که از Android API 11 به بعد شما می توانید از متد  ()goAsync استفاده کنید . این متد آبجکتی از نوع PendingResult را فراخوانی می کند که می تواند سیستم را تا زمانی که شما ()PendingResult.finish  را فراخوانی نکرده اید ادامه یابد.  از این رو با استفاده از این گزینه می توانید یک پردازش ناهمزمان را در گیرنده انجام دهید.

به منظور درک بیشتر موضوع بهتر است مثالی در این خصوص ارائه کنیم . امید است که این مثال در امر یادگیری شما موثر بوده باشد.

اگر در داخل برنامه اکلیپس یا اندروید استودیو قرار دارید پروژه جدیدی را  ایجاد کنید

اکلیپس :File ⇒ New Android ⇒ Application Project

اندروید استودیو :File ⇒ New  ⇒ New Project

اما اگر هنوز برنامه خود را باز نکرده اید یکی از برنامه های فوق را باز نموده و بعد از تعیین مشخصات(نامگذاری) ، تعیین حداقل sdk  و نوع اکتیویتی (blank  یا Empty) ، نام اکتیویتی ابتدایی و اصلی خود  را همان MainActivity قرار دهید. بعد از لود کامل برنامه ، در مسیر 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">




    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/sendbroadcast"
        android:text="ارسال اینتت به برادکاست"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="51dp" />

</RelativeLayout>

سپس کلاس اصلی پروژه یعنی MainActivity  را باز کرده و کدهای زیر را در آن قرار دهید:

package examples.psrd.ir.myapplication;

import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

public class MainActivity extends Activity {

    private Button send;
    private BroadcastReceiver br;

    /** Called when the activity is first created. */
   @Override

   public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);
       send = (Button)findViewById(R.id.sendbroadcast);
       send.setOnClickListener(new View.OnClickListener() {
           @Override
           public void onClick(View v) {
               br = new BroadcastReceiver() {

                   @Override
                   public void onReceive(Context context, Intent intent) {
                       // TODO Auto-generated method stub
                       Log.i("Enter", "Enters here");
                       Toast.makeText(context, "App Installed!!!!.", Toast.LENGTH_LONG).show();
                   }
               };
               IntentFilter intentFilter = new IntentFilter();
               intentFilter.addAction(Intent.ACTION_PACKAGE_ADDED);
               intentFilter.addAction(Intent.ACTION_PACKAGE_INSTALL);
               registerReceiver(br, intentFilter);
           }
       });
   }



}

در نهایت فایل AndroidManfest.xml را باز کرده و رسیور را برای برنامه تعریف می کنیم:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="examples.psrd.ir.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"
            android:label="@string/app_name"
            android:theme="@style/AppTheme.NoActionBar">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>

            <receiver android:name=".MyReceiver">
                <intent-filter>
                    <action android:name="android.intent.action.PACKAGE_INSTALL" />
                    <action android:name="android.intent.action.PACKAGE_ADDED" />
                    <data android:scheme="package"/>
                </intent-filter>
            </receiver>
        </activity>
    </application>

</manifest>

 

 


0 دیدگاه

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

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

-- بارگیری کد امنیتی --