通过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了。