2-29,4年才有一次的日子,小李子終于抱走了Oscar小金人。
進入Recovery并自動更新指定路徑下的更新包,OTA将固件包下載下傳到指定路徑/sdcard/update.zip,然後執行以下代碼進入Recovery執行安裝:
private static File RECOVERY_DIR = new File("/cache/recovery");
private static File COMMAND_FILE = new File(RECOVERY_DIR, "command");
private static void recoveryMode(Context context) throws IOException {
String arg = "--update_package=/sdcard/update.zip";
RECOVERY_DIR.mkdirs();
FileWriter command = new FileWriter(COMMAND_FILE);
try {
command.write(arg); // 往/cache/recovery/command中寫入recoveryELF的執行參數。
command.write("\n");
} finally {
command.close();
}
PowerManager pm = (PowerManager) context
.getSystemService(Context.POWER_SERVICE);
pm.reboot("recovery"); // 調用PowerManager類中的reboot方法
throw new IOException("Reboot failed (no permissions?)");
}
需要聲明REBOOT權限,需要是system uid才能調用該權限。
<uses-permission android:name="android.permission.REBOOT" />
一般應用沒有權限,可以在系統應用中開放對應接口,接收到指定廣播後執行以上代碼。