package com.basic.security.manager;
|
|
import android.content.Intent;
|
import android.net.Uri;
|
import android.os.Build;
|
import android.os.Environment;
|
import android.support.v4.content.FileProvider;
|
import android.text.TextUtils;
|
|
import com.alfeye.a1io.DeviceControl;
|
import com.basic.security.activity.MainActivity;
|
import com.basic.security.base.BaseApplication;
|
import com.basic.security.model.ModelAdapter;
|
import com.basic.security.model.Upgrade;
|
import com.basic.security.utils.Constants;
|
import com.basic.security.utils.ExceptionUtil;
|
import com.basic.security.utils.RUtils;
|
import com.basic.security.utils.ToastUtil;
|
import com.basic.security.widget.UpgradeDialog;
|
import com.google.gson.Gson;
|
|
import java.io.File;
|
import java.net.URL;
|
import java.util.Map;
|
import java.util.Scanner;
|
|
public class UpgradeManager extends BaseManager {
|
static ModelAdapter upgrade;
|
|
public static void initUpgrade() {
|
upgrade = findById(Upgrade.tableName, Upgrade.tableName);
|
if (upgrade == null) {
|
upgrade = new ModelAdapter();
|
upgrade.setString(Upgrade.id, Upgrade.tableName);
|
upgrade.setString(Upgrade.device_id, DeviceManager.getDeviceId());
|
upgrade.setString(Upgrade.company_id, CompanyManager.getCompanyId());
|
upgrade.setString(Upgrade.del_flag, "0");
|
upgrade.setString(Upgrade.upgrade_version, "");
|
upgrade.setString(Upgrade.apk_path, "");
|
}
|
upgrade.setString(Upgrade.table, Upgrade.tableName);
|
upgrade.setString(Upgrade.current_version, getCurrentVersion());
|
save(upgrade);
|
}
|
|
public static String getCurrentVersion() {
|
String url = Constants.getApkUrl;
|
String currentVersion = "";
|
try {
|
if (url.contains("=")) {
|
currentVersion = url.substring(url.lastIndexOf("=") + 1);
|
}
|
} catch (Exception e) {
|
ExceptionUtil.printException(e);
|
}
|
return currentVersion;
|
}
|
|
public static void saveUpgrade(ModelAdapter upgrade) {
|
upgrade.setString(Constants.TABLE, Upgrade.tableName);
|
UpgradeManager.upgrade = upgrade;
|
save(upgrade);
|
}
|
|
public static ModelAdapter getUpgrade() {
|
if (upgrade == null) {
|
initUpgrade();
|
}
|
return upgrade;
|
}
|
|
public static void upgrade() {
|
if (!hasUpgrade()) {
|
return;
|
}
|
installNewApk();
|
}
|
|
public static void installNewApk() {
|
ModelAdapter upgrade = getUpgrade();
|
String apkPath = upgrade.getString(Upgrade.apk_path);
|
File file = new File(apkPath);
|
if (file.exists()) {
|
try {
|
Intent intent = new Intent(Intent.ACTION_VIEW);
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
|
intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
|
Uri contentUri = null;
|
try {
|
contentUri = FileProvider.getUriForFile(BaseApplication.getApplication().activity, RUtils.applicationID + ".fileProvider", file);
|
} catch (Exception e) {
|
ExceptionUtil.printException(e);
|
}
|
intent.setDataAndType(contentUri, "application/vnd.android.package-archive");
|
} else {
|
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
|
intent.setDataAndType(Uri.parse(file.getAbsolutePath()), "application/vnd.android.package-archive");
|
}
|
BaseApplication.getApplication().activity.startActivity(intent);
|
} catch (Exception e) {
|
ExceptionUtil.printException(e);
|
ToastUtil.show("安装失败" + e.getMessage());
|
}
|
} else {
|
ToastUtil.show("文件出错");
|
}
|
}
|
|
public static void showUpgradeDialog() {
|
if (hasUpgrade()) {
|
final UpgradeDialog confirmDialog = new UpgradeDialog(BaseApplication.getApplication().activity, "升级", "安装", "取消");
|
confirmDialog.show();
|
confirmDialog.setClickListener(new UpgradeDialog.ClickListenerInterface() {
|
public void doConfirm() {
|
installNewApk();
|
confirmDialog.dismiss();
|
}
|
|
public void doCancel() {
|
confirmDialog.dismiss();
|
}
|
});
|
}
|
}
|
|
public static void getApk() {
|
try {
|
String out = new Scanner(new URL(Constants.getApkUrl).openStream(), "UTF-8").useDelimiter("\\A").next();
|
Gson gson = new Gson();
|
Map map = gson.fromJson(out, Map.class);
|
if ("true".equals(map.get("hasNewVersion"))) {
|
String newApkName = (String) map.get("newApkName");
|
String newApkSize = (String) map.get("newApkSize");
|
String newApkNameUrl = Constants.getApkUrl.substring(0, Constants.getApkUrl.lastIndexOf("/")) + "/" + newApkName;
|
String dirName = Environment.getExternalStorageDirectory() + "/download/";
|
new File(dirName).mkdirs();
|
File downloadedFile = new File(dirName, newApkName);
|
if (downloadedFile.exists() && Integer.parseInt(newApkSize) == downloadedFile.length()) {
|
updateUpgrade(newApkName, downloadedFile);
|
return;
|
}
|
org.apache.commons.io.FileUtils.copyURLToFile(new URL(newApkNameUrl), downloadedFile);
|
if (Integer.parseInt(newApkSize) == downloadedFile.length()) {
|
updateUpgrade(newApkName, downloadedFile);
|
MainActivity mainActivity = BaseApplication.getApplication().activity;
|
if (mainActivity.currentFragment == mainActivity.fragment_upgrade) {
|
mainActivity.fragment_upgrade.initDataToUI();
|
}
|
if (Constants.useAlf) {
|
DeviceControl.startInstallApk(
|
BaseApplication.getApplication(),
|
RUtils.applicationID,
|
downloadedFile.getAbsolutePath(),
|
true,
|
true
|
);
|
}
|
}
|
}
|
System1.out.println("UpdateApk.getApk 安装完成");
|
} catch (Exception e) {
|
ExceptionUtil.printException(e);
|
}
|
}
|
|
private static void updateUpgrade(String newApkName, File downloadedFile) {
|
ModelAdapter upgrade = getUpgrade();
|
String newVersion = Integer.parseInt(newApkName.replace(Constants.apkName, "").replace(".apk", "")) + "";
|
String new_apk_path = downloadedFile.getAbsolutePath();
|
if (upgrade.getString(Upgrade.upgrade_version).equals(newVersion)
|
&& upgrade.getString(Upgrade.apk_path).equals(new_apk_path)
|
) {
|
return;
|
}
|
upgrade.setString(Upgrade.upgrade_version, "" + newVersion);
|
upgrade.setString(Upgrade.apk_path, new_apk_path);
|
upgrade.setString(Upgrade.upgraded, Constants.FALSE);
|
upgrade.setString(Upgrade.prompt_time, "");
|
upgrade.setString(Upgrade.prompt_return, "");
|
saveUpgrade(upgrade);
|
}
|
|
public static boolean hasUpgrade() {
|
try {
|
ModelAdapter upgrade = getUpgrade();
|
if (upgrade == null) {
|
return false;
|
}
|
if (TextUtils.isEmpty(upgrade.getString(Upgrade.upgrade_version))) {
|
return false;
|
}
|
if (Integer.parseInt(upgrade.getString(Upgrade.current_version)) >=
|
Integer.parseInt(upgrade.getString(Upgrade.upgrade_version))) {
|
return false;
|
}
|
if (TextUtils.isEmpty(upgrade.getString(Upgrade.apk_path))) {
|
return false;
|
}
|
if (!new File(upgrade.getString(Upgrade.apk_path)).exists()) {
|
return false;
|
}
|
} catch (Exception e) {
|
ExceptionUtil.printException(e);
|
return false;
|
}
|
return true;
|
}
|
|
}
|