android 通过adb命令控制wifi开关

android 通过adb命令控制wifi开关

2017年08月23日 17:47:46 刘国栋 阅读数:14598

 版权声明:本文为博主原创文章,转载请声明文章出处。 https://blog.youkuaiyun.com/liu3364575/article/details/77509038

手机必须root

 

public static void setSettingsWifi() {
    ShellUtil.runRootCmd("svc wifi enable");
}
package com.watch.in.uitlis.data;

/**
 * Created by Administrator on 2017/6/21.
 */

import android.util.Log;

import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

public class ShellUtil
{
    private static String TAG = ShellUtil.class.getName();

    public static String runCommand(String command)
    {
        Process process = null;
        String result = "false";
        try
        {
            process = Runtime.getRuntime().exec(command);
            process.waitFor();
            result = inputStreamToString(process.getInputStream());
            Log.e(TAG, result);
        } catch (Exception e)
        {
            return result;
        } finally
        {
            try
            {
                process.destroy();
            } catch (Exception e)
            {
            }
        }
        return result;
    }

    //http://blog.youkuaiyun.com/alexander_xfl/article/details/9150971
    //command can be some cmd, use ; to split

    public static String runRootCmd(String command)
    {
        return runRootCmd(command,  ";");
    }

    public static String runRootCmd(String command, String split)
    {
        Process process = null;
        DataOutputStream os = null;
        String result = "false";
        try
        {
            process = Runtime.getRuntime().exec("su");
            OutputStream outstream = process.getOutputStream();
            DataOutputStream dataOutputStream = new DataOutputStream(outstream);
            String temp = "";
            String[] cmds = command.split(split);
            for(int i = 0; i < cmds.length; i++)
                temp += cmds[i] + "\n";
            dataOutputStream.writeBytes(temp);
            dataOutputStream.flush();
            dataOutputStream.writeBytes("exit\n");
            dataOutputStream.flush();
            process.waitFor();
            result = inputStreamToString(process.getInputStream());
            Log.i(TAG, temp);

        } catch (Exception e)
        {
            Log.e(TAG, e.getMessage());
            return result;
        } finally
        {
            Log.i(TAG, result);
            try
            {
                if (os != null)
                {
                    os.close();
                }
                process.destroy();
            } catch (Exception e)
            {
                Log.e(TAG, e.getMessage());
            }
        }
        return result;
    }

    private static String inputStreamToString(InputStream in) throws IOException
    {
        StringBuffer out = new StringBuffer();
        byte[] b = new byte[1024];
        for (int n; (n = in.read(b)) != -1;)
        {
            out.append(new String(b, 0, n));
        }
        return out.toString();
    }
}

 

 

 

 

<!-- wifi设置模块相关权限条 -->
<!-- 以下是使用wifi访问网络所需的权限 -->
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.UPDATE_DEVICE_STATS" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.MODIFY_PHONE_STATE" />
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
权限挑有用的就行
<think>我们正在寻找通过ADB命令禁用或关闭设备WiFi的方法。根据用户的需求,我们需要参考站内引用以及之前的相关信息。然而,提供的引用中并没有直接提到关闭WiFi的命令,但我们可以根据ADB的常用命令结构和Android系统特性来提供解决方案。在Android设备上,WiFi通常由系统服务控制,我们可以通过`adbshell`进入设备,然后使用`svc`命令或`settings`命令来控制WiFi。具体方法如下:###1.使用`svc`命令控制WiFi`svc`命令是Android系统中用于控制电源、数据、WiFi等的工具。我们可以通过以下步骤:-启用WiFi:```adbshellsvcwifienable```-禁用WiFi:```adbshellsvcwifidisable```###2.使用`settings`命令修改全局设置另一种方法是通过`settings`命令修改系统设置中的WiFi开关状态:-打开WiFi:```adbshellsettingsputglobalwifi_on1adbshellambroadcast-aandroid.intent.action.WIFI_STATE_CHANGED```-关闭WiFi:```adbshellsettingsputglobalwifi_on0adbshellambroadcast-aandroid.intent.action.WIFI_STATE_CHANGED```上述命令中,`settingsputglobalwifi_on`用于修改全局设置,后面的广播命令是为了通知系统设置已改变,以确保更改生效。###注意事项1.设备需要开启USB调试模式,并且已授权电脑的ADB连接。2.设备需要已连接ADB,可以通过`adbdevices`检查设备状态是否为`device`。3.部分设备可能没有`svc`命令,或者需要root权限。如果没有root权限,可以尝试使用`settings`命令,但该命令也可能受权限限制。###操作步骤示例1.连接设备并检查状态:```bashadbdevices```确保设备状态为`device`。2.关闭WiFi:-方法一(使用`svc`):```bashadbshellsvcwifidisable```-方法二(使用`settings`):```bashadbshellsettingsputglobalwifi_on0adbshellambroadcast-aandroid.intent.action.WIFI_STATE_CHANGED```3.验证:在设备上查看WiFi是否已关闭。如果遇到`nodevices/emulatorsfound`错误,请确保设备已正确连接并且USB调试已开启。也可以尝试重启ADB服务:```bashadbkill-serveradbstart-server```###相关问题1.如何通过ADB命令打开移动数据?2.如何通过ADB命令切换飞行模式?3.如何通过ADB命令调整屏幕亮度?希望这些方法能帮助您禁用设备的WiFi。如果遇到问题,请检查设备型号和Android版本,因为不同设备的命令可能略有差异。</think> ### 通过 ADB 命令关闭或禁用 WiFi 的方法 您可以通过以下 ADB 命令控制设备的 WiFi 状态: #### 1. **直接禁用 WiFi** ```bash adb shell svc wifi disable ``` 该命令会立即关闭设备的 WiFi 功能。执行后状态栏的 WiFi 图标会消失,相当于手动关闭物理开关的效果[^1]。 #### 2. **通过系统设置禁用** ```bash adb shell settings put global wifi_on 0 ``` 此命令修改系统全局设置,将 WiFi 状态设为关闭(`0`表示关闭,`1`表示开启)[^1]。 #### 3. **强制禁用并刷新状态** ```bash adb shell settings put global wifi_on 0 && \ adb shell am broadcast -a android.intent.action.WIFI_STATE_CHANGED ``` 添加广播指令确保系统立即响应设置变更[^1]。 #### 4. **彻底禁用 WiFi 服务(需 Root)** ```bash adb shell pm disable-user com.android.wifi ``` 通过禁用系统 WiFi 服务组件实现完全关闭(需设备已 root)[^2]。 --- ### 🔧 操作注意事项 1. **设备连接检查** ```bash adb devices ``` 确认设备状态为 `device`(如显示 `offline` 需重连) 2. **重启 ADB 服务** ```bash adb kill-server && adb start-server ``` 解决设备未识别的问题[^1] 3. **华为 EMUI 特殊处理** ```bash adb shell pm disable-user com.huawei.wifi ``` 部分华为机型需使用专属服务名[^2] --- ### ⚠️ 重要提示 - 关闭 WiFi 后如需恢复: ```bash adb shell svc wifi enable # 重新开启 adb shell pm enable com.android.wifi # 恢复服务组件 ``` - 部分命令需要设备已开启 USB 调试(开发者选项) - Android 11+ 设备可能需要额外授权 `WRITE_SECURE_SETTINGS` 权限 📌 实际操作前建议备份数据,系统级操作可能导致意外断网[^1][^2]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值