yy1717
2020-07-23 1a8787e34f27d1ea8ecc8d7b0044ae9f650760e8
坐标
1个文件已修改
1个文件已添加
356 ■■■■ 已修改文件
lib/src/main/java/com/anyun/exam/lib/RemoteService.java 89 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lib/src/main/java/com/anyun/exam/lib/Upgrade.java 267 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lib/src/main/java/com/anyun/exam/lib/RemoteService.java
@@ -43,6 +43,10 @@
    private int msgId = 0;
    private Speaker speaker = null;
    private boolean ttsInitSucc = false;
    private int ringIndex = -1;
    private Uri ringUri;
    private Upgrade upgrade = null;
    private IRemoteInterface.Stub iRemoteInterface = new IRemoteInterface.Stub(){
        @Override
@@ -93,50 +97,56 @@
        new Thread(new TestThread()).start();
//        PlayRing(this);
        upgrade = Upgrade.getInstance(getApplicationContext());
        upgrade.CheckUpgrade();
        ringUri = GetRingIndex(this, "Mira");
        PlayRing(this, ringUri);
    }
    public void PlayRing(Context context) {
    private Uri GetRingIndex(Context context, String ring) {
        RingtoneManager ringtoneManager= new RingtoneManager(context); // 铃声管理器
        ringtoneManager.setType(RingtoneManager.TYPE_NOTIFICATION);
        for (int i = 0; i < ringtoneManager.getCursor().getCount(); i++) {
            Log.i(TAG, "铃声名称 " + ringtoneManager.getRingtone(i).getTitle(context));
            if (ringtoneManager.getRingtone(i).getTitle(this).equals("Carina")) {
                Log.d(TAG, "播放铃声");
                final MediaPlayer mediaPlayer = new MediaPlayer();
                Uri src = ringtoneManager.getRingtoneUri(i);
                try {
                    mediaPlayer.setDataSource(context, src);
                    mediaPlayer.setAudioStreamType(AudioManager.STREAM_ALARM);
                    mediaPlayer.setLooping(false);
                    mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
                        @Override
                        public void onCompletion(MediaPlayer mp) {
                            // 在播放完毕被回调
                            Log.d(TAG, "播放完成");
                            mediaPlayer.stop();
                            mediaPlayer.release();
                        }
                    });
                    mediaPlayer.prepareAsync();
                    mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
                        @Override
                        public void onPrepared(MediaPlayer mp) {
                            // 装载完毕回调
                            Log.d(TAG, "装载完毕回调");
                            mediaPlayer.start();
                        }
                    });
                } catch (Exception e) {
                }
                break;
            if (ringtoneManager.getRingtone(i).getTitle(context).equals(ring)) {
                Log.d(TAG, "得到铃声 " + i);
                return ringtoneManager.getRingtoneUri(i);
            }
        }
        return null;
    }
    public void PlayRing(Context context, Uri src) {
        if (src == null)
            return;
        final MediaPlayer mediaPlayer = new MediaPlayer();
        try {
            mediaPlayer.setDataSource(context, src);
            mediaPlayer.setAudioStreamType(AudioManager.STREAM_NOTIFICATION);
            mediaPlayer.setLooping(false);
            mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
                @Override
                public void onCompletion(MediaPlayer mp) {
                    // 在播放完毕被回调
                    Log.d(TAG, "播放完成");
                    mediaPlayer.stop();
                    mediaPlayer.release();
                }
            });
            mediaPlayer.prepareAsync();
            mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
                @Override
                public void onPrepared(MediaPlayer mp) {
                    // 装载完毕回调
                    Log.d(TAG, "装载完毕回调");
                    mediaPlayer.start();
                }
            });
        } catch (Exception e) {
            Log.e(TAG, e.getMessage());
        }
    }
