2009-11-28 11 views
14

यह लांच मैं करना चाहते हैं क्या है:ANDROID: अगर वाईफ़ाई सक्षम और सक्रिय, एक आशय

=> अगर वाईफ़ाई सक्षम और सक्रिय, एक आशय का शुभारंभ (वास्तव में यह एक WebView कि इसकी सामग्री हो जाता है => वेब पर मेरे ऐप के निर्देश)

=> यदि नहीं, तो मैं एक और इरादा लॉन्च करूंगा ताकि मैं वेबव्यू नहीं दिखा सकूं "वेब पेज उपलब्ध नहीं है ... वेब पेज http://www.mywebsite.com पर हो सकता है अस्थायी रूप से बंद है या यह ले जाया गया है ... "

मैं

उपयोग करने के लिए शुरू में tought

अगर (wifi.isWifiEnabled())

लेकिन यह नहीं कहता कि वाईफ़ाई कनेक्शन सक्रिय है या नहीं। यह केवल इतना कहता है कि उपयोगकर्ता ने स्विच चालू कर दिया है। डिवाइस कनेक्ट हो सकता है या नहीं भी हो सकता है ... क्या यह सही है?

तो मैं का उपयोग करने की कोशिश की:

अगर (wifi.getConnectionInfo() getSSID() = अशक्त।!)

लेकिन मैंने देखा है कि यह एक स्ट्रिंग भले ही कनेक्शन टूट गया है या है रिटर्न अक्षम कर दिया गया है ...?

कैसे मैं तो क्या करना चाहिए?

wifi = (WifiManager)getSystemService(Context.WIFI_SERVICE); 
Intent intent_instructions; 

      if (wifi.getConnectionInfo().getSSID()!= null){ 
       Log.i("Hub", "WiFi is enabled AND active !"); 
       Log.i("Hub", "SSID = "+wifi.getConnectionInfo().getSSID()); 
       intent_instructions = new Intent(this, Instructions.class); 
      }else{ 
       Log.i("Hub", "NO WiFi"); 
       intent_instructions = new Intent(this, Instructions_No_WiFi.class); 
      } 
      this.startActivity(intent_instructions); 

वहाँ एक और अधिक सामान्य तरीके से करता है, तो डिवाइस इंटरनेट से कनेक्टिविटी है परीक्षण करने के लिए सिर्फ एक आशय शुरू करने से पहले है? वाईफ़ाई, 3 जी, आदि के माध्यम से यह हो ...

आपकी मदद के लिए अग्रिम धन्यवाद।

+0

WIFI_STAT_ENABLED का मतलब है कि वाईफ़ाई रेडियो चालू है। इसके साथ कोई संबंध नहीं है कि आप वास्तव में किसी एक्सेस पॉइंट से कनेक्ट हैं या नहीं। –

+1

वास्तव में, तो आप क्या सुझाव देंगे? – Hubert

+0

संभावित डुप्लिकेट [कैसे देखें कि वाईफाई एंड्रॉइड में कनेक्ट है या नहीं) (http://stackoverflow.com/questions/3841317/how-to-see-if-wifi-is-connected-in-android) –

उत्तर

20

आप कनेक्टिविटी के लिए जाँच करने के लिए निम्नलिखित कोड का उपयोग कर सकते हैं:

private static boolean isConnected(Context context) { 
    ConnectivityManager connectivityManager = (ConnectivityManager) 
     context.getSystemService(Context.CONNECTIVITY_SERVICE); 
    NetworkInfo networkInfo = null; 
    if (connectivityManager != null) { 
     networkInfo = 
      connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI); 
    } 
    return networkInfo == null ? false : networkInfo.isConnected(); 
} 

कृपया सुनिश्चित करें कि आप अपने प्रकट में android.net.conn.CONNECTIVITY_CHANGE आशय पंजीकृत कर लिया है, वरना बनाने के लिए, आपको कभी भी एक अधिसूचना प्राप्त करें कि आप ऑनलाइन हैं।

