版本更新

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们提供更优质的服务。细心的你,一定可以发现更新的细节。如果你喜欢,请考虑在各大应用市场给予我们五星好评!你的肯定,是开源中国不断进步的动力。";

//返回的安装包url
private 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 {

@Override
protected 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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值