You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用WifiManager类开关WiFi无效的问题排查求助

解决WifiManager开关WiFi失效的问题

1. 检查并添加必要权限

从Android 6.0(API 23)开始,操作WiFi除了在清单文件声明权限,还需动态申请位置权限(系统安全限制)。

首先在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_FINE_LOCATION"/>

然后在Activity中动态申请权限:

private static final int REQUEST_LOCATION_PERMISSION = 100;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    
    // 检查位置权限
    if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION)
            != PackageManager.PERMISSION_GRANTED) {
        ActivityCompat.requestPermissions(this,
                new String[]{Manifest.permission.ACCESS_FINE_LOCATION},
                REQUEST_LOCATION_PERMISSION);
    }
    
    // 初始化按钮逻辑...
}

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    if (requestCode == REQUEST_LOCATION_PERMISSION) {
        if (grantResults.length == 0 || grantResults[0] != PackageManager.PERMISSION_GRANTED) {
            Toast.makeText(this, "需授予位置权限才能操作WiFi", Toast.LENGTH_SHORT).show();
        }
    }
}

2. 适配Android 10及以上版本限制

从Android 10(API 29)开始,setWifiEnabled()方法被标记为废弃,普通应用无法直接调用该方法开关WiFi,需引导用户到系统设置页面操作:

wifiOn.setOnClickListener(v -> {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
        Intent intent = new Intent(Settings.Panel.ACTION_WIFI);
        startActivity(intent);
    } else {
        // 低版本继续使用原有逻辑(需确保权限已获取)
        boolean isSuccess = wifiManager.setWifiEnabled(true);
        Toast.makeText(MainActivity.this, isSuccess ? "WiFi已开启" : "开启失败", Toast.LENGTH_SHORT).show();
    }
});

wifiOff.setOnClickListener(v -> {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
        Intent intent = new Intent(Settings.Panel.ACTION_WIFI);
        startActivity(intent);
    } else {
        boolean isSuccess = wifiManager.setWifiEnabled(false);
        Toast.makeText(MainActivity.this, isSuccess ? "WiFi已关闭" : "关闭失败", Toast.LENGTH_SHORT).show();
    }
});

注意:仅系统应用或拥有特殊权限的应用,才能在Android 10及以上版本继续使用setWifiEnabled()方法。

3. 优化代码逻辑

避免每次点击时重复获取WifiManager实例,可在onCreate()中一次性初始化:

private WifiManager wifiManager;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    
    wifiManager = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE);
    
    // 绑定按钮点击事件...
}

4. 排查系统层面限制

部分设备的省电模式、安全软件或系统设置可能禁止应用修改WiFi状态,先手动在系统设置中测试能否正常开关WiFi,排除系统级限制。

内容的提问来源于stack exchange,提问作者Sadeeq Ullah

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 06:35:46