कोड निश्चित रूप से काम करता है ऊपर - कि जाँच करने के लिए इस विधि का प्रयोग करें। समस्या यह है कि जब श्रोताओं को अग्रभूमि में नहीं चल रहा है तब भी श्रोता को बुलाया जाएगा।
आईएमएचओ, बेहतर दृष्टिकोण onResume()
/onPause()
में अपने सभी आवेदन गतिविधियों के तरीकों को रिसीवर को पंजीकृत/अनधिकृत करना है। जाहिर है
private final NetworkStateReceiver stateReceiver = new NetworkStateReceiver();
@Override
protected void onResume() {
super.onResume();
IntentFilter filter = new IntentFilter();
filter.addAction("android.net.conn.CONNECTIVITY_CHANGE");
registerReceiver(stateReceiver, filter);
}
@Override
protected void onPause() {
super.onPause();
unregisterReceiver(stateReceiver);
}
, AndroidManifest.xml
फ़ाइल से पंजीकरण को दूर: इस कोड यह करना चाहिए।
इस समाधान का उपयोग करना, रिसीवर भी जब आपके आवेदन की गतिविधियों के बीच स्विच (यह मानते हुए आप उन्हें बंद कर रहे हैं) के नाम से जाना जाएगा। इस तरह के एक मामले में, नीचे दिए गए उदाहरण (online
कहा जाता है) में की तरह एक स्थिर ध्वज (अपने सभी गतिविधियों के बीच साझा किया जा रहा है) का उपयोग करें:
public class NetworkStateReceiver extends BroadcastReceiver {
private static boolean online = true; // we expect the app being online when starting
public static final String TAG = NetworkStateReceiver.class.getSimpleName();
public void onReceive(Context context, Intent intent) {
Log.d(TAG,"Network connectivity change");
ConnectivityManager manager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo ni = manager.getActiveNetworkInfo();
if (ni == null || ni.getState() != NetworkInfo.State.CONNECTED) {
Log.d(TAG,"There's no network connectivity");
if (online) // don't show the message if already offline
Toast.makeText(context, R.string.noInternet, Toast.LENGTH_SHORT).show();
online = false;
} else {
Log.d(TAG,"Network "+ni.getTypeName()+" connected");
if (!online) // don't show the message if already online
Toast.makeText(context, R.string.backOnline, Toast.LENGTH_SHORT).show();
online = true;
}
}
}
जब ऑफ़लाइन किया जा रहा है यदि आपके ऐप शुरू करने, टोस्ट संदेश दिखाई देगा; अन्यथा यह तब होता है जब कनेक्शन खोना/पुनः स्थापित करना होता है।
यह अन्य क्यू एंड ए में मदद कर सकता: http://stackoverflow.com/questions/1560788/how-to-check-internet-access-on-android-inetaddress-never-timeouts – helios
http: // डेवलपर .android.com/प्रशिक्षण/निगरानी-डिवाइस राज्य/कनेक्टिविटी-monitoring.html यहाँ –