如何在Flutter与Android中以编程方式开启WiFi?Android相关API已废弃
Android 编程开启WiFi(替代废弃的setWifiEnabled方法)
从Android 10(API 29)开始,WifiManager.setWifiEnabled()方法被标记为废弃,Android 12(API 31)及以上更是完全禁止普通应用直接调用该方法控制WiFi开关。以下是不同版本的适配方案:
权限准备
首先在AndroidManifest.xml中声明必要权限:
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /> <!-- Android 6.0+ 需动态申请 CHANGE_WIFI_STATE 权限 -->
分版本实现
Android 9 及以下(API 28 及更低)
可直接使用废弃前的方法,权限校验后调用即可:
val wifiManager = applicationContext.getSystemService(Context.WIFI_SERVICE) as WifiManager if (ContextCompat.checkSelfPermission(applicationContext, Manifest.permission.CHANGE_WIFI_STATE) == PackageManager.PERMISSION_GRANTED) { wifiManager.setWifiEnabled(true) }
WifiManager wifiManager = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE); if (ContextCompat.checkSelfPermission(getApplicationContext(), Manifest.permission.CHANGE_WIFI_STATE) == PackageManager.PERMISSION_GRANTED) { wifiManager.setWifiEnabled(true); }
Android 10-11(API 29-30)
setWifiEnabled()虽已废弃但仍可调用,但官方不推荐依赖该方法。更稳妥的方式是引导用户通过系统设置面板开启WiFi:
val intent = Intent(Settings.Panel.ACTION_WIFI) startActivity(intent)
Intent intent = new Intent(Settings.Panel.ACTION_WIFI); startActivity(intent);
Android 12 及以上(API 31+)
系统完全禁止应用直接控制WiFi开关,必须引导用户通过系统设置面板操作,代码同上(调用Settings.Panel.ACTION_WIFI打开WiFi设置面板)。
关键注意事项
- Android 12+ 的权限限制是系统级安全策略,任何应用都无法绕过,必须由用户手动确认开启WiFi。
- 动态权限申请:Android 6.0+ 需在代码中主动申请
CHANGE_WIFI_STATE权限,否则无法调用相关方法。 - 避免依赖废弃API:即使在Android 10-11能使用
setWifiEnabled(),也建议尽快迁移到引导用户操作的方案,避免后续版本兼容问题。
内容的提问来源于stack exchange,提问作者Ninad Hire
相关产品推荐
相关产品推荐