@@ -190,9 +200,6 @@
        if (!mIsServiceDestroyed.get()){
            onMessageArrived(cmd, value);
        }
    }
    public String javaDESEncrypt(String plaintext, String key) {
lib/src/main/java/com/anyun/exam/lib/Upgrade.java
New file
@@ -0,0 +1,267 @@
package com.anyun.exam.lib;
import android.content.Context;
import android.content.SharedPreferences;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.Signature;
import android.os.Handler;
import android.util.Log;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.BufferedReader;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.file.Path;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.List;
import java.util.Locale;
public class Upgrade {
    public static final String TAG = Upgrade.class.getCanonicalName();
    private static final String newProgramIndUrl = "http://upgrade.safeluck.com/ftp/aykj4/aks3.json";
    private static Upgrade instance = null;
    private Context context;
    private DownloadManagerUtil downloadManagerUtil = null;
    private InstallUtil installUtil = null;
    public static Upgrade getInstance(Context context) {
        if (instance == null) {
            synchronized (Upgrade.class) {
                if (instance == null) {
                    instance = new Upgrade(context);
                }
            }
        }
        return instance;
    }
    private Upgrade(Context context) {
        this.context = context;
        installUtil = InstallUtil.getInstance(context);
        downloadManagerUtil = DownloadManagerUtil.getInstance(context);
        downloadManagerUtil.SetDMCallback(new DMCB());
    }
    private String CheckNewVersion(String urlStr) {
        HttpURLConnection uRLConnection = null;
        InputStream is = null;
        BufferedReader buffer = null;
        String result = null;
        try {
            URL url = new URL(urlStr);
            uRLConnection = (HttpURLConnection) url.openConnection();
            uRLConnection.setConnectTimeout(8000);
            uRLConnection.setReadTimeout(8000);
            uRLConnection.setRequestMethod("GET");
            is = uRLConnection.getInputStream();
            buffer = new BufferedReader(new InputStreamReader(is));
            StringBuilder strBuilder = new StringBuilder();
            String line;
            while ((line = buffer.readLine()) != null) {
                strBuilder.append(line);
            }
            result = strBuilder.toString();
        } catch (Exception e) {
            e.printStackTrace();
            Log.e(TAG, "http post error");
        } finally {
            if (buffer != null) {
                try {
                    buffer.close();
                } catch (IOException ignored) {
                }
            }
            if (is != null) {
                try {
                    is.close();
                } catch (IOException ignored) {
                }
            }
            if (uRLConnection != null) {
                uRLConnection.disconnect();
            }
        }
        return result;
    }
    class DfuFileInfo {
        boolean valid = false;
        int appVerCode = 0;
        String appUrl = null;
        int systemVerCode = 0;
        String systemUrl = null;
        public void setValid(boolean en) {
            this.valid = en;
        }
        public void setApp(int code, String url) {
            this.appVerCode = code;
            this.appUrl = url;
        }
        public void setSystem(int code, String url) {
            this.systemVerCode = code;
            this.systemUrl = url;
        }
        public boolean getValid() {
            return valid;
        }
        public int getAppVerCode() {
            return appVerCode;
        }
        public String getAppUrl() {
            return appUrl;
        }
        public int getSystemVerCode() {
            return systemVerCode;
        }
        public String getSystemUrl() {
            return systemUrl;
        }
    }
    private DfuFileInfo parseJson(String result, int province, int city) {
        Log.d(TAG, "parseJson province " + province + " city " + city);
        DfuFileInfo dfuFileInfo = new DfuFileInfo();
        try {
            JSONObject obj = new JSONObject(result);
            JSONArray jsonarray = obj.getJSONArray("province");
            boolean marchProvince = false;
            for (int i = 0; !marchProvince && i < jsonarray.length(); i++) {
                JSONObject obj2 = jsonarray.getJSONObject(i);
                int pid = obj2.getInt("id");
                Log.d(TAG,  "pid = " + pid);
                if (pid == province) {
                    JSONArray jsonarray2 = obj2.getJSONArray("city");
                    boolean marchCity = false;
                    // 匹配省id成功
                    marchProvince = true;
                    for (int j = 0; !marchCity && j < jsonarray2.length(); j++) {
                        // 遍历市id组
                        JSONObject obj3 = jsonarray2.getJSONObject(j);
                        JSONArray jsonarray3 = obj3.getJSONArray("id");
                        marchCity = false;
                        for (int k = 0; k < jsonarray3.length(); k++) {
                            // 遍历市id
                            int cid = jsonarray3.getInt(k);
                            Log.d(TAG, "cid = " + cid);
                            if (cid == 0) {
                                Log.d(TAG, "March GeneralCity");
                                dfuFileInfo.setValid(true);
                                if (obj3.has("appVersionCode") && obj3.has("appUpgradeUrl")) {
                                    dfuFileInfo.setApp(obj3.getInt("appVersionCode"), obj3.getString("appUpgradeUrl"));
                                }
                                if (obj3.has("systemVersionCode") && obj3.has("systemUpgradeUrl")) {
                                    dfuFileInfo.setSystem(obj3.getInt("systemVersionCode"), obj3.getString("systemUpgradeUrl"));
                                }
                            }
                            if (cid == city) {
                                marchCity = true;
                                Log.d(TAG, "March City");
                                dfuFileInfo.setValid(true);
                                if (obj3.has("appVersionCode") && obj3.has("appUpgradeUrl")) {
                                    dfuFileInfo.setApp(obj3.getInt("appVersionCode"), obj3.getString("appUpgradeUrl"));
                                }
                                if (obj3.has("systemVersionCode") && obj3.has("systemUpgradeUrl")) {
                                    dfuFileInfo.setSystem(obj3.getInt("systemVersionCode"), obj3.getString("systemUpgradeUrl"));
                                }
                                break;
                            }
                        }
                    }
                }
            }
            Log.d(TAG, "Parse End");
        } catch (JSONException e) {
            Log.e(TAG, e.getMessage());
            dfuFileInfo.setValid(false);
        }
        return dfuFileInfo;
    }
    class CheckNewVersionThread implements Runnable {
        @Override
        public void run() {
            Log.d(TAG, "检查升级站点");
            String result = CheckNewVersion(newProgramIndUrl);
            if (result != null) {
                DfuFileInfo dfuFileInfo = parseJson(result, 53, 100);
                if (dfuFileInfo != null && dfuFileInfo.getValid()) {
                    if (dfuFileInfo.getAppVerCode() > 0 && dfuFileInfo.getAppUrl() != null) {
                        if (installUtil.getVerCode() < dfuFileInfo.getAppVerCode()) {
                            Log.d(TAG, "下载地址 " + dfuFileInfo.getAppUrl());
                            downloadManagerUtil.DownloadFile(dfuFileInfo.getAppUrl(), "aks3.apk", "aks3", "驾考app升级");
//                            downloadManagerUtil.DownloadFile("https://ftp-idc.pconline.com.cn/pub/download/201010/AutoCAD2007.rar?md5=KeZ0iEmKKGEWJ5c7OVxk_w&expires=1592964150", "aks3.apk", "aks3", "驾考app升级");
                        }
                    }
                    if (dfuFileInfo.getSystemVerCode() > 0 && dfuFileInfo.getSystemUrl() != null) {
                    }
                }
            }
            handlerCheckNewVersion.removeCallbacks(runnableCheckNewVersion);
            handlerCheckNewVersion.postDelayed(runnableCheckNewVersion, 30*60*1000);
        }
    }
    Handler handlerCheckNewVersion = new Handler();
    Runnable runnableCheckNewVersion = new Runnable() {
        @Override
        public void run() {
            new Thread(new CheckNewVersionThread()).start();
        }
    };
    public void CheckUpgrade() {
        handlerCheckNewVersion.removeCallbacks(runnableCheckNewVersion);
        handlerCheckNewVersion.postDelayed(runnableCheckNewVersion, 100);
    }
    class DMCB implements DownloadManagerCallback {
        @Override
        public void DownloadComplete(String title, String path) {
            if (title != null && path != null) {
                if (title.equals("aks3")) {
                    Signature[] sig = installUtil.getSignature();
                    Signature[] sig2 = installUtil.getSignature(path);
                    if (sig != null && sig2 != null && installUtil.getFingerprint(sig[0], "SHA-1").equals(installUtil.getFingerprint(sig2[0], "SHA-1"))) {
                        installUtil.InstallApp(path);
                    }
                }
            }
        }
    }
}