निम्न कोड (कोटलिन में) एपीआई 21 से कम से कम वर्तमान एपीआई संस्करण (एपीआई 29) तक काम करता है। फ़ंक्शन getWifiState () WiFi नेटवर्क स्थिति के लिए 3 संभावित मानों में से एक देता है: अक्षम करें, EnabledNotConnected और Connected जो कि किसी enum वर्ग में परिभाषित किए गए थे। यह उपयोगकर्ता को वाईफाई को सक्षम करने के लिए सूचित करने जैसे या पहले से ही सक्षम नेटवर्क में से एक से कनेक्ट करने के लिए और अधिक बारीक निर्णय लेने की अनुमति देता है। लेकिन अगर वह सब आवश्यक है जो यह इंगित करता है कि यदि वाईफाई इंटरफ़ेस एक नेटवर्क से जुड़ा है, तो यह इंगित करता है, तो अन्य फ़ंक्शन WifiConnected () आपको देगा। यह पिछले एक का उपयोग करता है और परिणाम की तुलना कनेक्टेड से करता है।
यह पिछले कुछ जवाबों में प्रेरित है लेकिन Android API के विकास या IP V6 की धीरे-धीरे बढ़ती उपलब्धता के कारण शुरू हुई समस्याओं को हल करने की कोशिश कर रहा है। चाल का उपयोग करना था:
wifiManager.connectionInfo.bssid != null
के बजाय:
- getIpAddress () == 0 जो केवल IP V4 या के लिए मान्य है
- getNetworkId () == -1 जिसे अब एक और विशेष अनुमति (स्थान) की आवश्यकता है
प्रलेखन के अनुसार: https://developer.android.com/reference/kotlin/android/net/wifi/WifiInfo.html#getbssid
यह नेटवर्क से कनेक्ट नहीं होने पर अशक्त लौट आएगा। और यहां तक कि अगर हमारे पास वास्तविक मूल्य प्राप्त करने की अनुमति नहीं है, तो भी यह जुड़ा होने पर अशक्त के अलावा कुछ और लौटाएगा।
निम्नलिखित को भी ध्यान में रखें:
Android.os.Build.VERSION_CODES # N से पहले रिलीज़ होने पर, यह ऑब्जेक्ट केवल एक कॉन्सेप्ट # getApplicationContext () से प्राप्त किया जाना चाहिए, और कॉलिंग प्रक्रिया के भीतर मेमोरी लीक से बचने के लिए किसी अन्य व्युत्पन्न संदर्भ से नहीं।
मेनिफेस्ट में, जोड़ना न भूलें:
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
प्रस्तावित कोड है:
class MyViewModel(application: Application) : AndroidViewModel(application) {
// Get application context
private val myAppContext: Context = getApplication<Application>().applicationContext
// Define the different possible states for the WiFi Connection
internal enum class WifiState {
Disabled, // WiFi is not enabled
EnabledNotConnected, // WiFi is enabled but we are not connected to any WiFi network
Connected, // Connected to a WiFi network
}
// Get the current state of the WiFi network
private fun getWifiState() : WifiState {
val wifiManager : WifiManager = myAppContext.applicationContext.getSystemService(Context.WIFI_SERVICE) as WifiManager
return if (wifiManager.isWifiEnabled) {
if (wifiManager.connectionInfo.bssid != null)
WifiState.Connected
else
WifiState.EnabledNotConnected
} else {
WifiState.Disabled
}
}
// Returns true if we are connected to a WiFi network
private fun isWiFiConnected() : Boolean {
return (getWifiState() == WifiState.Connected)
}
}
android.permission.ACCESS_NETWORK_STATE
काम करने के लिए अपने AndroidManifest.xml में जोड़ना होगा।