2012-09-24 5 views
5

संभव डुप्लिकेट:
How can I monitor the network connection status in Android?कुशल दृष्टिकोण लगातार कि क्या इंटरनेट कनेक्शन की जांच करने के लिए एंड्रॉयड में उपलब्ध है

मैं यह जांच इंटरनेट से जुड़ा हुआ है या नहीं, और पाठ क्षेत्र अद्यतन करने की आवश्यकता उचित संदेश के अनुसार तदनुसार। अब अगर मैं asynctask बनाता हूं तो यह एक बार निष्पादित होगा और जो मैं चाहता हूं उसे रोक नहीं सकता। मैं हर पल निरंतर जांचना चाहता हूं और स्पष्ट रूप से यह मुख्य धागे पर नहीं होना चाहिए। इसलिए सेवा या तो एक अच्छा विकल्प नहीं होगा। क्या कोई मेरी मदद कर सकता है इसे संभालने के लिए सबसे अच्छा और कुशल दृष्टिकोण क्या है। धन्यवाद

+2

क्यों

public boolean isNetworkConnected() { ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo netInfo = cm.getActiveNetworkInfo(); if (netInfo != null && netInfo.isConnectedOrConnecting()) { return true; } return false; } 

सुनिश्चित करें कि आपके एप्लिकेशन अनुरोध इस अनुमति बनाने के लिए, क्या आपको ऐसा करने की ज़रूरत है? –

उत्तर

7

इसे रिसीवर के साथ करें। आपको नेटवर्क राज्य परिवर्तन के बारे में अधिसूचित किया जा सकता है। उदाहरण के लिए, अपने onResume() में

private BroadcastReceiver networkReceiver = new BroadcastReceiver { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
    super.onReceive(context, intent); 
    if(intent.getExtras()!=null) { 
     NetworkInfo ni=(NetworkInfo) intent.getExtras().get(ConnectivityManager.EXTRA_NETWORK_INFO); 
     if(ni!=null && ni.getState()==NetworkInfo.State.CONNECTED) { 
      // we're connected 
     } 
    } 
    // we're not connected 
    } 
} 

रजिस्टर इस, और onPause() पर अपंजीकृत।

@Override 
protected void onPause() { 
    super.onPause(); 
    unregisterReceiver(networkReceiver); 
} 

@Override 
protected void onResume() { 
    super.onResume(); 
    IntentFilter filter = new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION); 
    registerReceiver(networkReceiver, filter); 
} 

इसके अतिरिक्त, प्रारंभिक अवस्था प्राप्त करने के लिए करने से पहले अपने रिसीवर दर्ज किया गया है, अपने onResume() विधि में इस फोन,

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
+0

जब मैं अपना वाईफाई चालू और बंद कर रहा हूं प्रसारण रिसीवर काम नहीं कर रहा है। ऑन्रेस्यूम कोड सही काम कर रहा है लेकिन प्रसारण रिसीवर मुझे कोई बदलाव नहीं दे रहा है। कोई मदद ? – Vyper

+0

मैंने अभी गलती का पता लगाया धन्यवाद! – Vyper

+0

@jeffrey हे, मैं आपके कोड का उपयोग कर इंटरनेट कनेक्शन की जांच करता हूं। लेकिन त्रुटि में त्रुटि देना() विधि .. रजिस्टर रिसीवर (नेटवर्क रिसीवर); इस विधि में रजिस्टर रिसीवर 2 पैरामीटर के लिए पूछता है। इरादा फ़िल्टर के लिए प्रसारण रिसीवर ऑब्जेक्ट और @ के लिए 1। मैं 2 के उत्तीर्ण हो? – Google

2

यदि नेटवर्क कनेक्शन है तो आपको लगातार ओएस से पूछने की आवश्यकता नहीं है। बस जांचें कि onResume() में कोई कनेक्शन मौजूद है या फिर कनेक्शन बदलने पर CONNECTIVITY_ACTION कनेक्टिविटी प्रबंधक से इरादा सुनने के लिए ब्रॉडकास्ट रिसीवर का उपयोग करें और EXTRA_NO_CONNECTIVITY देखें।