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.nn";
}
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了。



