zoukankan      html  css  js  c++  java
  • 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/

  • 相关阅读:
    【题解】字母 (letter)
    【题解】【原创题目】薇尔莉特
    【题解】Query on a tree III [SP1487] [Bzoj1803]
    11个炫酷的 Linux 终端命令
    A light-weight client-side OAuth library for Java
    android下的异步任务
    OAuth相关知识
    显示单位px、dip以及sp的区别
    Arduino连接SHT10温湿度传感器--返回值不正常解决办法
    blueterm蓝牙超级终端(源码)
  • 原文地址:https://www.cnblogs.com/lrj1009IRET/p/H5_App.html
Copyright © 2011-2022 走看看