项目实战:OTA系统升级

     

       对之前做的OTA系统升级项目做一个总结,包括4个部分:OTA系统的介绍,OTA包的制作,代码结构以及待改善的问题。


       1. OTA介绍:

         OTA  Android   SD 卡升级,也可以通过 络升级。在系统升级中,主要要做的就是在本地编译出完整包和差分包,放到服务器供用户选择。

2. OTA包的制作

./build/tools/releasetools/ota_from_target_files -i ~/old.zip ~/new.zip ~/update.zip,就会在当前目录生成update.zip的差分包 , 注意要把两个ota包放在当前目录执行这句命令。那么这里的update.zip差分包必须在old.zip这个系统上升级,才能到new.zip这个版本。

  3. 项目结构:

      我把这个初始化放在自定义的OTAApplication中,但是为了保险起见还在等初始化一段时间后在调用RequestManager的请求方法,于是用handler来控制一下定时执行,300ms后再请求。整个请求过程用json传递数据,请求参数是getDeviceData()来获得,主要是当前的版本 和当前机器的DeviceId,  RequestManager的使用不再累述使用大小功能 来请求服务器,同时绑定ResponseListener来获得请求结果,在onReceived()中拿到Response就是我们要的结果,而在其他几个方法中就是一些错误返回等等,我们也可以给出一些UI提示。这里要说明的就是: RequestManager已经被特殊处理,可以直接在UI线程中调用,并且可以直接在结果中更新UI,我没有用handler。 responseCode这个参数就是来区分是否有版本更新,如果有更新的话就会把结果传到updatePreference()来更新我们的界面

      在这里还有一个就是”了解更多“这个Preference,是用来看更新日志的:点击后跳转到UpdateLogActivity, 他是一个窗口Activity的实现,用WebView.loadUrl()的方法加载一份更新日志。

      那么界面更新完成之后,假如当前有版本可以更新,用户点击现在安装就会弹出一个版本列表,在此之前会有一个WIFI和电量判断,我们规定是必须连接WIFI并且电量不低于50%的情况下才能继续更新,检查WIFI是否开启的代码:

 检查当前电量是否低于50%的代码:
      在这里说明一点: 获取电量的常规方法是绑定一个广播,在电量变化时会接到ACTION_BATTERY_CHANGED 的系统广播,但这个存在的问题就是没有即时性,用户点击按钮后就应该获取到广播,因此采用上面的方法:在android系统中   这个文件”/sys/class/power_supply/battery/capacity”  其实就存放了当前电量,直接new File()把它读出来!

     当电量和WIFI都满足条件后就可以开始下载安装系统版本了。下载这一块我采用系统自带的DownloadManager框架,android原生系统就是用的这个框架,有已经封装好的通知栏,功能还是很完善,下面详述DownloadManager在本项目中的用法:

    DownloadManager是一个下载管理类,在OnCreate()中获取:.

    DownloadManager.Request是一个下载任务,我们可以对它具体设定一些下载参数,比如:通知栏是否可见, 络限定,下载目录等等,设定好了之后调用DownloadManager.enqueue方法就开始下载,它返回一个ID就是当前下载任务的ID ,由此可知它支持多任务!在后面的代码可以看到,把这个ID设为全局变量,通过这个ID能查询到当前下载进度:
          到这里其实就已经开始下载了,但要更新我们的进度条,监听某个ID的下载进度,是使用ContentResolver()监听一个系统的URI, 记得要在onDestroy()解绑!:

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2015年2月8日
下一篇 2015年2月8日

相关推荐