//解析通过Gson得到bean对象,对象中有url地址 和versonCode版本号
bean =gson.fromJson(msg,VersonBean.class);
String mcode=CommonParams.getCode();
if(bean.getVersonCode().equals(mcode)){
return;
}else{
AlertDialog.Builder builder=new AlertDialog.Builder(this);
builder.setTitle("提示更新");
builder.setIcon(R.drawable.warn);// 设置提示的title的图标,默认是没有的)
builder.setMessage("检测到最新版本,是否更新");
builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
if (ContextCompat.checkSelfPermission(MainActivity.this,
Manifest.permission.WRITE_EXTERNAL_STORAGE)
!= PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(MainActivity.this,
new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
MY_PERMISSIONS_REQUEST_CALL_PHONE);
} else {
if (bean == null || bean.getUrl().length() == 0) {
return;
}
downloadApk();//下载
}
}
});
builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
builder.show();
}
/** * 下载apk */ private void downloadApk() { pd6 = new ProgressDialog(this); pd6.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);// 设置水平进度条 pd6.setCancelable(false);// 设置是否可以通过点击Back键取消 pd6.setCanceledOnTouchOutside(false);// 设置在点击Dialog外是否取消Dialog进度条 pd6.setTitle("提示"); pd6.setMax(100); pd6.setProgress(0); pd6.setMessage("正在更新请稍后..."); pd6.show(); Thread downLoadThread = new Thread(mdownApkRunnable); downLoadThread.start(); }
//安装apk protected void installApk() { File apkfile = new File(saveFileName); if (!apkfile.exists()) { return; } Intent intent = new Intent(); //执行动作 intent.setAction(Intent.ACTION_VIEW); //执行的数据类型 intent.setDataAndType(Uri.fromFile(apkfile), "application/vnd.android.package-archive"); startActivity(intent); finishThisPage(); } private Runnable mdownApkRunnable = new Runnable() { @Override public void run() { try { URL url1 = new URL(url); HttpURLConnection conn = (HttpURLConnection) url1.openConnection(); conn.connect(); int length = conn.getContentLength(); is = conn.getInputStream(); File file = new File(savePath); if (!file.exists()) { file.mkdir(); } String apkFile = saveFileName; File ApkFile = new File(apkFile); 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); //Logger.i("logger_progress", "----------do---------------" + progress); //更新进度 mHandler.sendEmptyMessage(DOWN_UPDATE); mHandler.sendEmptyMessage(DOWN_YUYU); if (numread <= 0) { //下载完成通知安装 mHandler.sendEmptyMessage(DOWN_OVER); mHandler.sendEmptyMessage(DOWN_YUYUO); return; } fos.write(buf, 0, numread); }while (!interceptFlag&&!isStop);//点击取消就停止下载. fos.close(); is.close(); isStop=true; } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } };
//权限申请
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
if (requestCode == MY_PERMISSIONS_REQUEST_CALL_PHONE) {
if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
if (bean == null || bean.getUrl().length()==0) {
return;
}
downloadApk();
} else {
// Permission Denied
ToastUtils.showLong(MainActivity.this, "未获得权限!!");
}
return;
}
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
}