Android OTA本地自动升级实现
前言
上面在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本地自动升级实现相关推荐
- android ota运动手环升级流程
(一)说明 一般市面上智能运动手环采用nRF51822 ble蓝牙芯片,该芯片是nordic出的一个低功耗的(BLE)芯片 手机需要支持蓝牙4.0及以上版本 蓝牙设备固有软件版本服务的UUID 服务的 ...
- Android OTA版本任意升级
Android目前的版本只能旧版本升级新版本,无法升级旧版本. Android OTA升级主要是ota_from_target_files.py这个脚本,文件目录在build/tools/releas ...
- android ota服务器搭建,Android OTA 差分包升级
稍作修改,因为直接用会有些错误 另外附上超详细的recovery模式update.zip升级分析说明的地址: 根目录下两个命令: 1.make --会生成系统的img文件,system.img,boo ...
- 【转】Android应用的自动升级、更新模块的实现 (2)
http://blog.csdn.net/android_tutor/article/details/7015986
- Android OTA升级包制作和验证
几个概念 **整包升级:**即整个Rom的数据都升级,所以升级包较大,但对要升级的目标系统的版本没有限制 **增量升级:**即只升级有变化的部分,所以升级包较小,但只能针对做比对的俩个系统版本之间来升 ...
- Android OTA升级方式分析
1.前言 OTA(Over-the-Air Technology)空中下载技术.是通过移动通信(GSM或CDMA)的空中接口对SIM卡数据及应用进行远程管理的技术.空中接口可以采用WAP.GPRS.C ...
- Android OTA 升级专栏文章导读
Android OTA 升级专栏文章导读 文章目录 Android OTA 升级专栏文章导读 1. 快速入口 2. 简要介绍 1. 基础入门:<Android A/B 系统>系列 2. 核 ...
- Android原生OTA和Recovery升级过程步骤
本文介绍了Android原生OTA和Recovery升级过程步骤. 进入升级 - 1.1 正常启动和进入Recovery的区别 下面给出了升级流程的简单示意图. 上图中的上下两个部分,上面一部分是正常 ...
- Ionic实战 自动升级APP(Android版)
Ionic 框架介绍 Ionic是一个基于Angularjs.可以使用HTML5构建混合移动应用的用户界面框架,它自称为是"本地与HTML5的结合".该框架提供了很多基本的移动用户 ...
- android 系统(154)----OTA制作及升级过程
OTA制作及升级过程 1.概述 1.1 文档概要 前段时间学习了AndroidRecovery模式及OTA升级过程,为加深理解和防止以后遗忘,所以写这篇文档进行一个总结和梳理,以便日后查阅回顾.文 ...
最新文章
- 如何python安装hadoop_使用Python操作Hadoop,Python-MapReduce
- 括号匹配问题(c和c++版本实现)
- 垃圾回收:引用计数与分代收集机制
- firefox android 插件,Firefox for Android将很快迎来更多扩展插件
- jQuery插件开发精品教程,让你的jQuery提升一个台阶
- 在深度学习时代用 HowNet 搞事情 刘知远 01-09
- 公众号文章怎么批量下载导出?
- C++ 类成员函数的函数指针
- JAVA 将byte数组类型的图片转换成换成JPEG格式
- MATLAB中BLAS加载错误,找不到指定模块
- 面试题:请说一下HashMap的底层实现原理。
- JS根据函数名字符串调用函数
- 字节跳动问我计算机网络,我一口气全答对!
- php股票t 0,股票T+0是什么意思?如何看懂股票T+0?
- AGV控制系统的6大优势介绍
- 16年,悲痛又收获的一年
- 低功耗基础——Lib文件中对ICG的描述
- 关于机器人状态估计(13)-线性代数有多重要?18.06总结
- 东北大学计算机学硕复试分数线,东北大学2019年考研复试分数线已公布
- 第二章 为Encog获取数据