您的位置:首页 > 移动开发 > Android开发

Android 版本更新

2016-01-07 11:18 337 查看
1、添加权限

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


2、写一个工具类方法,UpdateManager.java,说明写的够详细了,易理解,弹出框为我自定义的。

public class UpdateManager {
private Context mContext;

/*安装提示语*/
private String updateMsg = "有最新的软件包哦,亲快下载吧~";

/*安装包URL*/
private String apkUrl;

/* 下载包安装路径 */
private static final String savePath = "/sdcard/updatedownload/";
/*下载包名字*/
private static final String saveFileName = savePath.trim()
+ "sunday.apk".trim();

/* 进度条与通知ui刷新的handler和msg常量 */
private ProgressBar mProgress;
/*下载进度*/
private static final int DOWN_UPDATE = 1;
/*下载完成*/
private static final int DOWN_OVER = 2;
/*用于更新下载的进度*/
private int progress;
/* 下载APK的线程 */
private Thread downLoadThread;
/* 新版本更新内容 */
private String message;
/* 最新版本的版本号 */
private String lastVersion;

private boolean interceptFlag = false;
/**
* handler通知
*/
private Handler mHandler = new Handler() {
public void handleMessage(Message msg) {
switch (msg.what) {
case DOWN_UPDATE:
mProgress.setProgress(progress);//下载进度
break;
case DOWN_OVER:
installApk();//下载完成,进行安装APK
break;
default:
break;
}
}

;
};

/**
* @param apkUrl
*            软件URL
* @param message
*            软件升级日志(有哪些功能更新)
* @param lastVersion
*            升级的最新版本
* @Description: TODO
* @author Sunday
* @date 2016年1月6日
*/
public UpdateManager(Context context, String apkUrl, String message,
String lastVersion) {
this.mContext = context;
this.apkUrl = apkUrl;
this.message = message;
this.lastVersion = lastVersion;
}

/**
*
* @Description: TODO 外部接口让主Activity调用
* @author Sunday
* @date 2016年1月7日
*/
public void checkUpdateInfo() {
showNoticeDialog();
}

/**
*
* @Description: TODO 升级提示对话框
* @author Sunday
* @date 2016年1月6日
*/
private void showNoticeDialog() {
final CommonDialog commonDialog = new CommonDialog(mContext);
commonDialog.show();
commonDialog.setCancel(true, "检测到您有新的版本可以更新" + lastVersion);
commonDialog.setUpdateMessage(message);
commonDialog.setCanceledOnTouchOutside(false);
commonDialog.setDialog_cancel_text("稍后更新");
commonDialog.setDialog_ok_text("立即更新");
commonDialog.setBtnOnClick(new OnClickListener() {

@Override
public void onClick(View v) {
showDownloadDialog();
commonDialog.dismiss();
}
});
}

/**
*
* @Description: TODO 显示下载进度对话框
* @author Sunday
* @date 2016年1月6日
*/
private void showDownloadDialog() {

final CommonDialog commonDialog = new CommonDialog(mContext);
commonDialog.show();
mProgress = commonDialog.getmProgressBar();
commonDialog.showProgress();
commonDialog.goneTv_message();
commonDialog.setDialog_ok_text("取消");
commonDialog.setCancelable(false);
commonDialog.setCanceledOnTouchOutside(false);
commonDialog.setCancel(false, "正在为您下载最新版本");

commonDialog.setBtnOnClick(new OnClickListener() {
@Override
public void onClick(View v) {
commonDialog.dismiss();
interceptFlag = true;
}
});
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();
}

}
};

/**
*
* @Description: TODO 进行下载APK
* @author Sunday
* @date 2016年1月7日
*/

private void downloadApk() {
downLoadThread = new Thread(mdownApkRunnable);
downLoadThread.start();
}

/**
*
* @Description: TODO 进行安装APK
* @author Sunday
* @date 2016年1月7日
*/
private void installApk() {

File apkfile = new File(saveFileName);
if (!apkfile.exists()) {
return;
}
Intent i = new Intent(Intent.ACTION_VIEW);
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
i.setDataAndType(Uri.parse("file://" + apkfile.toString()),
"application/vnd.android.package-archive");
mContext.startActivity(i);

}
}


3、写一个检测是否有新版本的类,CheckUpdateManager.java

public class CheckUpdateManager implements ICallBackJson {

private Context context;
private WebHttpConnection webHttpConnection;
private VersionEntity app;
/* 判断是否是从首页调用该方法 */
private int flag;

public CheckUpdateManager(Context context, int flag) {
this.context = context;
webHttpConnection = new WebHttpConnection(this);
this.flag = flag;
}

/**
*
* @Description: TODO 访问网络接口,获得服务器端App版本
* @param
* @return void
* @throws
* @author Sunday
* @date 2016年1月6日
*/
public void checkVersion() {
webHttpConnection.getValue(ApiHttpAddress.UPDATA_VERSION, 1);
}

/**
*
* @Description: TODO 进行更新版本
* @param @param app
* @return void
* @throws
* @author Sunday
* @date 2016年1月7日
*/
protected void UpdateVersion(VersionEntity app) {
if (null == app) {
return;
}
PackageManager pm = context.getPackageManager();
PackageInfo pinfo = null;

try {
pinfo = pm.getPackageInfo(context.getPackageName(),
PackageManager.GET_CONFIGURATIONS);
} catch (NameNotFoundException e) {
e.printStackTrace();
}
int versionCode = pinfo.versionCode;
Log.e("服务器版本", app.getVersion());
Log.e("本机版本", String.valueOf(versionCode));
if (Integer.parseInt(app.getVersion()) > versionCode) {
UpdateManager mUpdateManager = new UpdateManager(context,
app.getUrl(), "", "");
mUpdateManager.checkUpdateInfo();
} else {
if (1 == flag) {
Toast.makeText(context, "已经是最新版本", Toast.LENGTH_LONG).show();
}
}
}

/*
* 网络请求失败回调
*/
@Override
public void requestJsonOnError(int msgFlag) {
// TODO Auto-generated method stub
((BaseActivity) context).cancelProgressDialog();
Log.e("msgFlag", String.valueOf(msgFlag));
}

/*
* 网络请求成功回调
*/
@Override
public void requestJsonOnSucceed(String json, int msgFlag) {
// TODO Auto-generated method stub
((BaseActivity) context).cancelProgressDialog();
if (1 == msgFlag) {
app = JSON.parseObject(json, VersionEntity.class);
if (null != app)
UpdateVersion(app);
}
}

}

首页需调用的方法检测版本更新

void checkUpdate() {
new Thread(new Runnable() {

@Override
public void run() {
// TODO Auto-generated method stub
CheckUpdateManager mCheckUpdateManager = new CheckUpdateManager(
mContext, 0);
mCheckUpdateManager.checkVersion();
}
}).start();
}


点击打开链接
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: