Android Kotlin实现指定WiFi下加载APP及解决SSID获取异常问题
解决Android应用仅在特定WiFi下加载及SSID返回'unknown network'的问题
一、先配置必要权限
获取WiFi信息需要对应权限,在AndroidManifest.xml里添加:
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <!-- Android 12及以上版本需额外添加 --> <uses-permission android:name="android.permission.NEARBY_WIFI_DEVICES" android:usesPermissionFlags="neverForLocation" />
注意:ACCESS_FINE_LOCATION是危险权限,需要动态申请;Android 10及以上,必须开启设备的位置服务才能获取到SSID,否则会返回unknown network。
二、Kotlin代码获取当前WiFi的SSID
下面是适配多版本的SSID获取方法,还会处理部分设备返回SSID带双引号的情况:
import android.content.Context import android.net.wifi.WifiManager import android.os.Build import android.net.wifi.WifiInfo fun getCurrentWifiSsid(context: Context): String? { val wifiManager = context.applicationContext.getSystemService(Context.WIFI_SERVICE) as WifiManager val wifiInfo = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { wifiManager.connectionInfo } else { wifiManager.connectionInfo } return wifiInfo?.ssid?.let { ssid -> // 移除SSID前后的双引号 if (ssid.startsWith("\"") && ssid.endsWith("\"")) { ssid.substring(1, ssid.length - 1) } else { ssid } } ?: "unknown network" }
三、实现特定WiFi下加载应用的逻辑
在应用启动时(比如启动页或主Activity的onCreate方法)检查当前WiFi:
// 替换成你的目标WiFi名称 const val TARGET_WIFI_SSID = "MyTargetWiFi" fun checkWifiAndLoadApp(context: Context) { val currentSsid = getCurrentWifiSsid(context) when (currentSsid) { TARGET_WIFI_SSID -> { // 加载应用主内容,比如跳转到主界面 navigateToMainScreen() } else -> { // 提示用户必须连接指定WiFi,比如弹出对话框 showWifiRestrictionTip() } } } // 示例辅助方法 private fun navigateToMainScreen() { // 这里写跳转到主界面的逻辑 } private fun showWifiRestrictionTip() { // 这里写显示提示的逻辑,比如AlertDialog }
四、排查SSID返回'unknown network'的常见问题
- 权限未授予:确认已经动态申请并获取了
ACCESS_FINE_LOCATION权限。 - 位置服务未开启:让用户打开设备的位置服务(即使你的应用不需要定位功能)。
- 未连接WiFi:设备当前没有连接任何WiFi网络。
- 隐藏SSID的WiFi:如果目标WiFi是隐藏的,系统无法获取到SSID,这种情况可以考虑通过BSSID(WiFi硬件地址)来验证。
- Android版本适配:Android 12+要确保添加了
NEARBY_WIFI_DEVICES权限。
内容的提问来源于stack exchange,提问作者patrick mwanza
相关产品推荐
相关产品推荐

