• apk在线更新


    package gejw.android.weather;

    import gejw.android.weather.Constants.Constants;
    import gejw.android.weather.piccl.MyLog;

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

    import org.json.JSONObject;

    import android.app.AlertDialog;
    import android.app.ProgressDialog;
    import android.content.Context;
    import android.content.DialogInterface;
    import android.content.Intent;
    import android.content.pm.PackageInfo;
    import android.content.pm.PackageManager;
    import android.net.Uri;
    import android.os.Environment;
    import android.os.Handler;
    import android.os.Looper;
    import android.os.Message;
    import android.util.Log;
    import android.widget.Toast;

    public class Update {
    private Context context;
    private int downLoadFileSize;
    private ProgressDialog mpDialog;
    private int fileSize;

    //用的json文件进行版本更新 json文件内容 {"update":{"VersionInfo":"1.5"}}

    public Update(Context c, int i) {
    this.context = c;
    String server_VersionInfo = "";//服务器版本号
    String local_VersionInfo = getAppVersionName(context); //本地程序版本号
    try {
    String url = Constants.Update_URL + Constants.Update_html_Name;//服务器文件地址
    BufferedReader in = new BufferedReader(new InputStreamReader(
    new URL(url).openStream()));
    String string;
    while ((string = in.readLine()) != null) {
    JSONObject jsonObject = new JSONObject(string.toString())
    .getJSONObject("update");
    server_VersionInfo = jsonObject.getString("VersionInfo");
    // _115url=jsonObject.getString("update_url");
    }
    } catch (Exception e) {
    // TODO: handle exception
    }
    if (Double.parseDouble(server_VersionInfo) > Double
    .parseDouble(local_VersionInfo)) {
    new AlertDialog.Builder(context)
    .setMessage("检测到新版本"+server_VersionInfo+",是否要更新?")
    .setNeutralButton("好的",
    new DialogInterface.OnClickListener() {

    @Override
    public void onClick(DialogInterface dialog,
    int which) {
    // TODO Auto-generated method stub
    // 进度框
    mpDialog = new ProgressDialog(context);
    mpDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);// 设置风格为长进度条
    // mpDialog.setIcon(R.drawable.icon);//设置图标
    // mpDialog.setMessage("正在下载中,请稍后");
    mpDialog.setIndeterminate(false);// 设置进度条是否为不明确
    // false
    // 就是不设置为不明确
    mpDialog.setCancelable(true);// 设置进度条是否可以按退回键取消
    mpDialog.setProgress(0);
    mpDialog.incrementProgressBy(1); // 增加和减少进度,这个属性必须的
    mpDialog.show();
    downLoadFile();
    }
    }).setPositiveButton("不要", null).show();

    } else {
    switch (i) {
    case 1:
    Toast.makeText(context, "无可用更新!", Toast.LENGTH_LONG).show();
    break;
    }

    }

    }

    private void sendMsg(int flag) {
    Message msg = new Message();
    msg.what = flag;
    handler.sendMessage(msg);
    }

    private final Handler handler = new Handler(Looper.getMainLooper()) {
    public void handleMessage(Message msg) {
    // super.handleMessage(msg);
    if (!Thread.currentThread().isInterrupted()) {
    Log.i("msg what", String.valueOf(msg.what));
    switch (msg.what) {
    case 0:
    // pbr.setMax(fileSize);
    mpDialog.setMax(100);
    break;
    case 1:
    int result = downLoadFileSize * 100 / fileSize;
    mpDialog.setProgress(result);
    break;
    case 2:
    // mpDialog.setMessage("文件下载完成");
    openFile();
    mpDialog.cancel();
    break;
    case -1:
    String error = msg.getData().getString("error");
    mpDialog.setMessage(error);
    break;
    default:
    break;
    }
    }
    super.handleMessage(msg);
    }
    };

    private void openFile() {
    // TODO Auto-generated method stub
    File file = new File(Environment.getExternalStorageDirectory() + "/"
    + Constants.App_Name); //下载的apk文件保存地址
    Intent intent = new Intent();
    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    intent.setAction(android.content.Intent.ACTION_VIEW);
    intent.setDataAndType(Uri.fromFile(file),
    "application/vnd.android.package-archive");
    context.startActivity(intent);
    }

    private void downLoadFile() {
    // TODO Auto-generated method stub
    new Thread() {
    public void run() {
    String update_url = Constants.Update_URL + Constants.App_Name;
    URL url = null;
    try {
    url = new URL(update_url);
    HttpURLConnection con = (HttpURLConnection) url
    .openConnection();
    InputStream in = con.getInputStream();
    fileSize = con.getContentLength();
    File fileOut = new File(
    Environment.getExternalStorageDirectory() + "/"
    + Constants.App_Name);
    FileOutputStream out = new FileOutputStream(fileOut);
    byte[] bytes = new byte[1024];
    downLoadFileSize = 0;
    sendMsg(0);
    int c;
    while ((c = in.read(bytes)) != -1) {
    out.write(bytes, 0, c);
    downLoadFileSize += c;
    sendMsg(1);// 更新进度条
    }
    in.close();
    out.close();
    } catch (Exception e) {
    // TODO Auto-generated catch block
    new MyLog(e.toString());
    }
    sendMsg(2);// 下载完成
    try {

    } catch (Exception e) {
    // TODO Auto-generated catch block
    new MyLog(e.toString());
    }
    }
    }.start();
    }

    public String getAppVersionName(Context context) {
    String versionName = "";
    try {
    // ---get the package info---
    PackageManager pm = context.getPackageManager();
    // 这里的context.getPackageName()可以换成你要查看的程序的包名
    PackageInfo pi = pm.getPackageInfo(context.getPackageName(), 0);
    versionName = pi.versionName;
    if (versionName == null || versionName.length() <= 0) {
    return "";
    }
    } catch (Exception e) {
    new MyLog(e.toString());
    }
    return versionName;
    }
    }

  • 相关阅读:
    关于虚函数,构造函数,非构造函数之间的交叉调用
    关于虚函数,类的内存分布以及类的成员函数调用原理
    以数组作为形参
    opengl渲染管线梳理
    C++ struct,class的内存对齐
    关于虚函数的原理
    利用Attribute和IErrorHandler处理WCF全局异常
    HandleErrorAttribute
    Using native JSON
    iis8不支持 aspnet_regiis.exe -iru 命令的解决办法
  • 原文地址:https://www.cnblogs.com/Sora-L/p/9608069.html
Copyright © 2020-2023  润新知