मैं पिछले कुछ दिनों से इस मुद्दे के साथ संघर्ष कर रहा हूं और मुझे अभी एहसास हुआ है कि मुझे CONNECTIVITY_CHANGE पंजीकृत करने की आवश्यकता है और न केवल WIFI_STATE_CHANGED।

+0

क्या इस विधि को नामित करने के लिए यह अधिक उपयुक्त/सही नहीं होगा 'कनेक्ट किया गया ViaWiFi'? –

5

आप इस प्रकार के रूप में यह कर सकते हैं:

@Override 
    public void onReceive(Context context, Intent intent) { 

    String action = intent.getAction(); 

     if(WifiManager.WIFI_STATE_CHANGED_ACTION.equals(action)){ 

     Log.d("WIFI", "WIFI has changed"); 
     int wifiState = intent.getIntExtra(WifiManager.EXTRA_WIFI_STATE, -1); 
     Log.d("WIFI", "WIFI State = " + wifiState); 
     setCurrentWifiState(wifiState); 

     } 

आप मिल जाएगा 0,1,2,3 जिनके अनुसार वाईफ़ाई, में है, इसलिए उदाहरण 2 कनेक्ट कर रहा है के लिए, आप में से बाकी की जांच कर सकते हैं पर निर्भर करता दस्तावेज

8

android.net.ConnectivityManager.getActiveNetworkInfo() आज़माएं: यदि यह null लौटाता है तो आपके पास कोई कनेक्शन नहीं है; अगर यह NetworkInfo ऑब्जेक्ट देता है, तो आप NetworkInfo.getState() के साथ कनेक्शन के राज्य की जांच कर सकते हैं, और यदि यह NetworkInfo.State.CONNECTED है तो आप कनेक्ट हैं, अन्यथा आप नहीं हैं।

+0

कोशिश करेगा धन्यवाद। एच – Hubert

+1

वास्तव में यह बहुत अच्छा काम करता है, धन्यवाद। – Hubert

2

अपने BroadcastReceiver वर्ग में:

@Override 
public void onReceive(Context context, Intent intent) { 
String action = intent.getAction(); 
    if (action.equals(WifiManager.SUPPLICANT_CONNECTION_CHANGE_ACTION)){     
     boolean connected = intent.getBooleanExtra(WifiManager.EXTRA_SUPPLICANT_CONNECTED, false); 
     if (connected){ 
      // start your service here 
     } 
    }     
} 

और अपने AndroidManifest.xml में सुनिश्चित करें कि आप android.net.wifi.supplicant.CONNECTION_CHANGE प्रसारण आशय के लिए रजिस्टर कर सकते हैं।

<intent-filter >  
    <action android:name="android.net.wifi.supplicant.CONNECTION_CHANGE" /> 
</intent-filter> 
0

isConnected() does not काम पूरी तरह से ठीक है, अनुसंधान कुछ और

final ConnectivityManager connMgr = (ConnectivityManager) 
     this.getSystemService(Context.CONNECTIVITY_SERVICE); 
final android.net.NetworkInfo wifi = 
    connMgr.getNetworkInfo(ConnectivityManager.TYPE_WIFI); 

    final android.net.NetworkInfo mobile = 
    connMgr.getNetworkInfo(ConnectivityManager.TYPE_MOBILE); 

    if(wifi.isAvailable() && wifi.getDetailedState() == DetailedState.CONNECTED){ 
     Toast.makeText(this, "Wifi" , Toast.LENGTH_LONG).show(); 
    } 
    else if(mobile.isAvailable() && mobile.getDetailedState() == DetailedState.CONNECTED){ 
     Toast.makeText(this, "Mobile 3G " , Toast.LENGTH_LONG).show(); 
    } 
    else 
    { 
     Toast.makeText(this, "No Network " , Toast.LENGTH_LONG).show(); 
    } 

इस कोड की जांच करता है, तो आप पर वाईफ़ाई के मामले में, WiFi या 3G या कुछ भी नहीं के साथ हैं, लेकिन शुद्ध या 3 जी से जुड़ा नहीं सिग्नल समस्या है, यह DetailedStates

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