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('网络异常,请稍候再试');
                        }
                    });
                });
            }

四、总结

  之前遗留的问题总算是解决了,之前不知道怎么,把自己绕进去了。

所有原创文章采用 知识共享署名-非商业性使用 4.0 国际许可协议 进行许可。
您可以自由的转载和修改,但请务必注明文章来源并且不可用于商业目的。
本站部分内容收集于互联网,如果有侵权内容、不妥之处,请联系我们删除。敬请谅解!

添加新评论

  关于博主

QQ:1960727927
E-Mail:ceet@vip.qq.com
个人主页:https://aiylqy.com
个性签名:毁掉一个人最好的方式就是放纵他的缺点。

  近期评论

青春就是用来追忆的,当你怀揣着它时,它一文不值,只有将它耗尽后,再回过头看,一切才有了意义,爱过我们的人和伤害过我们的人,都是我们青春存在的意义。

既然活着来到这个世界,就没有打算活着回去。所以,在这有限的时间里,我们应该珍惜生命,珍惜机会,更要珍惜那得之不易的时间。因那滴答做响的时间脚步,一旦走过,再不回头。

青春是一个充满魁力,充满诱惑的时代。好动是青春,好奇是青春,好玩是青春。玩世不恭更是青春,我们的一切切都是青春。

要先打败任何事情得先学会打败自己。

我会把每一次改变当做成长,哪怕是痛也值得。