android adb关机命令行,android adb 关机实现方式

时间:2025-03-24 10:32:01

笔者遇到需要控制android emulator关机的问题,主要有以下几种方法实现:

第一种:

Intent intent = new Intent(Intent.ACTION_REQUEST_SHUTDOWN);

(Intent.EXTRA_KEY_CONFIRM, false);

(Intent.FLAG_ACTIVITY_NEW_TASK);

startActivity(intent);

这里需要注意的一点是,需要将导入到eclipse工程,否则没有Intent.ACTION_REQUEST_SHUTDOWN这一项

在源码目录地址为./out/target/product/generic/system/framework

第二种:

public void shutdown() {

try {

// 获得ServiceManager类

Class> ServiceManager = Class

.forName("");

// 获得ServiceManager的getService方法

Method getService = ("getService",

);

// 调用getService获取RemoteService

Object oRemoteService = (null,

Context.POWER_SERVICE);

// 获得类

Class> cStub = ("$Stub");

// 获得asInterface方法

Method asInterface = ("asInterface",

);

// 调用asInterface方法获取IPowerManager对象

Object oIPowerManager = (null, oRemoteService);

// 获得shutdown()方法

Method shutdown = ().getMethod("shutdown",

, );

// 调用shutdown()方法

(oIPowerManager, false, true);

} catch (Exception e) {

("SystemStatusSetting", (), e);

}

}

该方法是利用了反射机制调用PowerManagerService shutdown,PowerManager类没有提供关机的接口,而是通过IBinder与PowerManagerService 类进行通信。PowerManagerService调用Power 类来与下一层进行通信. PowerManagerService实现了shutdown接口,power服务实现了关机功能。 IPowerManager是AIDL文件自动生成的类,便于远程通信。文件目录framework/base/core/java/android/os/

IPowerManager实现了shutdown接口,所以,如果我们能够获得Power服务的IBinder,通过反射调用shutdown方法就能实现关机功能PowerManager提供了reboot接口可以直接调用PowerManager pManager=(PowerManager) getSystemService(Context.POWER_SERVICE);  //重启到fastboot模式                ("");

第三种:

通过adb shell 登录后,发现system/bin 下面只有reboot命令,没有shutdown命令。经过研究发现可以通过reboot -p命令来实现关机,于是

try{

Process process =().exec(new String[]{"su","-c","reboot -p"});  //关机

();

}catch(Exception e){

();

}

使用该方法需要注意的是,使用的Android设备必须已经root过