নিম্নলিখিত কোড (কোটলিনে) কমপক্ষে বর্তমান এপিআই সংস্করণ (এপিআই 29) পর্যন্ত এপিআই 21 থেকে কাজ করে। GetWifiState () ফাংশনটি ওয়াইফাই নেটওয়ার্ক রাষ্ট্রের জন্য 3 সম্ভাব্য মানগুলির মধ্যে একটি প্রদান করে: একটি এনম ক্লাসে সংজ্ঞায়িত করা অক্ষম, এনএবলডনট সংযুক্ত এবং সংযুক্ত। এটি ব্যবহারকারীকে ওয়াইফাই সক্ষম করতে বা যদি ইতিমধ্যে সক্ষম থাকে তবে উপলব্ধ নেটওয়ার্কগুলির মধ্যে একটিতে সংযোগ স্থাপনের মতো আরও দানাদার সিদ্ধান্ত গ্রহণের অনুমতি দেয়। তবে যদি প্রয়োজন হয় এমন সমস্ত বুলিয়ান যা যদি ওয়াইফাই ইন্টারফেসটি কোনও নেটওয়ার্কের সাথে সংযুক্ত থাকে, তবে অন্য ফাংশনটি ওয়াইফাই সংযুক্ত () আপনাকে দিবে। এটি পূর্ববর্তীটি ব্যবহার করে এবং ফলাফলটিকে সংযুক্তের সাথে তুলনা করে।
এটি পূর্বের কয়েকটি উত্তরে অনুপ্রেরণা পেয়েছে তবে অ্যানড্রয়েড এপিআই এর বিবর্তন বা আইপি ভি 6 এর ধীরে ধীরে ক্রমবর্ধমান প্রাপ্যতার দ্বারা প্রবর্তিত সমস্যাগুলি সমাধান করার চেষ্টা করছে। কৌশলটি ব্যবহার করা ছিল:
wifiManager.connectionInfo.bssid != null
পরিবর্তে:
- getIpAddress () == 0 যা কেবল আইপি ভি 4 বা এর জন্য বৈধ
- getNetworkId () == -1 এর জন্য এখন অন্য বিশেষ অনুমতি প্রয়োজন (অবস্থান)
ডকুমেন্টেশন অনুসারে: https://developer.android.com/references/kotlin/android/net/wifi/WifiInfo.html#getbssid
কোনও নেটওয়ার্কের সাথে সংযুক্ত না থাকলে এটি বাতিল হয়ে যাবে। এবং যদিও আমাদের কাছে আসল মান পাওয়ার অনুমতি নেই, তবুও আমরা সংযুক্ত থাকলে এটি নাল ব্যতীত অন্য কিছু ফিরিয়ে আনবে।
নিম্নলিখিত বিষয়গুলি মনে রাখবেন:
Android.os.Build.VERSION_CODES # N এর পূর্বে রিলিজে, এই কলটি কেবলমাত্র প্রসঙ্গ # get অ্যাপ্লিকেশনস কনটেক্সট () থেকে প্রাপ্ত হওয়া উচিত, এবং কলিংয়ের প্রক্রিয়াটির মধ্যে মেমরি ফাঁস এড়াতে অন্য কোনও উত্পন্ন প্রসঙ্গ থেকে নয়।
ম্যানিফেস্টে, যুক্ত করতে ভুলবেন না:
<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
জন্য আপনার অ্যান্ড্রয়েড ম্যানিফেস্ট.এক্সএমএল যুক্ত করতে হবে।