পাজেেলর চুড়ান্ত অংশ হচ্ছে BroadcastReceiver সাবক্লাস NetworkReceiver। যখন ডিভাইসের নেটওয়ার্ক কানেকশন পরিবর্তন করে, NetworkReceiver একশন CONNECTIVITY_ACTION কে থামিয়ে দেয়, নির্ধারণ করে দেয় যে নেটওয়ার্ক কানেকশনের স্ট্যাটাসের অবস্থান কি, এবং ফ্ল্যাগস wifiConnected এবং mobileConnected তদানুসারে ট্রু/ফলস এ সেট করে দেয়। পরিনতি হচ্ছে যে পরবর্তী সময়ে ইউজার অ্যাপে ফিরে আসবে, অ্যাপ শুধুমাত্র সর্বশেষ ফিড ডাউনলোড করবে এবং ডিসপ্লে আপডেট করে দেয় যদি NetworkActivity.refreshDisplay ট্রু তে সেট হয়।
একটি ব্রডকাস্ট রিসিভার (BroadcastReceiver) সেটআপ করা যা অপ্রয়োজনীয়ভাবে সিস্টেম রিসোর্সে একটি ড্রেইন কল করা হতে পারে। নমুনা অ্যাপলিকেশন onCreate()এর মধ্যে BroadcastReceiver NetworkReceiver রেজিস্টার করে, এবং onDestroy()এর মধ্যে এটা আনরেজিস্টার করতে পারেন। মেনিফেস্টের মধ্যে একটি < receiver> ডিক্লেয়ার করার চেয়েও এটা আরও অধিক লাইটওয়েট। যখন আপনি মেনিফেস্টে একটি < receiver> ডিক্লেয়ার করেন, এটা যে কোন সময় আপনার অ্যাপকে জাগিয়ে তুরতে পারে, এটাও হতে পারে আপনি এটাকে গত এক সপ্তাহ চালু করেননি। প্রধান একটিভিটির মধ্যে NetworkReceiver রেজিস্টার এবং আন রেজিস্টার করতে, আপনি নিশ্চিত করুন যে ইউজার অ্যাপ ত্যাগ করার পর অ্যাপ টি জেগে উঠবে না। আপনি যদি মেনিফেস্টে একটি < receiver> ডিক্লেয়ার করেন এবং আপনি সঠিকভাবে জানেন যে এটা কোথায় প্রয়োজন, আপনি যথাযথ কাজ হিসাবে এটাকে সক্রিয় এবং নিস্ক্রিয় করতে setComponentEnabledSetting()ব্যবহার করতে পারেন।
এটা হচ্ছে NetworkReceiver:
public class NetworkReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
ConnectivityManager conn = (ConnectivityManager)
context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = conn.getActiveNetworkInfo();
// Checks the user prefs and the network connection. Based on the result, decides whether
// to refresh the display or keep the current display.
// If the userpref is Wi-Fi only, checks to see if the device has a Wi-Fi connection.
if (WIFI.equals(sPref) && networkInfo != null && networkInfo.getType() == ConnectivityManager.TYPE_WIFI) {
// If device has its Wi-Fi connection, sets refreshDisplay
// to true. This causes the display to be refreshed when the user
// returns to the app.
refreshDisplay = true;
Toast.makeText(context, R.string.wifi_connected, Toast.LENGTH_SHORT).show();
// If the setting is ANY network and there is a network connection
// (which by process of elimination would be mobile), sets refreshDisplay to true.
} else if (ANY.equals(sPref) && networkInfo != null) {
refreshDisplay = true;
// Otherwise, the app can't download content--either because there is no network
// connection (mobile or Wi-Fi), or because the pref setting is WIFI, and there
// is no Wi-Fi connection.
// Sets refreshDisplay to false.
} else {
refreshDisplay = false;
Toast.makeText(context, R.string.lost_connection, Toast.LENGTH_SHORT).show();
}
}