前言

上面在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;@Overrideprotected void onCreate(Bundle savedInstanceState) {    // TODO Auto-generated method stub    super.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(){    @Override    public 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();        }    }};@Overridepublic void onProgress(int progress) {    Log.d(TAG,"progress="+progress);    Message msg = Message.obtain();    msg.arg1 = progress;    mHandler.sendMessage(msg);}@Overridepublic void onBackPressed() {    // TODO Auto-generated method stub    System.exit(0);}

}

P.S

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

更多相关文章

  1. 添加android 4.0 开机音乐
  2. Android使用WebView从相册/拍照中添加图片
  3. android studio 碰到问题
  4. Android(安卓)Webview 开发详解
  5. Android(安卓)NDK 是什么
  6. Android单元测试思路
  7. Android(安卓)第八天_重置版_服务_注意事项
  8. android adb网络连接方法
  9. LoaderManager - Android(安卓)3.0新特性

随机推荐

  1. 教你快速高效接入SDK——iOS多渠道自动打
  2. 将Unity3D项目导出到Android工程中二次开
  3. 顛覆性的傳輸功能:Android Beam
  4. 【Android】Android内存机制,了解Android
  5. 如何在代码中为组件设置dip,sp值
  6. Android(安卓)ListView分页加载(服务端+an
  7. 又一部承諾會升上 Ice Cream Sandwich 的
  8. Motorola & Android系统
  9. 深入探索Android布局优化(上)
  10. Android:让手机成为你的移动生活助手