前言

上面在Android ota 升级方式中介绍了几种方式,这里详细介绍下本地自动升级方式,话不多说,现在开始…

正文

本文基于qcom msm8953 Android7.1.2平台。
ota升级首先的准备升级包,这里命名为update.zip。不知道OTA升级包怎么制作的小伙伴,可以戳这里~
这里,我们假设已经拿到了升级包update.zip。
开始撸代码,那么,做到这里,你们应该知道Android 系统提供了一些api供我们来调用,具体表现在android.os.RecoverySystem类中的installPackage(Context context, File packageFile).
该类中还有很多方法,其中有个verifyPackage方法得提下,该方法用来验证升级包的,虽然在recovery系统中也会去验证升级包,这里还是建议在应用层也做下升级包的验证,可以提前规避错误,该类的其他方法大家可以阅读下Android开发文档,这里需要梯子哟


这里简单上下代码,主要看看这两个方法如何使用:

public class SdCardUpgradeProcess extends Activity implements RecoverySystem.ProgressListener {

private static final String TAG = "SdCardUpgrade";
private static final int VERIFY_COMPLETE = 70;
private static final int INSTALL_COMPLETE  = 100;
private static String updatePath = "/data/ota_package/";
private String updateName = "";
private ProgressBar mProcessbar;
private TextView mUpdateStep;
private TextView mUpdateState;
private TextView mNotify;
private TextView sdcard_update_introduction_textview_one;
private TextView sdcard_update_introduction_textview_two;
private ImageView mCompleteImg;
@Override
protected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);setContentView(R.layout.sdcardupgrade_processbar);UpdateInfo updateInfo = getIntent().getParcelableExtra("updateInfo");Log.e(TAG,"name:"+updateInfo.getUpdateName());Log.e(TAG,"cnt:"+updateInfo.getUpdateCnt());updateName = updateInfo.getUpdateName();mUpdateStep = (TextView)findViewById(R.id.step_number);mUpdateState = (TextView)findViewById(R.id.processbar_title);mNotify = (TextView)findViewById(R.id.update_notify);mCompleteImg = (ImageView)findViewById(R.id.update_complete);mProcessbar=(ProgressBar)findViewById(R.id.processbar);mProcessbar.setMax(110);mProcessbar.setProgress(0);mProcessbar.setIndeterminate(false);runnable.start();}
Handler mHandler = new Handler(){public void handleMessage(Message msg) {mProcessbar.setProgress(msg.arg1);switch(msg.arg1){case VERIFY_COMPLETE:mUpdateStep.setText(getString(R.string.the_next_step_number));mUpdateState.setText(getString(R.string.install_process));mNotify.setText("");break;case INSTALL_COMPLETE:mUpdateState.setText(getString(R.string.install_process_complete));mNotify.setText(getString(R.string.restart));mCompleteImg.setBackgroundResource(R.drawable.ic_launcher_background);break;default:break;}}
};
Thread runnable = new Thread(){@Overridepublic void run() {if(null == updatePath || null == updateName)return;Log.d(TAG, "Start update .............");File file = new File(updatePath+updateName);Log.d(TAG, "file:" +file+"");PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK, "SdCardUpgrade ProcessBar");try{wl.acquire();//升级保持亮屏状态RecoverySystem.verifyPackage(file, SdCardUpgradeProcess.this, null);Log.d(TAG,"Verify package complete.");RecoverySystem.installPackage(SdCardUpgradeProcess.this, file);}catch(Exception e){Log.e(TAG, e.getMessage(), e);}finally{wl.release();}}
};@Override
public void onProgress(int progress) {Log.d(TAG,"progress="+progress);Message msg = Message.obtain();msg.arg1 = progress;mHandler.sendMessage(msg);
}
@Override
public void onBackPressed() {// TODO Auto-generated method stubSystem.exit(0);
}

}

P.S

完整的demo下载路径:AndroidOtaUpdate.rar

