H5+app,自动更新后自动删除安装包
H5+app 自动删除安装包
一、前言
之前做好的app自动更新,遗留下了一个问题,就是自动更新后安装包没有自行删除掉。
好像现在的手机的系统是有安装完自动清理安装包的。想我这个H5+的app安装完后是没有自动删除的,所以就需要用代码去删除掉。
二、解决方式
使用html5+plus,提供的IO模块来操作自动更新后遗留下来的apk文件。
参考文档:
http://www.html5plus.org/doc/zh_cn/io.html
IO模块:管理本地文件系统,用于对文件系统的目录浏览、文件的读取、文件的写入等操作。通过plus.io可获取文件系统管理对象。
原理:1、通过plus.io.requestFileSystem请求本地文件系统对象
第一个参数类型是 PUBLIC_DOWNLOADS: 程序公用下载目录常量
成功返回后的参数fs,即:该下载目录下的所有文件,然后进行遍历
2、通过plus.io.resolveLocalFileSystemURL操作文件
第一个参数即文件的路径名,成功返回后的参数entry,即:文件对象
得到文件的对象就可以进行操作,查看文件名,文件大小,删除,复制文件等操作
三、代码
1、下面即为代码的实现
plus.io.requestFileSystem(plus.io.PUBLIC_DOWNLOADS, function(fs) { // fs.root是根目录操作对象DirectoryEntry var directoryReader = fs.root.createReader(); directoryReader.readEntries(function(entries) { for (var i = 0; i < entries.length; i++) { var fileName = entries[i].name; var filePath = "_downloads/" + entries[i].name; plus.io.resolveLocalFileSystemURL(filePath, function(entry) { // 可通过entry对象操作test.html文件 // entry.file(function(file) { // console.log(file.name); // }); entry.remove(); }, function(e) { // console.log("Resolve file URL failed: " + e.message); }); } }, function(e) { // alert("Read entries failed: " + e.message); }); });
2、其他做法
现在有个问题,就是安装的后重启是不可控,所以我最简单的做法就是保留最新版本的apk,其他版本都删除
当然可以有其他做法,就是检测是否需要更新,如果不需要更新,则启动删除程序,将本地安装清除。
function autoDeleteApk() { plus.runtime.getProperty(plus.runtime.appid, function(inf) { //获取app的版本信息 var ver = inf.version; //接口地址,用于获取服务器上最新的版本号,与本地进行对比。 var url = '{你接口的地址}'; mui.ajax(url, { data: { apkVersion: ver, }, dataType: 'json', type: 'GET', timeout: 60000, success: function(data) { var appVer = data.map.appVersion; if (appVer == null) { return; } plus.io.requestFileSystem(plus.io.PUBLIC_DOWNLOADS, function(fs) { // fs.root是根目录操作对象DirectoryEntry var directoryReader = fs.root.createReader(); directoryReader.readEntries(function(entries) { for (var i = 0; i < entries.length; i++) { var fileName = entries[i].name; var appVerName = appVer + ".apk"; if (fileName != appVerName) { console.log("不删除----------") return; } var filePath = "_downloads/" + entries[i].name; plus.io.resolveLocalFileSystemURL(filePath, function(entry) { // 可通过entry对象操作test.html文件 // entry.file(function(file) { // console.log(file.name); // }); entry.remove(); }, function(e) { // console.log("Resolve file URL failed: " + e.message); }); } }, function(e) { // alert("Read entries failed: " + e.message); }); }); }, error: function(xhr, type, errerThrown) { //mui.toast('网络异常,请稍候再试'); } }); }); }
四、总结
之前遗留的问题总算是解决了,之前不知道怎么,把自己绕进去了。
不清楚的地方可以看另外一篇:H5+app — 自动更新
不足之处,请大家指教。
转发请注明出处:https://www.cnblogs.com/lrj1009IRET/