版本更新

来源:互联网 发布:淘宝客怎么看 编辑:程序博客网 时间:2024/06/05 02:49
import android.support.v7.app.AppCompatActivity;import android.os.Bundle;public class MainActivity extends AppCompatActivity {    private UpdateManager mUpdateManager;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        //这里来检测版本是否需要更新        mUpdateManager = new UpdateManager(this);        mUpdateManager.checkUpdateInfo();    }}
import android.app.AlertDialog;import android.app.Dialog;import android.content.Context;import android.content.DialogInterface;import android.content.Intent;import android.net.Uri;import android.os.Handler;import android.os.Message;import android.view.LayoutInflater;import android.view.View;import android.widget.ProgressBar;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.net.HttpURLConnection;import java.net.MalformedURLException;import java.net.URL;/** * Created by Liqf on 2017.09.16. */public class UpdateManager {    private Context mContext;    //提示语    private String updateMsg = "有最新的软件包,快更新下载吧!";    //返回的安装包url    private String apkUrl = "http://gdown.baidu.com/data/wisegame/f98d235e39e29031/baiduxinwen.apk";    private Dialog noticeDialog;    private Dialog downloadDialog;    /* 下载包安装路径 */    private static final String savePath = "/sdcard/updatedemo/";    private static final String saveFileName = savePath + "UpdateDemoRelease.apk";    /* 进度条与通知ui刷新的handler和msg常量 */    private ProgressBar mProgress;    private static final int DOWN_UPDATE = 1;    private static final int DOWN_OVER = 2;    private int progress;    private Thread downLoadThread;    private boolean interceptFlag = false;    private Handler mHandler = new Handler(){        public void handleMessage(Message msg) {            switch (msg.what) {                case DOWN_UPDATE:                    mProgress.setProgress(progress);                    break;                case DOWN_OVER:                    installApk();                    break;                default:                    break;            }        };    };    public UpdateManager(Context context) {        this.mContext = context;    }    //外部接口让主Activity调用    public void checkUpdateInfo(){        showNoticeDialog();    }    private void showNoticeDialog(){        AlertDialog.Builder builder = new AlertDialog.Builder(mContext);        builder.setTitle("软件版本更新");        builder.setMessage(updateMsg);        builder.setPositiveButton("下载", new DialogInterface.OnClickListener() {            @Override            public void onClick(DialogInterface dialog, int which) {                dialog.dismiss();                showDownloadDialog();            }        });        builder.setNegativeButton("以后再说", new DialogInterface.OnClickListener() {            @Override            public void onClick(DialogInterface dialog, int which) {                dialog.dismiss();            }        });        noticeDialog = builder.create();        noticeDialog.show();    }    private void showDownloadDialog(){        AlertDialog.Builder builder = new AlertDialog.Builder(mContext);        builder.setTitle("软件版本更新");        final LayoutInflater inflater = LayoutInflater.from(mContext);        View v = inflater.inflate(R.layout.progress, null);        mProgress = (ProgressBar)v.findViewById(R.id.progress);        builder.setView(v);        builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {            @Override            public void onClick(DialogInterface dialog, int which) {                dialog.dismiss();                interceptFlag = true;            }        });        downloadDialog = builder.create();        downloadDialog.show();        downloadApk();    }    private Runnable mdownApkRunnable = new Runnable() {        @Override        public void run() {            try {                URL url = new URL(apkUrl);                HttpURLConnection conn = (HttpURLConnection)url.openConnection();                conn.connect();                int length = conn.getContentLength();                InputStream is = conn.getInputStream();                File file = new File(savePath);                if(!file.exists()){                    file.mkdir();                }                String apkFile = saveFileName;                File ApkFile = new File(apkFile);                FileOutputStream fos = new FileOutputStream(ApkFile);                int count = 0;                byte buf[] = new byte[1024];                do{                    int numread = is.read(buf);                    count += numread;                    progress =(int)(((float)count / length) * 100);                    //更新进度                    mHandler.sendEmptyMessage(DOWN_UPDATE);                    if(numread <= 0){                        //下载完成通知安装                        mHandler.sendEmptyMessage(DOWN_OVER);                        break;                    }                    fos.write(buf,0,numread);                }while(!interceptFlag);//点击取消就停止下载.                fos.close();                is.close();            } catch (MalformedURLException e) {                e.printStackTrace();            } catch(IOException e){                e.printStackTrace();            }        }    };    /**     * 下载apk     * @param     */    private void downloadApk(){        downLoadThread = new Thread(mdownApkRunnable);        downLoadThread.start();    }    /**     * 安装apk     * @param     */    private void installApk(){        File apkfile = new File(saveFileName);        if (!apkfile.exists()) {            return;        }        Intent i = new Intent(Intent.ACTION_VIEW);        i.setDataAndType(Uri.parse("file://" + apkfile.toString()), "application/vnd.android.package-archive");        mContext.startActivity(i);    }}

XML布局文件
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"     android:layout_width="match_parent"    android:layout_height="match_parent">    <ProgressBar        android:id="@+id/progress"        android:layout_width="fill_parent"        android:layout_height="wrap_content"        style="?android:attr/progressBarStyleHorizontal"        ></ProgressBar>
</LinearLayout>
 


 
原创粉丝点击