软件功能自动更新方法

import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;

import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
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;


    public class UpdateManger {
         // 应用程序Context
         private Context mContext;
         // 提示消息
         private String updateMsg = "有最新的软件包,请下载!";
         // 下载安装包的网络路径
         private String apkUrl = "http://softfile.3g.qq.com:8080/msoft/179/24659/43549/qq_hd_mini_1.4.apk";
         private Dialog noticeDialog;// 提示有软件更新的对话框
         private Dialog downloadDialog;// 下载对话框
         private static final String savePath = "/sdcard/updatedemo/";// 保存apk的文件夹
         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;// 用户取消下载
         // 通知处理刷新界面的handler
         private Handler mHandler = new Handler() {
          @Override
          public void handleMessage(Message msg) {
           switch (msg.what) {
           case DOWN_UPDATE:
            mProgress.setProgress(progress);
            break;
           case DOWN_OVER:
            installApk();
            break;
           }
           super.handleMessage(msg);
          }
         };
         public UpdateManger(Context context) {
          this.mContext = context;
         }
         // 显示更新程序对话框,供主程序调用
         public void checkUpdateInfo() {
          showNoticeDialog();
         }
         private void showNoticeDialog() {
          android.app.AlertDialog.Builder builder = new android.app.AlertDialog.Builder(
            mContext);// Builder,可以通过此builder设置改变AleartDialog的默认的主题样式及属性相关信息
          builder.setTitle("软件版本更新");
          builder.setMessage(updateMsg);
          builder.setPositiveButton("下载", new OnClickListener() {
           @Override
           public void onClick(DialogInterface dialog, int which) {
            dialog.dismiss();// 当取消对话框后进行操作一定的代码?取消对话框
            showDownloadDialog();
           }
          });
          builder.setNegativeButton("以后再说", new OnClickListener() {
           @Override
           public void onClick(DialogInterface dialog, int which) {
            dialog.dismiss();
           }
          });
          noticeDialog = builder.create();
          noticeDialog.show();
         }
         protected void showDownloadDialog() {
          android.app.AlertDialog.Builder builder = new android.app.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);// 设置对话框的内容为一个View
          builder.setNegativeButton("取消", new OnClickListener() {
           @Override
           public void onClick(DialogInterface dialog, int which) {
            dialog.dismiss();
            interceptFlag = true;
           }
          });
          downloadDialog = builder.create();
          downloadDialog.show();
          downloadApk();
         }
         private void downloadApk() {
          downLoadThread = new Thread(mdownApkRunnable);
          downLoadThread.start();
         }
         protected 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");// File.toString()会返回路径信息
          mContext.startActivity(i);
         }
         private Runnable mdownApkRunnable = new Runnable() {
          @Override
          public void run() {
           URL url;
           try {
            url = new URL(apkUrl);
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            conn.connect();
            int length = conn.getContentLength();
            InputStream ins = conn.getInputStream();
            File file = new File(savePath);
            if (!file.exists()) {
             file.mkdir();
            }
            String apkFile = saveFileName;
            File ApkFile = new File(apkFile);
            FileOutputStream outStream = new FileOutputStream(ApkFile);
            int count = 0;
            byte buf[] = new byte[1024];
            do {
             int numread = ins.read(buf);
             count += numread;
             progress = (int) (((float) count / length) * 100);
             // 下载进度
             mHandler.sendEmptyMessage(DOWN_UPDATE);
             if (numread <= 0) {
              // 下载完成通知安装
              mHandler.sendEmptyMessage(DOWN_OVER);
              break;
             }
             outStream.write(buf, 0, numread);
            } while (!interceptFlag);// 点击取消停止下载
            outStream.close();
            ins.close();
           } catch (Exception e) {
            e.printStackTrace();
           }
          }
         };

        }


布局文件:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content" >
<ProgressBar
android:id="@+id/progress"
style="?android:attr/progressBarStyleHorizontal"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
</LinearLayout>


MainActivity调用

    mUpdateManger = new UpdateManger(MainActivity.this);
        mUpdateManger.checkUpdateInfo();


记得添加权限

<uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值