Android OTA本地自动升级实现相关推荐

  1. android ota运动手环升级流程

    (一)说明 一般市面上智能运动手环采用nRF51822 ble蓝牙芯片,该芯片是nordic出的一个低功耗的(BLE)芯片 手机需要支持蓝牙4.0及以上版本 蓝牙设备固有软件版本服务的UUID 服务的 ...

  2. Android OTA版本任意升级

    Android目前的版本只能旧版本升级新版本,无法升级旧版本. Android OTA升级主要是ota_from_target_files.py这个脚本,文件目录在build/tools/releas ...

  3. android ota服务器搭建,Android OTA 差分包升级

    稍作修改,因为直接用会有些错误 另外附上超详细的recovery模式update.zip升级分析说明的地址: 根目录下两个命令: 1.make --会生成系统的img文件,system.img,boo ...

  4. 【转】Android应用的自动升级、更新模块的实现 (2)

    http://blog.csdn.net/android_tutor/article/details/7015986

  5. Android OTA升级包制作和验证

    几个概念 **整包升级:**即整个Rom的数据都升级,所以升级包较大,但对要升级的目标系统的版本没有限制 **增量升级:**即只升级有变化的部分,所以升级包较小,但只能针对做比对的俩个系统版本之间来升 ...

  6. Android OTA升级方式分析

    1.前言 OTA(Over-the-Air Technology)空中下载技术.是通过移动通信(GSM或CDMA)的空中接口对SIM卡数据及应用进行远程管理的技术.空中接口可以采用WAP.GPRS.C ...

  7. Android OTA 升级专栏文章导读

    Android OTA 升级专栏文章导读 文章目录 Android OTA 升级专栏文章导读 1. 快速入口 2. 简要介绍 1. 基础入门:<Android A/B 系统>系列 2. 核 ...

  8. Android原生OTA和Recovery升级过程步骤

    本文介绍了Android原生OTA和Recovery升级过程步骤. 进入升级 - 1.1 正常启动和进入Recovery的区别 下面给出了升级流程的简单示意图. 上图中的上下两个部分,上面一部分是正常 ...

  9. Ionic实战 自动升级APP(Android版)

    Ionic 框架介绍 Ionic是一个基于Angularjs.可以使用HTML5构建混合移动应用的用户界面框架,它自称为是"本地与HTML5的结合".该框架提供了很多基本的移动用户 ...

  10. android 系统(154)----OTA制作及升级过程

    OTA制作及升级过程 1.概述 1.1   文档概要 前段时间学习了AndroidRecovery模式及OTA升级过程,为加深理解和防止以后遗忘,所以写这篇文档进行一个总结和梳理,以便日后查阅回顾.文 ...

最新文章

  1. 如何python安装hadoop_使用Python操作Hadoop,Python-MapReduce
  2. 括号匹配问题(c和c++版本实现)
  3. 垃圾回收:引用计数与分代收集机制
  4. firefox android 插件,Firefox for Android将很快迎来更多扩展插件
  5. jQuery插件开发精品教程,让你的jQuery提升一个台阶
  6. 在深度学习时代用 HowNet 搞事情 刘知远 01-09
  7. 公众号文章怎么批量下载导出?
  8. C++ 类成员函数的函数指针
  9. JAVA 将byte数组类型的图片转换成换成JPEG格式
  10. MATLAB中BLAS加载错误,找不到指定模块
  11. 面试题:请说一下HashMap的底层实现原理。
  12. JS根据函数名字符串调用函数
  13. 字节跳动问我计算机网络,我一口气全答对!
  14. php股票t 0,股票T+0是什么意思?如何看懂股票T+0?
  15. AGV控制系统的6大优势介绍
  16. 16年,悲痛又收获的一年
  17. 低功耗基础——Lib文件中对ICG的描述
  18. 关于机器人状态估计(13)-线性代数有多重要?18.06总结
  19. 东北大学计算机学硕复试分数线,东北大学2019年考研复试分数线已公布
  20. 第二章 为Encog获取数据

热门文章

  1. Mac蓝牙无法使用怎么办?教你7个修复蓝牙的技巧
  2. 阵列天线方向图乘积定理的Python实现
  3. pioneer dvr-xd50 固件_闲的蛋疼的验证:索尼 SONY WH1000XM3固件版本差异
  4. Java学生管理系统功能结构图
  5. 分类问题-决策树模型
  6. 2022苏州市小学信息学奥赛T2-汉诺塔
  7. 佳能Canon imageCLASS MF4830d 打印机驱动
  8. 分布式机器学习平台比较
  9. “海选优品,泉网打尽”胡海泉抖音直播带货首秀告捷 柏厨集成家居塔奇、I-LOFT惊艳亮相
  10. 北京地区能收到的FM广播电台频率表(基于手机)