2012-02-19 12 views
26

मुझे यह पता लगाने की आवश्यकता है कि मेरे पास एक विशिष्ट वाईफ़ाई नेटवर्क पर नेटवर्क कनेक्टिविटी है।एंड्रॉइड वाईफ़ाई जब विशिष्ट वाईफ़ाई कनेक्शन उपलब्ध है तो पता लगाने के लिए

उदाहरण के लिए: जैसे ही आप अपने घर में जाते हैं, और आपका फोन आपके घर वाईफाई नेटवर्क को उठाता है, मुझे एक अधिसूचना चाहिए जो कहती है "आप अपने घर नेटवर्क पर नहीं हैं, क्या आप घर से कनेक्ट करना चाहते हैं ? " लेकिन मैं ऐसा करना चाहता हूं जब मैं अपने विशिष्ट घर पर हूं।

मुझे क्या सुनना चाहिए और यह सुनिश्चित करने के लिए मुझे क्या परीक्षण करना चाहिए कि यह मेरा विशिष्ट घर नेटवर्क है, न कि कोई अन्य नेटवर्क?

+0

इस [काम कर कोड का स्निपेट] (http://stackoverflow.com/a/15976165/1166727) जुड़ा वाईफाई, उपकरण की "दृष्टि" में डिवाइस और उपलब्ध नेटवर्क पर संग्रहीत नेटवर्क से सब कुछ निकालता है। –

उत्तर

27

आप पता लगाने के लिए कि वाईफाई नेटवर्क से बदल गया है BroadcastReceiver उपयोग कर सकते हैं:

BroadcastReceiver broadcastReceiver = new WifiBroadcastReceiver(); 

IntentFilter intentFilter = new IntentFilter(); 
intentFilter.addAction(WifiManager.SUPPLICANT_STATE_CHANGED_ACTION); 
context.registerReceiver(broadcastReceiver, intentFilter); 

ब्रॉडकास्ट रिसीवर इस तरह दिख सकता है। और विशिष्ट मैक पते की जांच करने के लिए चेककनेक्टेड ToDesiredWifi() विधि bellow देखें।

public class WifiBroadcastReceiver extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     String action = intent.getAction(); 
     if (WifiManager.SUPPLICANT_STATE_CHANGED_ACTION .equals(action)) { 
      SupplicantState state = intent.getParcelableExtra(WifiManager.EXTRA_NEW_STATE); 
      if (SupplicantState.isValidState(state) 
        && state == SupplicantState.COMPLETED) { 

       boolean connected = checkConnectedToDesiredWifi(); 
      } 
     } 
    } 

    /** Detect you are connected to a specific network. */ 
    private boolean checkConnectedToDesiredWifi() { 
     boolean connected = false; 

     String desiredMacAddress = "router mac address"; 

     WifiManager wifiManager = 
      (WifiManager) context.getSystemService(Context.WIFI_SERVICE); 

     WifiInfo wifi = wifiManager.getConnectionInfo(); 
     if (wifi != null) { 
      // get current router Mac address 
      String bssid = wifi.getBSSID(); 
      connected = desiredMacAddress.equals(bssid); 
     } 

     return connected; 
    } 
} 
12

जब तक हम आपको कोड की तरह कुछ भी नहीं हैं, मुफ्त सेवा के लिए, मैं केवल ऐप बनाने के दौरान एंड्रॉइड और उसके नेटवर्क/वाईफ़ाई संभावनाओं के बारे में सबकुछ पढ़ने के लिए आपको सलाह दे सकता हूं।

  • सूत्रों का कहना है आप पढ़ सकते हैं और अध्ययन

http://developer.android.com/reference/android/net/wifi/package-summary.html
how to see if wifi is connected in android
How to get my wifi hotspot ssid in my current android system
How to get name of wifi-network out of android using android API?
Get Wifi Interface name on Android

  • अनुमतियां आप क के लिए पूछना चाहिए चाहिए आवेदन प्रकट बनाने en

AndroidManifest.xml

<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> 
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" /> 
<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE" /> 
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> 

(पिछले एक, केवल यदि आप इसे, अपने स्थान का पता लगाने अनावश्यक कॉल को रोकने के लिए करना चाहते हैं)

  • तुम भी घोषित करना चाहिए , कि आपके एप्लिकेशन को डिवाइस में उपलब्ध होने के लिए वाईफ़ाई की आवश्यकता है, ठीक से काम करने के लिए:

AndroidManifest.xml

<uses-feature android:name="android.hardware.wifi" /> 
+1

अरे, बहुत बहुत धन्यवाद। मैं इन पर पढ़ूंगा। यह स्टैक ओवरफ्लो पर मेरा पहला सवाल था। आपके प्रतिक्रिया के लिए धन्येवाद। – ECH5030

+1

@ ईसीएच 5030 आपका स्वागत है महोदय। भूलें, कुछ जवाबों को चिह्नित करें, स्वीकार्य के रूप में, जो केवल आप ही कर सकते हैं। क्यूए साइटों पर प्रश्न धागा बंद करने का यह सामान्य तरीका है :) –

3

