版本更新

来源:互联网 发布:java nanotime效率 编辑:程序博客网 时间:2024/05/16 05:33

package com.bwie.test;

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;

import android.app.AlertDialog;
import android.app.Dialog;
import android.app.AlertDialog.Builder;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.DialogInterface.OnClickListener;
import android.net.Uri;
import android.os.Handler;
import android.os.Message;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.ProgressBar;

public class UpdateManager {

private Context mContext;//提示语private String updateMsg = "每一次升级,我们竭尽全力为广大OSCer们提供更优质的服务。细心的你,一定可以发现更新的细节。如果你喜欢,请考虑在各大应用市场给予我们五星好评!你的肯定,是开源中国不断进步的动力。";//返回的安装包urlprivate String apkUrl = "http://www.oschina.net/uploads/osc-android-v2.6.4-release.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 Builder(mContext);    builder.setTitle("软件版本更新");    builder.setMessage(updateMsg);    builder.setPositiveButton("立即更新", new OnClickListener() {                    public void onClick(DialogInterface dialog, int which) {            dialog.dismiss();            showDownloadDialog();                    }    });    builder.setNegativeButton("以后再说", new OnClickListener() {                    public void onClick(DialogInterface dialog, int which) {            dialog.dismiss();                        }    });    noticeDialog = builder.create();    noticeDialog.show();}private void showDownloadDialog(){    AlertDialog.Builder builder = new 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 OnClickListener() {            public void onClick(DialogInterface dialog, int which) {            dialog.dismiss();            interceptFlag = true;        }    });    downloadDialog = builder.create();    downloadDialog.show();    downloadApk();}private Runnable mdownApkRunnable = new Runnable() {        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 url */private void downloadApk(){    downLoadThread = new Thread(mdownApkRunnable);    downLoadThread.start();} /** * 安装apk * @param url */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);}

}


package com.bwie.test;

import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.view.animation.Animation;
import android.view.animation.Animation.AnimationListener;
import android.view.animation.AnimationUtils;
import android.widget.ImageView;

public class MainActivity extends Activity {

@Overrideprotected void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentView(R.layout.activity_main);    //获得控件    ImageView img=(ImageView)findViewById(R.id.imageView1);    Animation anim=AnimationUtils.loadAnimation(getApplicationContext(), R.anim.rotate);    img.startAnimation(anim);    anim.setAnimationListener(new AnimationListener() {        @Override        public void onAnimationStart(Animation animation) {            // TODO Auto-generated method stub        }        @Override        public void onAnimationRepeat(Animation animation) {            // TODO Auto-generated method stub        }        @Override        public void onAnimationEnd(Animation animation) {            Intent intent=new Intent(MainActivity.this,Main2Activity.class);            startActivity(intent);        }    });}

}


// 检查版本更新
UpdateManager manager = new UpdateManager(this);
manager.checkUpdateInfo();


0 0
原创粉丝点击