安卓开发

当前位置:首页 >> 开发资料 已经有 9 人觉得本文很赞,如果本文对您有帮助,请支持我们,我们会做的更好

    Android开发中软件的自动更新

    • 来源:admin
    • 作者:管理员
    • 时间:2012-10-30
    • 点击:8954
    • 收藏本文

        在安卓开发中,许多开发者都会遇到如何让应用程序自动更新的问题,也就是需要让应用程序自动发现服务器上的新版本然后提示更新,当用户点击确定后就下载新版本的应用程序,下载完毕后自动安装更新新程序。
        关于这个主要的流程是这样的:程序启动 --> 在适当的时候后台检查更新 --> 链接远程服务器 --> 获取服务器端新版本信息 --> 比对当前版本 --> 判断是否有更新,如果有有 --> 显示更新提示对话框并显示更新提示内容 --> 交与用户选择是否立即更新。

        这个功能的实现需要在服务器端放置一个xml文件,xml文件主要用来说明当前版本信息,包括版本号,发布时间,版本功能

    介绍等信息。下面是一个例子:

    <?xml version="1.0" encoding="utf-8"?>
    <info>
       <vision>1.0.0.1</vision>  
       <url>http://192.168.0.150:8080/appupt/</url>
       <description>新版本描述信息</description>
    </info>


    1.uptInfo实体类,这个实体类对应于服务器端的xml文件,当程序检测是否有新版本时,首先从服务器下载xml文件后,会将这个xml文件内的信息解析到这个实体类中,参考代码如下:

    public class UptInfo {
        private String version; // 版本号
        private String url; // url路径
        private String description; // 更新说明信息
     
        public String getVersion() {
            return version;
        }
        public void setVersion(String version) {
            this.version = version;
        }
        public String getUrl() {
            return url;
        }
        public void setUrl(String url) {
            this.url = url;
        }
        public String getDescription() {
            return description;
        }
        public void setDescription(String description) {
            this.description = description;
        }
    }

    2.解析xml代码的工具类(这个类主要将从服务器端下载的xml解析到uptInfo实体类中),参考代码如下:

    public class ParseXmlUtils {
        //解析xml文件
        public static UptInfo parseXml(InputStream in) {
            UptInfo uptInfo = new UptInfo();
            DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
            DocumentBuilder db = null;
                db = dbf.newDocumentBuilder();
                Document doc = null;
                doc = db.parse(in);
                Element root = doc.getDocumentElement();
                NodeList resultNode = root.getElementsByTagName("info");
                for (int i = 0; i < resultNode.getLength(); i++) {
                    Element res = (Element) resultNode.item(i);
                    uptInfo.setVersion(res.getElementsByTagName("version")
                            .item(0).getFirstChild().getNodeValue());
                    uptInfo.setUrl(res.getElementsByTagName("url").item(0)
                            .getFirstChild().getNodeValue());
                    uptInfo.setDescription(res
                            .getElementsByTagName("description").item(0)
                            .getFirstChild().getNodeValue());
                }
            return upInfo;
        }
    }

    3.VersionUtil类,这个类主要用来获取当前已安装的安卓应用程序的版本信息,主要用来与服务器端的xml中的版本信息对比判断是否提示更新,参考代码如下:

    public class VersionUtil {
        //获取版本号
        public static String getCurVersion(Context context)
                throws NameNotFoundException {
            // 获取PackageManager 实例
            PackageManager packageManager = context.getPackageManager();
            // 获得context所属类的包名,0表示获取版本信息
            PackageInfo packageInfo = packageManager.getPackageInfo(context.getPackageName(), 0);
            return packageInfo.versionName;
        }
    }

    4.主程序代码:

    public class AutoUptDemoActivity extends Activity {
        private Button button;
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            button = (Button) findViewById(R.id.check);
            button.setOnClickListener(new OnClickListener() {
                @Override
                public void onClick(View v) {
                    checkVersion();
                }
            });
        }
     
        //检查是否需要更新程序
        private void checkVersion() throws NameNotFoundException {
            UptInfo uptInfo = new UptInfo();
            URL url;
            url = new URL(http://192.168.0.150:8080/update.xml);
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
            uptInfo = ParseXmlUtils.parseXml(connection.getInputStream());
            if (uptInfo.getVersion().equals(VersionUtil.getCurVersion(this))) {
                Toast.makeText(this, "版本相同,不需要升级!", Toast.LENGTH_SHORT).show();
            } else {
                showUpdateDialog(uptInfo);
            }
        }
     
        private void showUpdateDialog(UptInfo uptInfo) {
            AlertDialog alertDialog = new AlertDialog.Builder(this)
                    .setTitle("提示检测到新版本,确定升级吗?").setIcon(R.drawable.ask)
                    .setMessage(uptInfo.getDescription())
                    .setPositiveButton("确定", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            dialog.cancel(); //此处下载新版程序文件并安装,本文已经很长,这里不再赘述
                        }
                    })
                    .setNegativeButton("取消", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            dialog.cancel();
                        }
                    }).create();
            alertDialog.show();
        }
    }


     


    本文为Android开发学习网原创/整理,未经允许不得转载,如需转载请联系:androidStudynet@126.com



    读后点评 感谢支持 我的建议
公告信息
    本站安卓版APP正式上线,欢迎下载
本站提供的android教程仅用于android培训,对任何法律问题及风险不承担任何责任 本站部分内容来自网络,如有侵权,请联系本站 站点地图
广告/友情链接请联系:QQ:416225054 Email:androidstudynet@126.com 安卓版:下载 QQ群:480637276