package com.tutor.update;
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 = "有最新的软件包哦,亲快下载吧~";
//返回的安装包url
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/";
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() {
@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();
}
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() {
@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 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);
}
}
yxkfw
- 粉丝: 82
- 资源: 2万+
最新资源
- 基于遗忘因子递推最小二乘FFRLS与EKF算法的锂电池参数与状态联合SOC估计:算法介绍、参考文献及模型文档使用说明,基于遗忘因子递推最小二乘FFRLS和EKF的锂电池参数与状态联合SOC估计 1、采
- "基于HPPC工况二阶RC卡尔曼滤波EKF算法的锂电池SOC估计仿真研究:包含仿真数据与算法说明文档的详细分析",基于二阶RC卡尔曼滤波EKF的锂电池SOC估计仿真 仿真数据:HPPC工况,模型中自带
- 网上拍卖系统 免费JAVA毕业设计 2024成品源码+论文+录屏+启动教程.zip
- 《基于Comsol仿真的热光伏电池(TPV)研究》,comsol仿真:热光伏电池(TPV) #comsol仿真 ,comsol仿真;热光伏电池(TPV);光伏模拟,"Comsol仿真技术在热光伏电池(
- 小区停车位管理系统 免费JAVA毕业设计 2024成品源码+论文+录屏+启动教程.zip
- 养老院管理系统 免费JAVA毕业设计 2024成品源码+论文+录屏+启动教程.zip
- 游乐园管理系统 免费JAVA毕业设计 2024成品源码+论文+录屏+启动教程.zip
- 地下城堡_sign.apk
- **《三相静止无功发生器SVG并网仿真模型及结果分析(附详细31页Word报告)》**,三相静止无功发生器SVG并网仿真模型(附说明报告) 仿真带一份与仿真完全对应的31页Word报告可结合仿真快速入
- "comsol模拟下的双裂纹损伤扩展与压裂行为研究",comsol 双裂纹损伤扩展 压裂 ,comsol;双裂纹损伤;损伤扩展;压裂;,"Comsol模拟双裂纹损伤扩展及压裂行为研究"
- 光伏储能系统三相PQ恒功率并网控制策略仿真研究-基于双闭环控制与MPPT算法的优化实践(附参考文献及文档),光伏储能三相PQ恒功率并网控制仿真(附参考文献及文档) ①网侧:采用PQ恒功率控制,参考文
- "COMSOL仿真分析电缆局部放电超声波传播特性及影响因素研究",comsol仿真电缆局部放电产生的超声波在电缆中传播特征 ,仿真; 局部放电; 超声波; 传播特征; 电缆;,COMSOL仿真电缆局部
- COMSOL软件多物理场仿真教程:电热力耦合传热及微波加热优化实践,comsol软件教程,电热力耦合,动网格,传热,优化,微波加热,压电(非comsol官网搬运) comsol仿真教程,多物理场,建模
- "Comsol 6.2版本流固耦合注浆分析:融入达西定律与固体力学模块的渗流场与结构场耦合实践案例",Comsol流固耦合注浆及冒浆分析(6.2版本) 采用其中达西定律模块及固体力学模块,通过建立质量
- 《TC3XX Autosar系统中文配置手册:涵盖19个模块的详细指南与联系信息》,tc3xx autosar EB中文配置手册,需要联系 一共有大约19个模块 ,tc3xx;autosar;E
- 基于改进滑模观测器的永磁同步电机无传感器控制:降低抖振,提高转子速度与位置估计精度的新方法,基于smo的永磁同步电机无传感器控制 为了减少传统滑模观测器(SMO)中由于控制函数不连续而引起的抖振,提出
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