उपयोग सभी उपलब्ध नेटवर्क सूची मानक कोड:

  • स्कैन

    String connectivity_context = Context.WIFI_SERVICE; 
          final WifiManager wifi = (WifiManager) getSystemService(connectivity_context); 
    if (wifi.isWifiEnabled()) { 
             wifi.startScan(); 
            } 
    
  • शुरू डेटा के लिए एक रिसीवर रजिस्टर

    IntentFilter i = new IntentFilter(); 
    i.addAction(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION); 
    
    BroadcastReceiver receiver = new BroadcastReceiver() { 
        @Override 
        public void onReceive(Context context, Intent i) { 
         // TODO Auto-generated method stub 
         ScanWiFiActivity a = ScanWiFiActivity.instance(); 
         WifiManager w = (WifiManager) context 
           .getSystemService(Context.WIFI_SERVICE); 
         List<ScanResult> l = w.getScanResults(); 
         a.Clear(); 
         for (ScanResult r : l) { 
               //use r.SSID or r.BSSID to identify your home network and take action 
          a.setText(r.SSID + "" + r.level + "\r\n"); 
         } 
        } 
    }; 
    registerReceiver(receiver, i); 
    

में ब्लॉक के लिए अपने जादू काम करते हैं और कार्रवाई करने के लिए जब आप SSID या BSSID द्वारा अपने नेटवर्क की पहचान

+0

यह महान आदमी काम करता है! – Saaram

2

मुझे मेरी एक परियोजना के लिए बिल्कुल वही समस्या थी और समाधान खोजने में कुछ समय लगा।

सबसे पहले, "वाईफाई से कनेक्ट करना" कुछ बहुत ही अमूर्त है, और यह ठीक से निकलता है। अभ्यास में, लोगों को आम तौर निम्न में से सभी मतलब है:

  • WiFi पहुंच बिंदु
  • पहुँच बिंदु
  • नेटवर्क से एक आईपी पता मिल गया के साथ जुड़े के साथ प्रमाणीकृत

इन सभी चरणों (और कई और) विभिन्न एंडोइड घटनाओं से जुड़े हुए हैं। तो, आगे की हलचल के बिना, यहाँ मेरी (थोड़ा संशोधित) कोड है:

public class MyService extends Activity { // or Service 

    //... Other stuff 

    BroadcastReceiver awaitIPAddress = null; 
    private final BroadcastReceiver receiver = new BroadcastReceiver() { 
     @Override 
     public void onReceive(Context context, Intent intent) { 
      String action = intent.getAction(); 

      if (action.equals(WifiManager.SUPPLICANT_STATE_CHANGED_ACTION)) { 
       if (intent.getParcelableExtra(WifiManager.EXTRA_NEW_STATE) == SupplicantState.COMPLETED) { 
        //WiFi is associated 
        WifiManager wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE); 
        WifiInfo wi = wifiManager.getConnectionInfo(); 
        if (wi != null) { 
         // Wifi info available (should be, we are associated) 
         if (wi.getIpAddress() != 0) { 
          // Lucky us, we already have an ip address. 
          // This happens when a connection is complete, e.g. after rekeying 
          if (wi.getBSSID().equals("c0:ff:ee:c0:ff:ee")) { 
           // ... Do your stuff here 
           // ... 
           // ... 
          } 
         } else { 
          // No ip address yet, we need to wait... 
          // Battery friendly method, using events 
          if (awaitIPAddress == null) { 
           awaitIPAddress = new BroadcastReceiver() { 
            @Override 
            public void onReceive(Context ctx, Intent in) { 
             WifiManager wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE); 
             WifiInfo wi = wifiManager.getConnectionInfo(); 
             if (wi != null) { 
              if (wi.getIpAddress() != 0) { 
               if (wi.getBSSID().equals("c0:ff:ee:c0:ff:ee")) { 
                // ... Do your stuff here 
                // ... 
                // ... 
               } 
              } 
             } else { 
              ctx.unregisterReceiver(this); 
              awaitIPAddress = null; 
             } 
            } 
           }; 
           // We register a new receiver for connectivity events 
           // (getting a new IP address for example) 
           context.registerReceiver(awaitIPAddress, new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION)); 
          } 
         } 
        } 
       } else { 
        // wifi connection not complete, release ip address receiver if registered 
        if (awaitIPAddress != null) { 
         context.unregisterReceiver(awaitIPAddress); 
         awaitIPAddress = null; 
        } 
       } 
      } 
     } 
    }; 

    //... Other stuff 

    @Override 
    public void onCreate() { 
     super.onCreate(); 
     //... Other stuff 
     IntentFilter filter = new IntentFilter(); 
     filter.addAction(WifiManager.SUPPLICANT_STATE_CHANGED_ACTION); 
     registerReceiver(receiver, filter); 
     //... Other stuff 
    } 

    //... Other stuff 

} 

इसके अलावा, प्रकट करने के लिए उपयुक्त अनुमतियों की उपेक्षा नहीं कर:

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

और मैं दृढ़ता से संदेह है कि आप भी आवश्यकता होगी :

<uses-permission android:name="android.permission.INTERNET"/> 
संबंधित मुद्दे