android APK升级
来源:互联网 发布:手机淘宝排名提升 编辑:程序博客网 时间:2024/05/19 01:07
1.获取版本号
2.对比版本号
3.下载apk文件
4.启动安装
/** * 升级 * * @param view */public void onUpgrade(View view) { if (isUpgrade) { return; } isUpgrade = true; mUpdateAPKThread = new UpdateAPKThread(this, "url"); new UpgradeThread().start();}
class UpgradeThread extends Thread { @Override public void run() { super.run(); boolean flag = mUpdateAPKThread.checkIsNeedUpdate(); Message msg = Message.obtain(); msg.what = KEY_UPGRADE; Bundle bundle = new Bundle(); bundle.putBoolean("upgrade", flag); msg.setData(bundle); handler.sendMessage(msg); }}case KEY_UPGRADE: if (msg.getData().getBoolean("upgrade")) { String message = mUpdateAPKThread.getDetail(); new AlertDialog.Builder(LoginActivity.this) .setCancelable(false) .setTitle(getString(R.string.upgrade)) .setMessage(message) .setPositiveButton(getString(R.string.confirm), new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { mProgressDialog = new MyProgressDialog(LoginActivity.this, getString(R.string.load), false); mUpdateAPKThread.startDownloadThread(); isUpgrade = false; } }) .setNegativeButton(getString(R.string.cancel), new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { isUpgrade = false; } }).create().show(); } else { Yancy.warning(LoginActivity.this, getString(R.string.version)).show(); isUpgrade = false; } break;/** * 文件长度 */private int max = 0;@Overridepublic void setMax(int length) { max = length;}@Overridepublic void setProgresss(int len) { mProgressDialog.setProgress(len * 100 / max);}@Overridepublic void onSuccess() { mUpdateAPKThread.installApk(); mProgressDialog.dismiss();}@Overridepublic void onFail() { Yancy.error(this, getString(R.string.download_failed)).show(); mProgressDialog.dismiss();}package com.yancy.sdk.upgrade;import android.content.Context;import android.content.Intent;import android.content.pm.PackageManager.NameNotFoundException;import android.net.Uri;import android.os.Environment;import android.os.Handler;import android.os.Looper;import com.yancy.sdk.app.App;import com.yancy.sdk.utils.AppUtils;import org.json.JSONException;import org.json.JSONObject;import java.io.ByteArrayOutputStream;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;/** * create by dpc on 2017-5-10 */public class UpdateAPKThread { private Context mContext; private String strURL; private File downloadFile; private DownloadListener downloadListener; private String detail; private String varUrl; private String apkName; private Handler mHandler = new Handler(Looper.getMainLooper()) { public void handleMessage(android.os.Message msg) { switch (msg.what) { case 0: downloadListener.setMax((int) msg.obj); break; case 1: downloadListener.setProgresss((int) msg.obj); break; case 2: downloadListener.onSuccess(); break; case 3: downloadListener.onFail(); break; default: break; } } }; public UpdateAPKThread(Context mContext, String strURL) { this.mContext = mContext; this.strURL = strURL; setDownloadListener((DownloadListener) mContext); } public void setDownloadListener(DownloadListener downloadListener) { this.downloadListener = downloadListener; } public interface DownloadListener { /** * 设置文件长度 * * @param length */ void setMax(int length); /** * 进度 * * @param len */ void setProgresss(int len); /** * 成功 */ void onSuccess(); /** * 失败 */ void onFail(); } /** * 是否需要更新 * * @return */ public boolean checkIsNeedUpdate() { if (strURL.equals("")) { return false; } String data = getJsonContent(strURL); if (data.equals("")) { return false; } return parseJson(mContext, data); } private boolean parseJson(Context context, String strResult) { try { JSONObject jsonObject = new JSONObject(strResult); String verName = jsonObject.getString("verName"); String verCode = jsonObject.getString("verCode"); varUrl = jsonObject.getString("varUrl"); detail = jsonObject.getString("detail"); apkName = jsonObject.getString("apkname"); int code = Integer.parseInt(verCode); if (code > AppUtils.getVersionCode(context)) { return true; } } catch (JSONException e) { e.printStackTrace(); } catch (NumberFormatException e) { e.printStackTrace(); } return false; } private String getJsonContent(String urlStr) { try { URL url = new URL(urlStr); HttpURLConnection httpConn = (HttpURLConnection) url .openConnection(); // 设置连接属性 httpConn.setConnectTimeout(3000); httpConn.setDoInput(true); httpConn.setRequestMethod("GET"); httpConn.connect(); if (200 == httpConn.getResponseCode()) { return ConvertStream2Json(httpConn.getInputStream()); } } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return ""; } private String ConvertStream2Json(InputStream inputStream) { String jsonStr = ""; ByteArrayOutputStream out = new ByteArrayOutputStream(); byte[] buffer = new byte[1024]; int len = 0; try { while ((len = inputStream.read(buffer, 0, buffer.length)) != -1) { out.write(buffer, 0, len); } jsonStr = new String(out.toByteArray()); } catch (IOException e) { e.printStackTrace(); } return jsonStr; } public String getDetail() { return detail; } Thread mThread; boolean isDownloading = false; public void startDownloadThread() { final String urlStr = varUrl; final String fileName = apkName; mThread = new Thread() { public void run() { isDownloading = true; try { URL url = new URL(urlStr); HttpURLConnection conn = (HttpURLConnection) url .openConnection(); // 获得文件的长度 int contentLength = conn.getContentLength(); mHandler.obtainMessage(0, contentLength).sendToTarget(); File filePath = new File(Environment.getExternalStorageDirectory() + "/apk/"); if (!filePath.exists()) { filePath.mkdirs(); filePath = new File(Environment.getExternalStorageDirectory() + "/apk/" + "/.test.txt"); if (!filePath.exists()) try { filePath.createNewFile(); } catch (IOException e) { e.printStackTrace(); } FileNotification.updateNotify(filePath); } String pathName = Environment.getExternalStorageDirectory() + "/apk/" + fileName; downloadFile = new File(pathName); InputStream input = conn.getInputStream(); if (downloadFile.exists()) { downloadFile.delete(); } downloadFile.createNewFile(); FileOutputStream output = new FileOutputStream(downloadFile); byte[] buffer = new byte[1024]; int len; // 重要参数 int sum = 0; while ((len = input.read(buffer)) != -1 && isDownloading) { sum += len; mHandler.obtainMessage(1, sum).sendToTarget(); output.write(buffer, 0, len); Thread.sleep(1); } output.close(); input.close(); mHandler.obtainMessage(2).sendToTarget(); } catch (IOException e1) { mHandler.obtainMessage(3).sendToTarget(); e1.printStackTrace(); } catch (InterruptedException e) { e.printStackTrace(); } } }; mThread.start(); } /** * 安装APK文件 */ public void installApk() { if (downloadFile != null && !downloadFile.exists()) { return; } Intent i = new Intent(Intent.ACTION_VIEW); i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); i.setDataAndType(Uri.parse("file://" + downloadFile.toString()), "application/vnd.android.package-archive"); mContext.startActivity(i); }}
阅读全文
2 0
- Android 在线升级APK
- android apk 自动升级
- android apk在线升级
- Android 在线升级APK
- android APK升级
- Android apk增量升级
- [android] apk 版本升级
- android在线升级apk
- android APK升级
- android apk 升级代码
- 升级Android内置apk版本
- android apk自动升级实现
- android的apk自动检测升级
- android 做apk的升级
- android apk差分升级
- Android APK版本升级设计
- Android服务器端和客户端设计APK升级
- No 99 · 【android】apk在线升级
- hdu 6153 A Secret (kmp)
- Unity-jenkins持续集成--配置
- 中文拼音排序
- HDU 6153 A Secret(kmp)
- gulp插件之-----转化es6代码到es5 取消严格模式 remove "use strict" directive Installation npm install babel-plugin-t
- android APK升级
- 二、maven项目搭建 springmvc+ spring + mybatis(2环境)
- 北京搜狐大数据
- jquery学习-1
- oracle恢复删除的数据
- 微信小程序项目实例
- PL/SQL编程基础知识(一)
- 设计模式之观察者模式
- poj 1006 中国剩余定理