- آموزش برنامه نویسی Android قسمت اول: تاریخچه سیستم عامل اندروید
- آموزش برنامه نویسی Android قسمت دوم: آشنایی با اصطلاحات و نصب محیط توسعه
- آموزش برنامه نویسی Android قسمت سوم: اجرای اولین برنامه Hello World
- آموزش برنامه نویسی Android قسمت چهارم: شروع طراحی رابط کاربری
- آموزش برنامه نویسی Android قسمت پنجم: طراحی LinearLayout
- آموزش برنامه نویسی Android قسمت ششم: طراحی صفحه یک ماشین حساب
- آموزش برنامه نویسی Android قسمت هفتم: طراحی RelativeLayout
- آموزش برنامه نویسی Android قسمت هشتم: ساخت لیست با ListView
- آموزش برنامه نویسی Android قسمت نهم: شروع آموزش زبان Java
- آموزش برنامه نویسی Android قسمت دهم: محاسبات ریاضی و شرط ها
- آموزش برنامه نویسی Android قسمت یازدهم: حلقه ها و آرایه ها
- آموزش برنامه نویسی Android قسمت دوازدهم: شی گرایی بخش اول
- آموزش برنامه نویسی Android قسمت سیزدهم: شی گرایی بخش دوم
- آموزش برنامه نویسی Android قسمت چهاردهم: پروژه نرم افزار مبدل واحد
- آموزش برنامه نویسی Android قسمت پانزدهم: Activity ها را بیشتر بشناسید
- آموزش برنامه نویسی Android قسمت شانزدهم: چرخه حیات اکتیویتی
- آموزش برنامه نویسی Android قسمت هفدهم: Fragment ها
- آموزش برنامه نویسی Android قسمت هجدهم: ساختار داده ها و Data Model ها
- آموزش برنامه نویسی Android قسمت نوزدهم: Shared Preferences
- آموزش برنامه نویسی Android قسمت بیستم: ارتباط با سرور برای دریافت اطلاعات بخش اول
- آموزش برنامه نویسی Android قسمت بیست و یکم: ارتباط با سرور برای دریافت اطلاعات بخش دوم
- آموزش برنامه نویسی Android قسمت بیست و دوم: ارسال اطلاعات به سرور
- آموزش برنامه نویسی Android قسمت بیست و سوم: اندروید و پایگاه داده بخش اول
- آموزش برنامه نویسی Android قسمت بیست و چهارم: اندروید و پایگاه داده بخش دوم
- آموزش برنامه نویسی Android قسمت بیست و پنجم: BroadcastReceiver
مبحث BroadcastReceiver برای برنامه نویسی نرم افزارهای حرفهای و نرم افزارهای چت و ارتباطات از اهمیت بالایی برخوردار است.
BroadcastReceiver یک دریافت کننده وضعیت از سمت سیستم عامل است. مثلا فرض کنید میخواهید به محض قطع شدن اینترنت به کاربر خود پیام عدم ارتباط با اینترنت را نمایش دهید، یا این که به محض کم شدن سطح باتری به کاربر پیامی نشان دهید که باتری در حال تمام شدن است.
وضعیتهایی که میتوان آنها را از سیستم عامل دریافت کرد بسیار زیاد هستند ولی نکتهای که باید بدانید این است که برای دریافت وضعیت مورد نظر باید در سیستم عامل ثبت نام کنید.
برای مثال قصد داریم یک BroadcastReceiver را برای بررسی وضعیت اینترنت ایجاد میکنیم.
پیش از شروع کار در Manifest دسترسی بررسی وضعیت شبکه را به برنامه خود میدهیم:
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
کلاس MainActivity را به شکل زیر ویرایش میکنیم:
public class MainActivity extends AppCompatActivity {
private CheckNetwork checkNetwork;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
protected void onStart() {
super.onStart();
checkNetwork = new CheckNetwork();
registerReceiver(checkNetwork, new IntentFilter("android.net.conn.CONNECTIVITY_CHANGE"));
}
@Override
protected void onStop() {
unregisterReceiver(checkNetwork);
super.onStop();
}
private class CheckNetwork extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();
boolean isConnected = networkInfo != null && networkInfo.isConnectedOrConnecting();
if(isConnected){
Toast.makeText(MainActivity.this, "اینترنت وصل است", Toast.LENGTH_SHORT).show();
}else{
Toast.makeText(MainActivity.this, "اینترنت قطع است", Toast.LENGTH_SHORT).show();
}
}
}
}
سطر 23: یک کلاس به نام CheckNetwork را از BroadcastReceiver ارث بری یا extends میکنیم. یک متد ضروری برای این کلاس وجود دارد به نام onReceive که باید آن را اضافه کنیم.
سطر 27: یک شی از روی ConnectivityManager مانند فوق ایجاد میکنیم.
سطر 28: متد getActiveNetworkInfo را از شی connectivityManager در خواست و درون networkInfo که از نوع NetworkInfo است ذخیره میکنیم.
سطر 29: مقادیر مقابل مساوی دو شرط هستند که بدلیل موجود && در صورتی isConnected را برابر true قرار میدهند که هم networkInfo برابر null نباشد و هم متد isConnectedOrConnecting شی networkInfo برابر true باشد.
سطرهای 31 تا 35: در صورت درست بودن شرط isConnected پیام "اینترنت وصل است" و در صورت غلط بودن شرط isConnected پیام "اینترنت قطع است" نمایش داده میشود.
سطر 3: یک شی به نام checkNetwork از روی متد CheckNetwork ایجاد میکنیم تا در متدهای دیگر بتوانیم از این متد استفاده کنیم.
سطر 11: متد onStart که یکی از مراحل حیات اکتیویتی MainActivity است را ایجاد میکنیم. این متد وقتی اکتیویتی اجرا و شروع به کار میکند اجرا خواهد شد.
سطر 13: درون متغیر checkNetwork شی CheckNetwork را قرار دادیم.
سطر 14: در این سطر با registerReceiver این BroadcastReceiver را در سیستم عامل ثبت نام میکنیم. ورودیهای این متد یکی checkNetwork و دیگری IntentFilter با مقدار android.net.conn.CONNECTIVITY_CHANGE است. این مقدار مخصوص دریافت وضعیت تغییرات شبکه است.
سطر 18: متد onStop نیز یکی از مراحل حیات اکتیویتی MainActivity است که آن را در این مکان ایجاد کردیم. متد onStop پس از توقف فعالیت اکتیویتی فراخوانده میشود.
سطر 19: متد unregisterReceiver برای حذف انتظار BroadcastReceiver از سیستم عامل استفاده میشود.
عملکرد این بخش مانند زیر است:
در هنگام اجرای برنامه پیام "اینترنت وصل است" نمایش داده میشود، به محض بستن WIFI پیام "اینترنت قطع است" نمایش داده میشود، و با وصل مجدد دوباره پیام "اینترنت وصل است" نمایش داده میشود.
در مثال بالا BroadcastReceiver را در سطح Activity ایجاد کردیم یعنی این BroadcastReceiver تنها در حالت حیات MainActivity فعال است و در صورت بسته شدن نرم افزار دیگر عمل نمیکند.
می توان BroadcastReceiver را به گونهای تنظیم کرد که به صرف نصب بودن نرم افزار در گوشی اندروید، گوشی تان وضعیتهای مختلف را دریافت کند.
مثلا فرض کنید میخواهید نرم افزاری را پیاده سازی کنید که به محض قطع شدن اینترنت عملیات خاصی را انجام دهد.
یا بر فرض مثال به محض وصل شدن اینترنت نرم افزار بدون این که باز شود به سرور متصل شده و دادههای جدید را دریافت کند.
برای انجام عملیات خاص باید BroadcastReceiver را در سطح Mainfest پروژه خود قرار دهید.
یک تگ جدید در Manifest خود به نام resiver مانند زیر ایجاد کنید:
<receiver android:name=".SampleBroadCastReceiver">
<intent-filter>
<action android:name="android.net.wifi.WIFI_STATE_CHANGED" />
</intent-filter>
</receiver>
در سطر اول و در مقابل name نام کلاسی که حین دریافت BroadcastReceiver باید فعال شود را ذکر میکنیم.
در سطرهای 2 تا 4 یک intent-filter و action ایجاد میکنیم.
در سطر 3 و در تگ action و در name نام حالتی که قصد دارید وضعیت آن را رصد کنید را ذکر میکنید.
کلاس SampleBroadCastReceiver را مانند زیر ایجاد کنید:
public class SampleBroadCastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Log.i("networkStatus", "وضعیت شبکه تغییر کرده است");
}
}
اگر برنامه فوق را در ماشین مجازی اجرا کنید خواهید دید لاگی با نام networkStatus در صورت تغییر وضعیت شبکه WIFI در Android Monitor ظاهر میشود، و فرقی نمیکند که نرم افزار شما باز باشد یا بسته.
البته حالتهایی که میتوان آنها را دریافت کرد بسیار زیاد هستند و تقریبا برای هر حالتی میتوانید یک BroadcastReceiver یافت. لینک این حالت را در این جا ببینید.
ممنون از آموزش جالبتون لطفا ادامه بدید...
منتظر آموزش های بعدیتون هستیم.