2012-08-28 18 views
25

मैं एंड्रॉइड ऐप पर काम कर रहा हूं जो लगातार इंटरनेट से जुड़े रहेंगे। यदि इंटरनेट नीचे है तो इसे उपयोगकर्ता को उचित संदेश देना चाहिए।इंटरनेट श्रोता एंड्रॉइड उदाहरण

वहाँ इंटरनेट श्रोता की तरह किसी भी बात है? या इस घटना को कार्यान्वित करने के लिए कि जब कभी भी इंटरनेट कनेक्शन उपलब्ध नहीं होता है तो उसे चेतावनी देना चाहिए।

+0

यह अन्य क्यू एंड ए में मदद कर सकता: http://stackoverflow.com/questions/1560788/how-to-check-internet-access-on-android-inetaddress-never-timeouts – helios

+0

http: // डेवलपर .android.com/प्रशिक्षण/निगरानी-डिवाइस राज्य/कनेक्टिविटी-monitoring.html यहाँ –

उत्तर

48

कि के लिए एक प्रसारण रिसीवर बनाएँ और मैनिफ़ेस्ट फ़ाइल में पंजीकृत करें।

सबसे पहले एक नया वर्ग NetworkStateReceiver बना सकते हैं और BroadcastReceiver का विस्तार। इस अनुमति

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

संपादित

इस कोड को सिर्फ

<receiver android:name=".NetworkStateReceiver"> 
    <intent-filter> 
     <action android:name="android.net.conn.CONNECTIVITY_CHANGE" /> 
    </intent-filter> 
</receiver> 

और जोड़ें:

public class NetworkStateReceiver extends BroadcastReceiver { 
    public void onReceive(Context context, Intent intent) { 
    Log.d("app","Network connectivity change"); 
    if(intent.getExtras()!=null) { 
     NetworkInfo ni=(NetworkInfo) intent.getExtras().get(ConnectivityManager.EXTRA_NETWORK_INFO); 
     if(ni!=null && ni.getState()==NetworkInfo.State.CONNECTED) { 
      Log.i("app","Network "+ni.getTypeName()+" connected"); 
     } 
    } 
    if(intent.getExtras().getBoolean(ConnectivityManager.EXTRA_NO_CONNECTIVITY,Boolean.FALSE)) { 
      Log.d("app","There's no network connectivity"); 
    } 
    } 
} 

इस कोड को अपने AndroidManifest.xml में "आवेदन" तत्व के तहत रखो कनेक्टिविटी परिवर्तन का पता लगाता है लेकिन यह नहीं बता सकता कि क्या जिस नेटवर्क से जुड़ा हुआ है वह इंटरनेट का उपयोग है। चिराग रावल से

public static boolean hasActiveInternetConnection(Context context) { 
    if (isNetworkAvailable(context)) { 
     try { 
      HttpURLConnection urlc = (HttpURLConnection) (new URL("http://www.google.com").openConnection()); 
      urlc.setRequestProperty("User-Agent", "Test"); 
      urlc.setRequestProperty("Connection", "close"); 
      urlc.setConnectTimeout(1500); 
      urlc.connect(); 
      return (urlc.getResponseCode() == 200); 
     } catch (IOException e) { 
     Log.e(LOG_TAG, "Error checking internet connection", e); 
     } 
    } else { 
    Log.d(LOG_TAG, "No network available!"); 
    } 
    return false; 
} 
+0

नमूने: http://stackoverflow.com/questions/6176570/checking-the-networking-connectivity-using-broadcastreceiver-in-android – helios

+0

मैंने इस समाधान की कोशिश की है लेकिन यह दोस्त काम नहीं कर रहा है। super.onReceive (संदर्भ, इरादा) पर भी त्रुटि देता है; –

+0

त्रुटि क्या है? –

1

कोड निश्चित रूप से काम करता है ऊपर - कि जाँच करने के लिए इस विधि का प्रयोग करें। समस्या यह है कि जब श्रोताओं को अग्रभूमि में नहीं चल रहा है तब भी श्रोता को बुलाया जाएगा।

आईएमएचओ, बेहतर दृष्टिकोण 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; 
     } 
    } 
} 

जब ऑफ़लाइन किया जा रहा है यदि आपके ऐप शुरू करने, टोस्ट संदेश दिखाई देगा; अन्यथा यह तब होता है जब कनेक्शन खोना/पुनः स्थापित करना होता है।

संबंधित मुद्दे