1. 程式人生 > >Android 使用程式碼進入Recovery模式自動升級指定韌體包

Android 使用程式碼進入Recovery模式自動升級指定韌體包

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" />

一般應用沒有許可權,可以在系統應用中開放對應介面,接收到指定廣播後執行以上程式碼。