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 دیدگاه