通过SVC打开wifi,ap

android中可以通过一些命令直接对模块进行操作:

代码路径:frameworks/base/cmds/svc/src/com/android/commands/svc/Svc.java 

Svc.java中有一个静态抽象类Command,还有一个Command类的数组COMMANDS[],里边分别是不同Cammand的继承类。

都有哪些命令:

93      public static final Command[] COMMANDS = new Command[] {
94              COMMAND_HELP,
95              new PowerCommand(),
96              new DataCommand(),
97              new WifiCommand(),
98              new UsbCommand(),
99              new NfcCommand(),
100              new BluetoothCommand(),
101              new SystemServerCommand(),
102      };

WifiCommand.java继承自Svc.Command。重写了run()方法:

40     public void run(String[] args) {
41          boolean validCommand = false;
42          if (args.length >= 2) {
43              boolean flag = false;
44              if ("enable".equals(args[1])) {
45                  flag = true;
46                  validCommand = true;
47              } else if ("disable".equals(args[1])) {
48                  flag = false;
49                  validCommand = true;
50              }
51              if (validCommand) {
52                  IWifiManager wifiMgr
53                          = IWifiManager.Stub.asInterface(ServiceManager.getService(Context.WIFI_SERVICE));
54                  if (wifiMgr == null) {
55                      System.err.println("Wi-Fi service is not ready");
56                      return;
57                  }
58                  try {
59                      wifiMgr.setWifiEnabled("com.android.shell", flag);
60                  }
61                  catch (RemoteException e) {
62                      System.err.println("Wi-Fi operation failed: " + e);
63                  }
64                  return;
65              }
66          }
67          System.err.println(longHelp());
68      }

其中,调用WifiManager.setWifiEnabled()对wifi进行开关。

然后就可以通过svc wifi enable/svc wifi disable对wifi进行操作。

Android本身没有对Ap的命令控制的实现,可以自己添加代码,编写一个ApCommand.java

public class ApCommand extends Svc.Command {
    public ApCommand() {
        super("ap");
    }

    public String shortHelp() {
        return "Control the softap manager";
    }

    public String longHelp() {
        return shortHelp() + "\n"
                + "\n"
                + "usage: svc ap [enable|disable]\n"
                + "         Turn softap on or off.\n\n";
    }

    public void run(String[] args) {
        boolean validCommand = false;
        if (args.length >= 2) {
            boolean flag = false;
            if ("enable".equals(args[1])) {
                flag = true;
                validCommand = true;
            } else if ("disable".equals(args[1])) {
                flag = false;
                validCommand = true;
            }
            if (validCommand) {
                IWifiManager wifiMgr
                        = IWifiManager.Stub.asInterface(ServiceManager.getService(Context.WIFI_SERVICE));
                if (wifiMgr == null) {
                    System.err.println("Wi-Fi service is not ready");
                    return;
                }
                try {
                    if (flag == true) {
                        wifiMgr.startSoftAp(null);
                    } else {
                        wifiMgr.stopSoftAp();
                    }
                }
                catch (RemoteException e) {
                    System.err.println("softap operation failed: " + e);
                }
                return;
            }
        }
        System.err.println(longHelp());
    }
}

然后在Svc.java的COMMANDS[]数组里加上new ApCommand(),make svc就好了。

就可以svc ap enable/disable了。

  • 17
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值