android应用自身检测版本并下载

思路:1在服务器固定目录存放固定的了版本文件;

成都创新互联公司于2013年成立,公司以网站建设、成都网站建设、系统开发、网络推广、文化传媒、企业宣传、平面广告设计等为主要业务,适用行业近百种。服务企业客户上千多家,涉及国内多个省份客户。拥有多年网站建设开发经验。为企业提供专业的网站建设、创意设计、宣传推广等服务。 通过专业的设计、独特的风格,为不同客户提供各种风格的特色服务。

           2.应用请求服务器端的版本文件,判断是否有最新版本;

   3.创建下载连接,下载最新apk;

import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;

import android.annotation.SuppressLint;
import android.app.AlertDialog;
import android.app.AlertDialog.Builder;
import android.app.DownloadManager;
import android.app.DownloadManager.Request;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager.NameNotFoundException;
import android.database.Cursor;
import android.net.Uri;
import android.os.Environment;
import android.os.Handler;
import android.util.Xml;


/**
 * Created by shijian on 15-8-13.
 * 检查应用版本
 */
public class CheckVersionUtil {

    public void checkVersion(Context context) {

        this.context = context;
        threadPool.execute(checkVersion);
    }

    /**
     * 检查版本线程
     * @author shijian
     */
    Runnable checkVersion = new Runnable() {

        @Override
        public void run() {

            try {
                //从清单文件中获得当前版本号
                PackageInfo info = context.getPackageManager().getPackageInfo("cn.com.shijian.test", 0);
                float localVersion = Float.valueOf(info.versionName);
                float serverVersion = 0;

                //版本文件在服务器上的路径
                String versionPath = CommonUtil.prefixUrl + File.separator + context.getString(R.string.apkversionUrl);

                URL url = new URL(versionPath);

                HttpURLConnection conn= (HttpURLConnection)url.openConnection();

                //读入XML文件输入流
                InputStream input = conn.getInputStream();
                //解析XML文件
                XmlPullParser parser = Xml.newPullParser();
                try {
                    parser.setInput(input, "utf-8");
                    int eventType = parser.getEventType();

                    while(eventType != XmlPullParser.END_DOCUMENT) {

                        switch (eventType) {

                            case XmlPullParser.START_TAG:

                                //版本
                                if ("version".equals(parser.getName())) {

                                    serverVersion = Float.valueOf(parser.nextText());
                                }
                                //是否强制更新
                                if("ismustupdate".equals(parser.getName())){
                                    ismustupdate = parser.nextText();
                                }
                                if ("description".equals(parser.getName())) {
                                    //换行
                                    description = parser.nextText().replace("\\n", "\n");
                                }
                                break;
                        }
                        eventType = parser.next();
                    }
                    //如果服务器版本号大于本地版本号
                    if (serverVersion > localVersion) {

                        boolean post = handler.post(new Runnable() {
                            @Override
                            public void run() {

                                Builder builder = new Builder(context);
                                builder.setTitle("版本升级");
                                builder.setMessage(description);
                                builder.setPositiveButton("下载最新版", new DialogInterface.OnClickListener() {

                                    @Override
                                    public void onClick(DialogInterface dialog, int which) {
                                        downloadApk();
                                    }
                                });

                                if ("1".equals(ismustupdate)) {
                                    builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
                                        @Override
                                        public void onClick(DialogInterface dialog, int which) {
                                            dialog.dismiss();
                                        }
                                    });
                                }

                                AlertDialog dialog = builder.create();
                                dialog.show();
                            }
                        });
                        //当前版本是最新版
                    } else if (serverVersion <= localVersion) {
                        if (context.getClass().equals(HomeActivity.class)) {
                            return;
                        }
                        handler.post( new Runnable() {
                            public void run() {

                                AlertDialog.Builder builder = new Builder(context);
                                builder.setTitle("版本升级");
                                builder.setMessage("已经是最新版本");
                                AlertDialog dialog = builder.create();
                                dialog.show();
                            }
                        });

                    }
                } catch (XmlPullParserException e) {
                    e.printStackTrace();
                }


            } catch (NameNotFoundException e) {
                e.printStackTrace();
            } catch (MalformedURLException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            } finally {

                threadPool.shutdown();
            }
        }
    };



    /**
     *
     * 点击下载apk
     * @author shijian
     * @since 2015-8-13
     */
    public void downloadApk() {

        //获得DownloadManager
        final DownloadManager downloadMgr = (DownloadManager)  context.getSystemService(Context.DOWNLOAD_SERVICE);
        //定义下载URI
        Uri apkLocation = Uri.parse(CommonUtil.prefixUrl + File.separator + context.getString(R.string.apkUrl));

        Request  request = new Request(apkLocation);
        //request.setAllowedNetworkTypes(Request.NETWORK_WIFI);
        request.setTitle("e车问更新");
        //如果文件件不存在则建立
        File folder = Environment.getExternalStoragePublicDirectory("echewen");
        if (folder.exists() && folder.isDirectory()){

        } else {
            folder.mkdirs();
        }

        //如果echewen.apk已经存在删除掉,防止出现多个
        File apk = new File(CheckVersionUtil.APK_UPDATE);
        if (apk.exists()) {
            apk.delete();
        }
        //保存下载的文件到指定目录下
        request.setDestinationInExternalPublicDir("echewen", "echewen.apk");
        //该downloadmanager的ID
        final long ref = downloadMgr.enqueue(request);

        IntentFilter filter =  new IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE);

        BroadcastReceiver receiver = new BroadcastReceiver() {

            @Override
            public void onReceive(Context context, Intent intent) {

                long mRef = intent.getLongExtra(DownloadManager.EXTRA_DOWNLOAD_ID, -1);

                if (mRef == ref) {

                    Cursor c = downloadMgr.query(new DownloadManager.Query().setFilterById(mRef));
                    c.moveToFirst();
                    String downloadFile = c.getString(c.getColumnIndex(DownloadManager.COLUMN_LOCAL_URI));

                    Intent installIntent = new Intent(Intent.ACTION_VIEW);
                    installIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                    installIntent.setDataAndType(Uri.parse(downloadFile),
                            "application/vnd.android.package-archive");//设置intent的数据类型

                    context.startActivity(installIntent);
                }
            }
        };
        context.registerReceiver(receiver, filter);
    }
    //线程池
    ExecutorService threadPool = Executors.newCachedThreadPool();
    Handler handler = new Handler();
    //版本升级说明
    String description;
    //上下文
    Context context;

    String ismustupdate = "0";//0:必须更新;1:不必须


    public static final String APK_UPDATE = Environment.getExternalStorageDirectory().getPath() + "/echewen/echewen.apk";
    public static final String STORAGE_IMAGE_PATH = Environment.getExternalStorageDirectory().getPath() + "/echewen/apk/";

}

网页标题:android应用自身检测版本并下载
转载来源:https://www.cdcxhl.com/article2/ppghoc.html

成都网站建设公司_创新互联,为您提供手机网站建设关键词优化做网站服务器托管网站设计商城网站

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联

成都网页设计公司