如何在应用程序中启用/禁用WiFi?

34

我想在我的 Android 应用程序中启用/禁用 WiFi。我该怎么做?

6个回答

52
WifiManager wifi = (WifiManager) getSystemService(Context.WIFI_SERVICE);
wifi.setWifiEnabled(false); // true or false to activate/deactivate wifi

你还需要在 AndroidManifest.xml 文件中请求权限:

<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />

2
是的,请不要忘记在您的清单中添加使用权限 android.permission.CHANGE_WIFI_STATE。 - Codii
1
@Codii,我知道这是老问题了,但我正在尝试在DialogFragment中完成此操作。然而,它显示“无法解析方法'getSystemService(java.lang.String)'”,我不确定需要做什么。而且我已经拥有了这些权限。 - James Robert Singleton
对我起作用了,谢谢。如果启用了wifi,请使用false,如果禁用了,请使用true进行检查。 - SAYE

17

要在您的应用程序中启用/禁用WiFi,您需要使用WiFiManager类。创建一个WiFiManager类对象以获取WiFi服务。

WifiManager wifi;
wifi=(WifiManager)getSystemService(Context.WIFI_SERVICE);

wifi.setWifiEnabled(false);//Turn off Wifi

wifi.setWifiEnabled(true);//Turn on Wifi

你需要在AndroidManifest.xml文件中添加以下权限

<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />

<uses-permission android:name="android.permission.INTERNET" />

<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
<uses-permission android:name="android.permission.UPDATE_DEVICE_STATS" />

<uses-permission android:name="android.permission.WAKE_LOCK" />

要获取在Android中启用/禁用WiFi的完整示例代码,请访问此网站


这是一个更完整的答案。包括所有必需的权限。 - dubmojo
当我在我的项目中执行这些代码时,系统会弹出提示窗口询问该应用程序是否允许使用 WLAN。并且每次都会出现!我能否在不显示提示窗口的情况下启用 WLAN? - SalutonMondo

5

尝试这段代码

 Intent gpsOptionsIntent = new Intent(  android.provider.Settings.ACTION_WIFI_SETTINGS);  
            startActivityForResult(gpsOptionsIntent,0); 

1
谢谢,但我不想打开设置。我想直接从我的应用程序中禁用或启用。 - Mustafa İrer

3

在Android Q(Android 10)中,要通过应用程序启用/禁用wifi,请使用设置面板

val panelIntent = Intent(Settings.Panel.ACTION_INTERNET_CONNECTIVITY)
startActivityForResult(panelIntent, 0)

在旧版本的Android上,这应该可以工作(必须将适当的权限添加到AndroidManifest文件中,请参见上面的答案):
(context?.getSystemService(Context.WIFI_SERVICE) as? WifiManager)?.apply { isWifiEnabled = true /*or false*/ }

生成的代码可能如下所示:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
    val panelIntent = Intent(Settings.Panel.ACTION_INTERNET_CONNECTIVITY)
    startActivityForResult(panelIntent, 0)
} else {
    (context?.getSystemService(Context.WIFI_SERVICE) as? WifiManager)?.apply { isWifiEnabled = true /*or false*/ }
}

context 是指向 android.content.Context 对象的引用。


1
尝试这个。
public void disableWifi(Context context, Boolean bool) {
    WifiManager wifi = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);

    if(bool)
        wifi.setWifiEnabled(false);
    else
        wifi.setWifiEnabled(true);
}

1
虽然这个回答可能解决了问题,但还应该解释如何以及为什么这样做。 - BDL

0
public class MainActivity extends AppCompatActivity {

    Switch btn;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        btn = (Switch) findViewById(R.id.switch1);
        btn.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                if (isChecked) {
                    toggleWiFi(true);
                    Toast.makeText(getApplicationContext(), "Wi-Fi Enabled!", Toast.LENGTH_LONG).show();
                } else {
                    toggleWiFi(false);
                    Toast.makeText(getApplicationContext(), "Wi-Fi Disabled!", Toast.LENGTH_LONG).show();
                }
            }
        });
    }

    public void toggleWiFi(boolean status){
        WifiManager wifiManager = (WifiManager)this.getSystemService(WIFI_SERVICE);
        if (status && !wifiManager.isWifiEnabled()) {
            wifiManager.setWifiEnabled(true);
        } else if (!status && wifiManager.isWifiEnabled()) {
            wifiManager.setWifiEnabled(false);
        }
    }
}

在清单文件中添加用户权限

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接