app版本升级

来源:互联网 发布:新网绑定域名 编辑:程序博客网 时间:2024/05/12 10:43

主类:

package com.bw.versionupdate;import java.io.BufferedInputStream;import java.io.File;import java.io.FileOutputStream;import java.io.InputStream;import java.net.HttpURLConnection;import java.net.URL;import android.app.Activity;import android.app.AlertDialog;import android.app.ProgressDialog;import android.content.DialogInterface;import android.content.Intent;import android.os.Bundle;import android.os.Environment;import android.os.Handler;import android.os.Message;import android.util.Log;import android.view.Menu;import android.view.View;import android.view.View.OnClickListener;import android.widget.TextView;import com.lpf.versionupdate.R;public class MainActivity extends Activity {    private AlertDialog dialog;    private UpdateEntity updateEntity;    private TextView tv_name;    /**     * 消息机制     */    private Handler handler = new Handler(){        @Override        public void handleMessage(Message msg) {            // TODO Auto-generated method stub            super.handleMessage(msg);            switch (msg.what) {                case 0:                    dialog.setMessage(updateEntity.getDescription());                    dialog.show();                    break;                case 1:                    downLoadApk();                    break;            }        }    };    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        dialog = new AlertDialog.Builder(MainActivity.this).                setTitle("升级提醒").                setIcon(R.drawable.ic_launcher).                setPositiveButton("在线升级", onclick).                setNegativeButton("不想升级", null).                create();        //开启线程        new Thread(new CheckVersionTask()).start();    }    DialogInterface.OnClickListener  onclick = new DialogInterface.OnClickListener(){        @Override        public void onClick(DialogInterface dialog, int which) {            // TODO Auto-generated method stub            handler.sendEmptyMessage(1);        }    };    /*     * 从服务器中下载APK     */    protected void downLoadApk() {        final ProgressDialog pd;    //进度条对话框        pd = new  ProgressDialog(this);        pd.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);        pd.setMessage("正在下载更新");        pd.show();        new Thread(){            @Override            public void run() {                try {                    File file =  getFileFromServer(updateEntity.getUrl(), pd);                    sleep(3000);                    UpdateTools tools = new UpdateTools();                    //安装APk                    tools.installApk(file,MainActivity.this);                    pd.dismiss(); //结束掉进度条对话框                } catch (Exception e) {                    e.printStackTrace();                }            }}.start();    }    /*     * 从服务器获取xml解析并进行比对版本号     */    public class CheckVersionTask implements Runnable{        public void run() {            try {                //从资源文件获取服务器 地址                String path = getResources().getString(R.string.serverurl);                //包装成url的对象                URL url = new URL(path);                HttpURLConnection conn =  (HttpURLConnection) url.openConnection();                conn.setConnectTimeout(5000);                InputStream is =conn.getInputStream();                updateEntity =  UpdateTools.getUpdataInfo(is);                int versionCode = MainActivity.this.getPackageManager().getPackageInfo(MainActivity.this.getPackageName(), 0).versionCode;                if(Integer.parseInt(updateEntity.getVersion()) <= versionCode){                    Log.i("xxx","版本号相同无需升级");                }else{                    Log.i("xxxx","版本号不同 ,提示用户升级 ");                    handler.sendEmptyMessage(0);                }            } catch (Exception e) {                e.printStackTrace();            }        }    }    /**     * 下载方法     *     * @param path     * @param pd     * @return     * @throws Exception     */    public File getFileFromServer(String path, ProgressDialog pd)            throws Exception {        // 如果相等的话表示当前的sdcard挂载在手机上并且是可用的        if (Environment.getExternalStorageState().equals(                Environment.MEDIA_MOUNTED)) {            URL url = new URL(path);            HttpURLConnection conn = (HttpURLConnection) url.openConnection();            conn.setConnectTimeout(5000);            // 获取到文件的大小            pd.setMax(conn.getContentLength());            InputStream is = conn.getInputStream();            File file = new File(Environment.getExternalStorageDirectory(),                    "updata.apk");            FileOutputStream fos = new FileOutputStream(file);            BufferedInputStream bis = new BufferedInputStream(is);            byte[] buffer = new byte[1024];            int len;            int total = 0;            while ((len = bis.read(buffer)) != -1) {                fos.write(buffer, 0, len);                total += len;                // 获取当前下载量                pd.setProgress(total);            }            fos.close();            bis.close();            is.close();            return file;        } else {            return null;        }    }    @Override    protected void onPause() {        Log.w(Conf.TAG, "Activity1.onPause()");        // TODO Auto-generated method stub        super.onPause();    }    @Override    protected void onResume() {        Log.w(Conf.TAG, "Activity1.onResume()");        // TODO Auto-generated method stub        super.onResume();    }}

辅助类1(Conf):

package com.example.update;public class Conf {    public static final String TAG = "Baidu Mobstat";} 

辅助类2(UpdateEntity):

package com.example.update;/** * 鐗堟湰鏇存柊淇℃伅鐨勫皝瑁� * * @author dagang * */public class UpdateEntity {    private String version;    private String 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;    }}

辅助类3(UpdateTools)

package com.example.update;import java.io.File;import java.io.InputStream;import org.xmlpull.v1.XmlPullParser;import android.content.Context;import android.content.Intent;import android.net.Uri;import android.util.Xml;/** * * 鑾峰彇鏈嶅姟鍣ㄧ殑鏇存柊鍐呭 * * 褰撳墠鐗堟湰 * * apk鐨勮矾寰� * * 鏇存柊缁嗗垯 * * @author dagang * */public class UpdateTools {    /*     * 鐢╬ull瑙f瀽鍣ㄨВ鏋愭湇鍔″櫒杩斿洖鐨剎ml鏂囦欢 (xml灏佽浜嗙増鏈彿)     */    public static UpdateEntity getUpdataInfo(InputStream is) throws Exception {        XmlPullParser parser = Xml.newPullParser();        parser.setInput(is, "utf-8");// 璁剧疆瑙f瀽鐨勬暟鎹簮        int type = parser.getEventType();        UpdateEntity info = new UpdateEntity();// 瀹炰綋        while (type != XmlPullParser.END_DOCUMENT) {            switch (type) {                case XmlPullParser.START_TAG:                    if ("version".equals(parser.getName())) {                        info.setVersion(parser.nextText()); // 鑾峰彇鐗堟湰鍙�                    } else if ("url".equals(parser.getName())) {                        info.setUrl(parser.nextText()); // 鑾峰彇瑕佸崌绾х殑APK鏂囦欢                    } else if ("description".equals(parser.getName())) {                        info.setDescription(parser.nextText()); // 鑾峰彇璇ユ枃浠剁殑淇℃伅                    }                    break;            }            type = parser.next();        }        return info;    }    /**     *     * 瀹夎Apk     *     * @param file     * @param context     */    public void installApk(File file,Context context) {        Intent intent = new Intent();        //鎵ц鍔ㄤ綔        intent.setAction(Intent.ACTION_VIEW);        //鎵ц鐨勬暟鎹被鍨�        intent.setDataAndType(Uri.fromFile(file), "application/vnd.android.package-archive");        context.startActivity(intent);    }}

@String引用:

 <string name="serverurl">http://169.254.172.144:8080/goods_file/update_file.xml</string>
0 0
原创粉丝点击