我正在尝试构建一个应用程序,它会自动重启恢复并从我的SD卡中刷一个拉链。 这个应用程序可以使用系统应用程序权限,因为我将它用作系统应用程序, 我怎么能这样做?
我试过这段代码
File zip = new File("/sdcard/test.zip");
if(zip.exists()) {
Toast.makeText(context,"ZIP EXIST!",Toast.LENGTH_LONG).show();
Process p = Runtime.getRuntime().exec("sh");
OutputStream os = p.getOutputStream();
os.write("mkdir -p /cache/recovery/\n".getBytes());
os.write("echo 'boot-recovery' >/cache/recovery/command\n".getBytes());
String cmd = "echo '--update_package=/sdcard/test.zip' >> /cache/recovery/command\n";
os.write(cmd.getBytes());
os.flush();
// Trigger the reboot
PowerManager powerManager = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
powerManager.reboot("recovery");
}
else{
Toast.makeText(context,"ZIP NOT EXIST!",Toast.LENGTH_LONG).show();
}
我也试过这段代码:
Process p = Runtime.getRuntime().exec("/system/bin/sh");
OutputStream os = p.getOutputStream();
os.write("echo 'boot-recovery ' > /cache/recovery/command".getBytes());
os.write("echo '--update_package=/sdcard/test.zip' >> /cache/recovery/command".getBytes());
os.write("echo '--wipe_cache' >> /cache/recovery/command".getBytes());
os.write("echo 'reboot' >> /cache/recovery/command".getBytes());
os.write("reboot recovery".getBytes());
os.flush();
PowerManager powerManager = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
powerManager.reboot("recovery");
但它所做的只是重启恢复,它不会闪现我的拉链。 请帮忙。
P.S
我在使用TWRP恢复的nexus 5上使用android L
答案 0 :(得分:1)
我相信你的问题是因为不同的Android版本,在 JellyBean(4.1)以及更高版本的 sdcard数据被放置在目录/storage/emulated/0
中您正在使用的目录/sdcard
是指/storage/emulated
,因此,为了使其工作,您必须将目录更改为/sdcard/0
,这将使命令如下:
以第一方式:
String cmd = "echo '--update_package=/sdcard/0/test.zip' >> /cache/recovery/command\n";
以第二方式:
os.write("echo '--update_package=/sdcard/0/test.zip' >> /cache/recovery/command".getBytes());