haijiang
2018-09-19 82cc6c94fdc08b1814fbf7195e88cf335eed3e8d
app/src/main/java/com/moral/yunfushao/update/UpdateManager.java
@@ -20,18 +20,34 @@
import android.view.View;
import android.widget.ProgressBar;
import com.lzy.okgo.OkGo;
import com.lzy.okgo.cache.CacheMode;
import com.lzy.okgo.callback.StringCallback;
import com.lzy.okgo.request.BaseRequest;
import com.moral.andbrickslib.utils.log.XLog;
import com.moral.yunfushao.MainActivity;
import com.moral.yunfushao.R;
import com.moral.yunfushao.common.API;
import com.moral.yunfushao.httputils.HttpCallBack;
import com.moral.yunfushao.httputils.HttpUtils;
import com.moral.yunfushao.utils.T;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.HashMap;
import okhttp3.Call;
import okhttp3.Response;
public class UpdateManager {
    /* 下载中 */
@@ -99,6 +115,33 @@
    }
    /**
     * 检测软件更新
     */
    public void checkUpdateJson() {
        String data = getUrlData(API.UPDATE);
        try {
            JSONObject resJosn = new JSONObject(data);
            mHashMap = new HashMap<>();
            mHashMap.put("version", resJosn.optString("version"));
            mHashMap.put("name", resJosn.optString("name"));
            mHashMap.put("message", "");
            mHashMap.put("url", resJosn.optString("url"));
            if (isUpdate()) {
                if (Build.VERSION.SDK_INT >= 23) {
                    mActivity.updateAPP();
                } else {
                    // 显示提示对话框
                    showNoticeDialog();
                }
            } else {
//                Log.d("haijiang","已经是最新版本");
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    /**
     * 检查软件是否有更新版本
     *
     * @return
@@ -141,7 +184,7 @@
        // 构造对话框
        Builder builder = new Builder(mActivity);
        builder.setTitle(R.string.soft_update_title);
        if(message == null || message.isEmpty()) {
        if (message == null || message.isEmpty()) {
            builder.setMessage(R.string.soft_update_info);
        } else {
            builder.setMessage(message);
@@ -172,8 +215,7 @@
    /**
     * 显示软件下载对话框
     */
    private void showDownloadDialog()
    {
    private void showDownloadDialog() {
        // 构造软件下载对话框
        Builder builder = new Builder(mActivity);
        builder.setTitle(R.string.soft_updating);
@@ -183,11 +225,9 @@
        mProgress = (ProgressBar) v.findViewById(R.id.update_progress);
        builder.setView(v);
        // 取消更新
        builder.setNegativeButton(R.string.soft_update_cancel, new OnClickListener()
        {
        builder.setNegativeButton(R.string.soft_update_cancel, new OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which)
            {
            public void onClick(DialogInterface dialog, int which) {
                dialog.dismiss();
                // 设置取消状态
                cancelUpdate = true;
@@ -202,8 +242,7 @@
    /**
     * 下载apk文件
     */
    private void downloadApk()
    {
    private void downloadApk() {
        // 启动新线程下载软件
        new downloadApkThread().start();
    }
@@ -212,8 +251,8 @@
     * 下载文件线程
     *
     * @author coolszy
     *@date 2012-4-26
     *@blog http://blog.92coding.com
     * @date 2012-4-26
     * @blog http://blog.92coding.com
     */
    private class downloadApkThread extends Thread {
        @Override
@@ -221,49 +260,49 @@
            try {
                // 判断SD卡是否存在,并且是否具有读写权限
                //if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
                    // 获得存储卡的路径
                    //String sdpath = Environment.getExternalStorageDirectory() + "/";
                    //mSavePath = sdpath + "download";
                // 获得存储卡的路径
                //String sdpath = Environment.getExternalStorageDirectory() + "/";
                //mSavePath = sdpath + "download";
                    mSavePath = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS) + "/";
                mSavePath = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS) + "/";
                    URL url = new URL(mHashMap.get("url"));
                    // 创建连接
                    HttpURLConnection conn = (HttpURLConnection) url.openConnection();
                    conn.connect();
                    // 获取文件大小
                    int length = conn.getContentLength();
                    // 创建输入流
                    InputStream is = conn.getInputStream();
                URL url = new URL(mHashMap.get("url"));
                // 创建连接
                HttpURLConnection conn = (HttpURLConnection) url.openConnection();
                conn.connect();
                // 获取文件大小
                int length = conn.getContentLength();
                // 创建输入流
                InputStream is = conn.getInputStream();
                    File file = new File(mSavePath);
                    // 判断文件目录是否存在
                    if (!file.exists()) {
                        file.mkdir();
                File file = new File(mSavePath);
                // 判断文件目录是否存在
                if (!file.exists()) {
                    file.mkdir();
                }
                File apkFile = new File(mSavePath, mHashMap.get("name"));
                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(DOWNLOAD);
                    if (numread <= 0) {
                        // 下载完成
                        mHandler.sendEmptyMessage(DOWNLOAD_FINISH);
                        break;
                    }
                    File apkFile = new File(mSavePath, mHashMap.get("name"));
                    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(DOWNLOAD);
                        if (numread <= 0) {
                            // 下载完成
                            mHandler.sendEmptyMessage(DOWNLOAD_FINISH);
                            break;
                        }
                        // 写入文件
                        fos.write(buf, 0, numread);
                    } while (!cancelUpdate);// 点击取消就停止下载.
                    fos.close();
                    is.close();
                    // 写入文件
                    fos.write(buf, 0, numread);
                } while (!cancelUpdate);// 点击取消就停止下载.
                fos.close();
                is.close();
                //}
            } catch (MalformedURLException e) {
                e.printStackTrace();
@@ -273,7 +312,9 @@
            // 取消下载对话框显示
            mDownloadDialog.dismiss();
        }
    };
    }
    ;
    /**
     * 安装APK文件
@@ -288,4 +329,32 @@
        i.setDataAndType(Uri.parse("file://" + apkfile.toString()), "application/vnd.android.package-archive");
        mActivity.startActivity(i);
    }
    public static String getUrlData(String path) {
        BufferedReader br = null;
        StringBuffer sb = new StringBuffer();
        HttpURLConnection connection = null;
        try {
            URL url = new URL(path);
            connection = (HttpURLConnection) url.openConnection();
            connection.setRequestMethod("GET");
            connection.setConnectTimeout(8000);
            connection.setReadTimeout(8000);
            br = new BufferedReader(new InputStreamReader(connection.getInputStream()));
            String s = null;
            while ((s = br.readLine()) != null) {
                sb.append(s);
            }
            br.close();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (connection != null) {
                connection.disconnect();
            }
        }
        return sb.toString();
    }
}