Recovery工作原理可以参考这篇博客:Recovery工作原理
RecoverySystem类进行OTA整包的安装,首先需要
OTA整包:update.zip (注意不是镜像文件的压缩文件,打包OTA整包需要专用命令可百度)
验证OTA包的函数,它有一个回调接口ProgressListener(),我们在其中判断验证进度达到100%时进行安装
安装OTA包的函数,该函数需要RECOVERY权限,故我们需在Manifest文件中进行权限声明
<uses-permission android:name="android.permission.RECOVERY"/>
以上两个函数都需要传入update.zip所在的文件路径,但安卓机在启动时可能sdcard不会挂载,所以把update.zip放在sdcard中可能导致文件读不到的情况,这里我尝试把update.zip放在: /data/user/0/update.zip,运行正常
代码示例:
public boolean has_file(){
String path = "/data/user/0/update.zip";
File file = new File(path);
return file.exists();
}
public void installFirmware() throws GeneralSecurityException, IOException {
String path = "/data/user/0/update.zip";
final File file = new File(path);
new Thread(new Runnable() {
@Override
public void run() {
try {
RecoverySystem.verifyPackage(file, new RecoverySystem.ProgressListener() {
@Override
public void onProgress(int i) {
Log.e("TAGG","验证安装包进度:"+i);
if(i==100){
try{
RecoverySystem.installPackage(getActivity(),file);
} catch (IOException e) {
e.printStackTrace();
}
}
}
},null);
} catch (GeneralSecurityException e) {
throw new RuntimeException(e);
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}).start();
}