|
@@ -16,6 +16,7 @@ import android.os.Build;
|
|
|
import android.os.Handler;
|
|
|
import android.os.IBinder;
|
|
|
import android.os.Looper;
|
|
|
+import android.os.Message;
|
|
|
import android.os.RemoteException;
|
|
|
import android.text.TextUtils;
|
|
|
import android.view.View;
|
|
@@ -24,6 +25,7 @@ import android.widget.ImageView;
|
|
|
import android.widget.ProgressBar;
|
|
|
import android.widget.TextView;
|
|
|
|
|
|
+import androidx.annotation.NonNull;
|
|
|
import androidx.annotation.Nullable;
|
|
|
import androidx.core.content.FileProvider;
|
|
|
|
|
@@ -111,6 +113,10 @@ import static com.hh.hhomc.common.Constants.VALUE.TIME_INSTALL_INTERVAL;
|
|
|
|
|
|
public class BackgroundService extends Service {
|
|
|
|
|
|
+ private final String INSTALL_TAG="INSTALL-------";
|
|
|
+ private final int WHAT_HEART=0x20; //websocket 心跳轮询
|
|
|
+ private final int WHAT_ANSTALL=0x21; //检测是否安装轮询
|
|
|
+
|
|
|
String websocketUrl;
|
|
|
|
|
|
|
|
@@ -150,7 +156,7 @@ public class BackgroundService extends Service {
|
|
|
FileInfo fileInfo = (FileInfo) intent.getSerializableExtra(EXTRA_INTENT_DOWNLOAD);
|
|
|
|
|
|
String filePath = fileInfo.getFilePath();
|
|
|
- AppLogUtils.e("广播--filePath=" + filePath);
|
|
|
+ AppLogUtils.e(INSTALL_TAG+"广播--filePath=" + filePath);
|
|
|
// /storage/emulated/0/Android/data/com.hh.hhomc/cache/download/hharome_v2.2.1_app.apk
|
|
|
|
|
|
// 可对应ServerActionAppUpdateRequestBean中的filepath
|
|
@@ -161,7 +167,7 @@ public class BackgroundService extends Service {
|
|
|
float downSize = fileInfo.getDownloadLocation() / 1024.0f / 1024;
|
|
|
float totalSize = fileInfo.getSize() / 1024.0f / 1024;
|
|
|
|
|
|
- AppLogUtils.e("progress--" + progress);
|
|
|
+ AppLogUtils.e(INSTALL_TAG+"progress--" + progress);
|
|
|
|
|
|
|
|
|
ServerActionAppUpdateResultBean sendInstallBean = new ServerActionAppUpdateResultBean();
|
|
@@ -179,17 +185,17 @@ public class BackgroundService extends Service {
|
|
|
// 下载中(可取消)
|
|
|
sendInstallBean.setStatus(1);
|
|
|
String resultStr = gson.toJson(sendInstallBean);
|
|
|
- AppLogUtils.e("发送apk安装升级消息--resultStr: " + resultStr);
|
|
|
+ AppLogUtils.e(INSTALL_TAG+"发送apk安装升级消息--resultStr: " + resultStr);
|
|
|
|
|
|
sendMessageByWebSocket(resultStr);
|
|
|
|
|
|
|
|
|
} else if (progress == 100) {
|
|
|
- AppLogUtils.e("apkCompleteNum--" + apkCompleteNum);
|
|
|
+ AppLogUtils.e(INSTALL_TAG+"apkCompleteNum--" + apkCompleteNum);
|
|
|
if (apkCompleteNum < 1) {
|
|
|
// 升级类型 1:强制升级 2:静默升级
|
|
|
if (upgradeType == 1) {
|
|
|
- AppLogUtils.e("强制升级---开始安装");
|
|
|
+ AppLogUtils.e(INSTALL_TAG+"强制升级---开始安装");
|
|
|
// 1:强制升级
|
|
|
// 开始安装
|
|
|
delayInstallApk();
|
|
@@ -197,21 +203,21 @@ public class BackgroundService extends Service {
|
|
|
// 安装中
|
|
|
sendInstallBean.setStatus(3);
|
|
|
String resultStr = gson.toJson(sendInstallBean);
|
|
|
- AppLogUtils.e("发送apk安装升级消息--resultStr: " + resultStr);
|
|
|
+ AppLogUtils.e(INSTALL_TAG+"发送apk安装升级消息--resultStr: " + resultStr);
|
|
|
|
|
|
sendMessageByWebSocket(resultStr);
|
|
|
|
|
|
} else if (upgradeType == 2) {
|
|
|
// 2:静默升级
|
|
|
// 等待安装(静默升级 可取消)
|
|
|
- AppLogUtils.e("静默升级");
|
|
|
+ AppLogUtils.e(INSTALL_TAG+"静默升级");
|
|
|
|
|
|
// map循环
|
|
|
for (String key : apkUrlMap.keySet()) {
|
|
|
- AppLogUtils.e("map-key:" + key);
|
|
|
+ AppLogUtils.e(INSTALL_TAG+"map-key:" + key);
|
|
|
ServerActionAppUpdateRequestBean serverUpdateBean = apkUrlMap.get(key);
|
|
|
if (serverUpdateBean.getFilePath().equals(downloadUrlFileInfo)) {
|
|
|
- AppLogUtils.e("map循环中,静默升级---有对应下载url");
|
|
|
+ AppLogUtils.e(INSTALL_TAG+"map循环中,静默升级---有对应下载url");
|
|
|
// 设置为静默
|
|
|
if (serverUpdateBean.isSilentInstall()) {
|
|
|
isSilentInstall = true;
|
|
@@ -222,7 +228,7 @@ public class BackgroundService extends Service {
|
|
|
|
|
|
|
|
|
if (isSilentInstall) {
|
|
|
- AppLogUtils.e("静默升级---开始安装");
|
|
|
+ AppLogUtils.e(INSTALL_TAG+"静默升级---开始安装");
|
|
|
// 已经下载完了,启动时安装
|
|
|
isSilentInstall = false;
|
|
|
|
|
@@ -233,17 +239,17 @@ public class BackgroundService extends Service {
|
|
|
// 第一次下载完成
|
|
|
sendInstallBean.setStatus(2);
|
|
|
String resultStr = gson.toJson(sendInstallBean);
|
|
|
- AppLogUtils.e("发送apk安装升级消息--resultStr: " + resultStr);
|
|
|
+ AppLogUtils.e(INSTALL_TAG+"发送apk安装升级消息--resultStr: " + resultStr);
|
|
|
|
|
|
sendMessageByWebSocket(resultStr);
|
|
|
|
|
|
|
|
|
// map循环
|
|
|
for (String key : apkUrlMap.keySet()) {
|
|
|
- AppLogUtils.e("map-key:" + key);
|
|
|
+ AppLogUtils.e(INSTALL_TAG+"map-key:" + key);
|
|
|
ServerActionAppUpdateRequestBean serverUpdateBean = apkUrlMap.get(key);
|
|
|
if (serverUpdateBean.getFilePath().equals(downloadUrlFileInfo)) {
|
|
|
- AppLogUtils.e("map循环中,静默升级---有对应下载url");
|
|
|
+ AppLogUtils.e(INSTALL_TAG+"map循环中,静默升级---有对应下载url");
|
|
|
// 设置为静默
|
|
|
serverUpdateBean.setSilentInstall(true);
|
|
|
|
|
@@ -256,14 +262,14 @@ public class BackgroundService extends Service {
|
|
|
// 强制时,可能点了取消。静默时,要下次启动app时
|
|
|
// 保存,供下次启动时安装
|
|
|
String mapString = gson.toJson(apkUrlMap);
|
|
|
- AppLogUtils.e("下载完后apkInfoMapStr--set--" + mapString);
|
|
|
+ AppLogUtils.e(INSTALL_TAG+"下载完后apkInfoMapStr--set--" + mapString);
|
|
|
localConfig.setApkInfoMapStr(mapString);
|
|
|
String apkInfoMapStr = localConfig.getApkInfoMapStr("");
|
|
|
- AppLogUtils.e("下载完后apkInfoMapStr--get--" + apkInfoMapStr);
|
|
|
+ AppLogUtils.e(INSTALL_TAG+"下载完后apkInfoMapStr--get--" + apkInfoMapStr);
|
|
|
|
|
|
|
|
|
apkCompleteNum = apkCompleteNum + 1;
|
|
|
- AppLogUtils.e("apkCompleteNum +1后--" + apkCompleteNum);
|
|
|
+ AppLogUtils.e(INSTALL_TAG+"apkCompleteNum +1后--" + apkCompleteNum);
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -293,12 +299,8 @@ public class BackgroundService extends Service {
|
|
|
public void onCreate() {
|
|
|
AppLogUtils.e("onCreate");
|
|
|
// initData();
|
|
|
- Looper looper = getMainLooper(); // 获取主线程的Looper对象
|
|
|
- if (mHandler == null) {
|
|
|
- mHandler = new Handler(looper); // 与主线程的Looper关联
|
|
|
- }
|
|
|
|
|
|
- mHandler.post(new Runnable() {
|
|
|
+ getmHandler().post(new Runnable() {
|
|
|
@Override
|
|
|
public void run() {
|
|
|
ToastUtils.showLongToast("HHOMC服务启动");
|
|
@@ -307,7 +309,6 @@ public class BackgroundService extends Service {
|
|
|
|
|
|
|
|
|
NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
|
|
|
-
|
|
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
|
|
|
/**
|
|
|
* Oreo不用Priority了,用importance
|
|
@@ -360,11 +361,7 @@ public class BackgroundService extends Service {
|
|
|
AppLogUtils.i("onStartCommand");
|
|
|
|
|
|
|
|
|
- Looper looper = getMainLooper(); // 获取主线程的Looper对象
|
|
|
- if (mHandler == null) {
|
|
|
- mHandler = new Handler(looper); // 与主线程的Looper关联
|
|
|
- }
|
|
|
-
|
|
|
+ getmHandler();
|
|
|
if (isFiring < 1) {
|
|
|
isFiring++;
|
|
|
AppLogUtils.e("服务 - 首次");
|
|
@@ -431,7 +428,7 @@ public class BackgroundService extends Service {
|
|
|
// localConfig.setApkInfoMapStr("");
|
|
|
|
|
|
String apkInfoMapStr = localConfig.getApkInfoMapStr("");
|
|
|
- AppLogUtils.e("apkInfoMapStr--" + apkInfoMapStr);
|
|
|
+ AppLogUtils.e(INSTALL_TAG+"apkInfoMapStr--" + apkInfoMapStr);
|
|
|
if (StringUtils.isNotNull(apkInfoMapStr)) {
|
|
|
|
|
|
// 转换之前保存的本地map
|
|
@@ -444,7 +441,7 @@ public class BackgroundService extends Service {
|
|
|
apkUrlMap.putAll(localHashMap);
|
|
|
|
|
|
if (apkUrlMap.size() == 0) {
|
|
|
- AppLogUtils.e("map无数据,无安装任务");
|
|
|
+ AppLogUtils.e(INSTALL_TAG+"map无数据,无安装任务");
|
|
|
return;
|
|
|
}
|
|
|
|
|
@@ -458,18 +455,18 @@ public class BackgroundService extends Service {
|
|
|
// AppLogUtils.e("map-key:" + key);
|
|
|
ServerActionAppUpdateRequestBean serverUpdateBean = apkUrlMap.get(key);
|
|
|
if (key.equals(appList.get(i).getPackageName())) {
|
|
|
- AppLogUtils.e("map循环中,有包名");
|
|
|
+ AppLogUtils.e(INSTALL_TAG+"map循环中,有包名");
|
|
|
// 已有
|
|
|
// 并且apk已有
|
|
|
File apkFile = new File(getDir(), serverUpdateBean.getFileName());
|
|
|
if (apkFile != null && apkFile.exists()) {
|
|
|
- AppLogUtils.e("map循环中,有包名,有apk");
|
|
|
- AppLogUtils.e("map循环中,有包名,有apk--apkFile.length()---" + apkFile.length());
|
|
|
- AppLogUtils.e("map循环中,有包名,有apk--mBean.getFileSize()--" + serverUpdateBean.getFileSize());
|
|
|
+ AppLogUtils.e(INSTALL_TAG+"map循环中,有包名,有apk");
|
|
|
+ AppLogUtils.e(INSTALL_TAG+"map循环中,有包名,有apk--apkFile.length()---" + apkFile.length());
|
|
|
+ AppLogUtils.e(INSTALL_TAG+"map循环中,有包名,有apk--mBean.getFileSize()--" + serverUpdateBean.getFileSize());
|
|
|
if (apkFile.length() == serverUpdateBean.getFileSize()) {
|
|
|
- AppLogUtils.e("map循环中,有包名,有完整的apk");
|
|
|
+ AppLogUtils.e(INSTALL_TAG+"map循环中,有包名,有完整的apk");
|
|
|
if (appList.get(i).getVersionName().equals(serverUpdateBean.getVersionName())) {
|
|
|
- AppLogUtils.e("map循环中,有包名,有完整的apk,版本号一致,安装成功");
|
|
|
+ AppLogUtils.e(INSTALL_TAG+"map循环中,有包名,有完整的apk,版本号一致,安装成功");
|
|
|
|
|
|
|
|
|
ServerActionAppUpdateResultBean resultBean = new ServerActionAppUpdateResultBean();
|
|
@@ -486,22 +483,22 @@ public class BackgroundService extends Service {
|
|
|
initSockect(websocketUrl);
|
|
|
}
|
|
|
String resultStr = gson.toJson(resultBean);
|
|
|
- AppLogUtils.e("根据本地保存的map--安装成功---发送apk安装升级消息--resultStr: " + resultStr);
|
|
|
+ AppLogUtils.e(INSTALL_TAG+"根据本地保存的map--安装成功---发送apk安装升级消息--resultStr: " + resultStr);
|
|
|
|
|
|
sendMessageByWebSocket(resultStr);
|
|
|
|
|
|
pauseTaskAndDelete(serverUpdateBean);
|
|
|
} else {
|
|
|
- AppLogUtils.e("map循环中,有包名,有完整的apk,开始安装");
|
|
|
+ AppLogUtils.e(INSTALL_TAG+"map循环中,有包名,有完整的apk,开始安装");
|
|
|
startDownloadApk(serverUpdateBean);
|
|
|
}
|
|
|
} else {
|
|
|
- AppLogUtils.e("map循环中,有包名,不是完整的apk,接着下载");
|
|
|
+ AppLogUtils.e(INSTALL_TAG+"map循环中,有包名,不是完整的apk,接着下载");
|
|
|
startDownloadApk(serverUpdateBean);
|
|
|
}
|
|
|
|
|
|
} else {
|
|
|
- AppLogUtils.e("map循环中,有包名,没有apk,开始下载");
|
|
|
+ AppLogUtils.e(INSTALL_TAG+"map循环中,有包名,没有apk,开始下载");
|
|
|
startDownloadApk(serverUpdateBean);
|
|
|
}
|
|
|
}
|
|
@@ -512,19 +509,19 @@ public class BackgroundService extends Service {
|
|
|
if (k == apkUrlMap.size()) {
|
|
|
// map循环完了,还没有
|
|
|
// 下载
|
|
|
- AppLogUtils.e("map循环完了,还没有,下载");
|
|
|
+ AppLogUtils.e(INSTALL_TAG+"map循环完了,还没有,下载");
|
|
|
// startDownloadApk(localHashMap.get(0));
|
|
|
|
|
|
Iterator<HashMap.Entry<String, ServerActionAppUpdateRequestBean>> iterator = localHashMap.entrySet().iterator();
|
|
|
if (iterator.hasNext()) {
|
|
|
HashMap.Entry<String, ServerActionAppUpdateRequestBean> entry = iterator.next();
|
|
|
- AppLogUtils.e("第一个值为:" + entry.getValue().toString());
|
|
|
+ AppLogUtils.e(INSTALL_TAG+"第一个值为:" + entry.getValue().toString());
|
|
|
// System.out.println("第一个值为:" + entry.getValue());
|
|
|
startDownloadApk(entry.getValue());
|
|
|
}
|
|
|
|
|
|
} else {
|
|
|
- AppLogUtils.e("map中有,不下载");
|
|
|
+ AppLogUtils.e(INSTALL_TAG+"map中有,不下载");
|
|
|
|
|
|
// 情况:静默下载,新应用(之前没有安装过)
|
|
|
for (String key : apkUrlMap.keySet()) {
|
|
@@ -738,7 +735,8 @@ public class BackgroundService extends Service {
|
|
|
// if (heartBeatRunnable != null) {
|
|
|
// mHandler.removeCallbacks(heartBeatRunnable);
|
|
|
// }
|
|
|
- mHandler.postDelayed(heartBeatRunnable, 5 * 1000);//开启心跳检测
|
|
|
+ getmHandler().sendEmptyMessageDelayed(WHAT_HEART,5 * 1000);//开启心跳检测
|
|
|
+
|
|
|
|
|
|
// mHandler.post(new Runnable() {
|
|
|
// @Override
|
|
@@ -763,7 +761,7 @@ public class BackgroundService extends Service {
|
|
|
ServerActionAppUpdateRequestBean serverUpdateBean = apkUrlMap.get(packageNameServer);
|
|
|
|
|
|
if (apkUrlMap.size() == 0) {
|
|
|
- AppLogUtils.e("apkUrlMap无数据");
|
|
|
+ AppLogUtils.e(INSTALL_TAG+"apkUrlMap无数据");
|
|
|
return;
|
|
|
}
|
|
|
|
|
@@ -793,14 +791,14 @@ public class BackgroundService extends Service {
|
|
|
// 4:安装成功
|
|
|
resultBean.setStatus(4);
|
|
|
String resultStr = gson.toJson(resultBean);
|
|
|
- AppLogUtils.e("主动查询设备业务--安装成功---发送apk安装升级消息--resultStr: " + resultStr);
|
|
|
+ AppLogUtils.e(INSTALL_TAG+"主动查询设备业务--安装成功---发送apk安装升级消息--resultStr: " + resultStr);
|
|
|
sendMessageByWebSocket(resultStr);
|
|
|
|
|
|
} else {
|
|
|
// 5:安装失败
|
|
|
resultBean.setStatus(5);
|
|
|
String resultStr = gson.toJson(resultBean);
|
|
|
- AppLogUtils.e("主动查询设备业务--安装失败---发送apk安装升级消息--resultStr: " + resultStr);
|
|
|
+ AppLogUtils.e(INSTALL_TAG+"主动查询设备业务--安装失败---发送apk安装升级消息--resultStr: " + resultStr);
|
|
|
sendMessageByWebSocket(resultStr);
|
|
|
|
|
|
}
|
|
@@ -850,32 +848,32 @@ public class BackgroundService extends Service {
|
|
|
lastServerUpdateBean = mBean;
|
|
|
|
|
|
// 会有同一个下载url多次发送消息过来的情况,故判断是否已有下载
|
|
|
- AppLogUtils.e("apkUrlMap.size()--" + apkUrlMap.size());
|
|
|
+ AppLogUtils.e(INSTALL_TAG+"apkUrlMap.size()--" + apkUrlMap.size());
|
|
|
if (apkUrlMap.size() > 0) {
|
|
|
int k = 0;
|
|
|
boolean canInstall = false;
|
|
|
// 循环apkUrlMap
|
|
|
for (String key : apkUrlMap.keySet()) {
|
|
|
- AppLogUtils.e("map-key:" + key);
|
|
|
+ AppLogUtils.e(INSTALL_TAG+"map-key:" + key);
|
|
|
if (key.equals(mBean.getPackageName())) {
|
|
|
- AppLogUtils.e("map循环中,有包名");
|
|
|
+ AppLogUtils.e(INSTALL_TAG+"map循环中,有包名");
|
|
|
// 已有
|
|
|
// 并且apk已有
|
|
|
File apkFile = new File(getDir(), mBean.getFileName());
|
|
|
if (apkFile != null && apkFile.exists()) {
|
|
|
- AppLogUtils.e("map循环中,有包名,有apk");
|
|
|
- AppLogUtils.e("map循环中,有包名,有apk--apkFile.length()---" + apkFile.length());
|
|
|
- AppLogUtils.e("map循环中,有包名,有apk--mBean.getFileSize()--" + mBean.getFileSize());
|
|
|
+ AppLogUtils.e(INSTALL_TAG+"map循环中,有包名,有apk");
|
|
|
+ AppLogUtils.e(INSTALL_TAG+"map循环中,有包名,有apk--apkFile.length()---" + apkFile.length());
|
|
|
+ AppLogUtils.e(INSTALL_TAG+"map循环中,有包名,有apk--mBean.getFileSize()--" + mBean.getFileSize());
|
|
|
if (apkFile.length() == mBean.getFileSize()) {
|
|
|
- AppLogUtils.e("map循环中,有包名,有完整的apk");
|
|
|
+ AppLogUtils.e(INSTALL_TAG+"map循环中,有包名,有完整的apk");
|
|
|
canInstall = true;
|
|
|
break;
|
|
|
} else {
|
|
|
- AppLogUtils.e("map循环中,有包名,不是完整的apk");
|
|
|
+ AppLogUtils.e(INSTALL_TAG+"map循环中,有包名,不是完整的apk");
|
|
|
}
|
|
|
|
|
|
} else {
|
|
|
- AppLogUtils.e("map循环中,有包名,没有apk");
|
|
|
+ AppLogUtils.e(INSTALL_TAG+"map循环中,有包名,没有apk");
|
|
|
}
|
|
|
}
|
|
|
k++;
|
|
@@ -883,10 +881,10 @@ public class BackgroundService extends Service {
|
|
|
if (k == apkUrlMap.size()) {
|
|
|
// map循环完了,还没有
|
|
|
// 下载
|
|
|
- AppLogUtils.e("map循环完了,还没有,下载");
|
|
|
+ AppLogUtils.e(INSTALL_TAG+"map循环完了,还没有,下载");
|
|
|
startDownloadApk(mBean);
|
|
|
} else {
|
|
|
- AppLogUtils.e("map中有,不下载");
|
|
|
+ AppLogUtils.e(INSTALL_TAG+"map中有,不下载");
|
|
|
}
|
|
|
|
|
|
if (canInstall) {
|
|
@@ -896,7 +894,7 @@ public class BackgroundService extends Service {
|
|
|
|
|
|
} else {
|
|
|
// 没有map,直接下载
|
|
|
- AppLogUtils.e("没有map,直接下载");
|
|
|
+ AppLogUtils.e(INSTALL_TAG+"没有map,直接下载");
|
|
|
startDownloadApk(mBean);
|
|
|
}
|
|
|
}
|
|
@@ -1043,6 +1041,7 @@ public class BackgroundService extends Service {
|
|
|
}
|
|
|
|
|
|
try {
|
|
|
+ AppLogUtils.e("sendMessage-----: "+message);
|
|
|
mWebSocketClient.send(message);
|
|
|
} catch (NotYetConnectedException e) {
|
|
|
|
|
@@ -1051,6 +1050,7 @@ public class BackgroundService extends Service {
|
|
|
mHandler.postDelayed(new Runnable() {
|
|
|
@Override
|
|
|
public void run() {
|
|
|
+ AppLogUtils.e("sendMessage-----: "+message);
|
|
|
mWebSocketClient.send(message);
|
|
|
}
|
|
|
}, 2 * 1000); //延时执行run内代码
|
|
@@ -1065,7 +1065,7 @@ public class BackgroundService extends Service {
|
|
|
|
|
|
|
|
|
private void restartWebsocket() {
|
|
|
- mHandler.removeCallbacks(heartBeatRunnable);
|
|
|
+ getmHandler().removeMessages(WHAT_HEART);
|
|
|
if (mWebSocketClient != null) {
|
|
|
mWebSocketClient.close();//取消掉以前的长连接
|
|
|
mWebSocketClient = null;
|
|
@@ -1088,33 +1088,52 @@ public class BackgroundService extends Service {
|
|
|
// 定时任务,发送心跳包
|
|
|
private Handler mHandler;
|
|
|
|
|
|
- private Runnable heartBeatRunnable = new Runnable() {
|
|
|
- @Override
|
|
|
- public void run() {
|
|
|
- AppLogUtils.e("开始发送心跳包检测-------------");
|
|
|
- if (System.currentTimeMillis() - sendTime >= TIME_HEARTBEAT) {
|
|
|
- if (mWebSocketClient != null) {
|
|
|
- if (!isWebsocketConnect) {//长连接已断开,
|
|
|
- AppLogUtils.e("发送心跳包-------------长连接已断开");
|
|
|
- restartWebsocket();
|
|
|
- } else {//长连接处于连接状态---
|
|
|
- AppLogUtils.e("发送心跳包-------------长连接处于连接状态");
|
|
|
- // 上报设备状态
|
|
|
- uploadDeviceStatus();
|
|
|
- }
|
|
|
- } else {
|
|
|
- AppLogUtils.e("开始发送心跳包检测-----mWebSocketClient = null------restartWebsocket");
|
|
|
- restartWebsocket();
|
|
|
+ public Handler getmHandler() {
|
|
|
+ if(mHandler==null){
|
|
|
+ synchronized (BackgroundService.class){
|
|
|
+ if(mHandler==null){
|
|
|
+ mHandler=new Handler(Looper.getMainLooper()){
|
|
|
+ @Override
|
|
|
+ public void handleMessage(@NonNull Message msg) {
|
|
|
+ super.handleMessage(msg);
|
|
|
+ if(msg.what==WHAT_HEART){
|
|
|
+ heartBeat();
|
|
|
+ }
|
|
|
+ if(msg.what==WHAT_ANSTALL){
|
|
|
+ apkInstallPolling();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ };
|
|
|
}
|
|
|
-
|
|
|
- sendTime = System.currentTimeMillis();
|
|
|
}
|
|
|
+ }
|
|
|
+ return mHandler;
|
|
|
+ }
|
|
|
|
|
|
- mHandler.postDelayed(heartBeatRunnable, TIME_HEARTBEAT);//每隔一定的时间,对长连接进行一次心跳检测
|
|
|
|
|
|
-// AlarmManagerUtils.getInstance(getApplicationContext()).getUpAlarmManagerWorkOnOthers(TIME_HEARTBEAT);
|
|
|
+ private void heartBeat(){
|
|
|
+ AppLogUtils.e("开始发送心跳包检测-------------");
|
|
|
+ if (System.currentTimeMillis() - sendTime >= TIME_HEARTBEAT) {
|
|
|
+ if (mWebSocketClient != null) {
|
|
|
+ if (!isWebsocketConnect) {//长连接已断开,
|
|
|
+ AppLogUtils.e("发送心跳包-------------长连接已断开");
|
|
|
+ restartWebsocket();
|
|
|
+ } else {//长连接处于连接状态---
|
|
|
+ AppLogUtils.e("发送心跳包-------------长连接处于连接状态");
|
|
|
+ // 上报设备状态
|
|
|
+ uploadDeviceStatus();
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ AppLogUtils.e("开始发送心跳包检测-----mWebSocketClient = null------restartWebsocket");
|
|
|
+ restartWebsocket();
|
|
|
+ }
|
|
|
+
|
|
|
+ sendTime = System.currentTimeMillis();
|
|
|
}
|
|
|
- };
|
|
|
+
|
|
|
+ getmHandler().sendEmptyMessageDelayed(WHAT_HEART,TIME_HEARTBEAT); //每隔一定的时间,对长连接进行一次心跳检测
|
|
|
+
|
|
|
+ }
|
|
|
|
|
|
|
|
|
String apkSender;
|
|
@@ -1127,11 +1146,14 @@ public class BackgroundService extends Service {
|
|
|
int upgradeType;
|
|
|
|
|
|
private void startDownloadApk(ServerActionAppUpdateRequestBean mBean) {
|
|
|
- AppLogUtils.e("startDownloadApk---------");
|
|
|
-
|
|
|
+ AppLogUtils.e(INSTALL_TAG+"startDownloadApk---------");
|
|
|
|
|
|
+ if(mBean==null){
|
|
|
+ AppLogUtils.e(INSTALL_TAG+"startDownloadApk serverUpdateBean == null");
|
|
|
+ return;
|
|
|
+ }
|
|
|
String apkUrl = mBean.getFilePath();
|
|
|
- AppLogUtils.e("apkUrl = " + apkUrl);
|
|
|
+ AppLogUtils.e(INSTALL_TAG+"apkUrl = " + apkUrl);
|
|
|
// apkUrl = testurl;
|
|
|
|
|
|
// String apkName = apkUrl.substring(apkUrl.lastIndexOf("/") + 1);
|
|
@@ -1143,12 +1165,12 @@ public class BackgroundService extends Service {
|
|
|
// 根据文件名创建对应文件
|
|
|
apkFile = new File(getDir(), apkFileName);
|
|
|
|
|
|
- AppLogUtils.e("apkFile---" + apkFile.getAbsolutePath());
|
|
|
+ AppLogUtils.e(INSTALL_TAG+"apkFile---" + apkFile.getAbsolutePath());
|
|
|
|
|
|
apkTaskId = mBean.getTaskId();
|
|
|
apkSender = mBean.getSender();
|
|
|
upgradeType = mBean.getUpgradeType();
|
|
|
- AppLogUtils.e("升级方式upgradeType---" + upgradeType);
|
|
|
+ AppLogUtils.e(INSTALL_TAG+"升级方式upgradeType---" + upgradeType);
|
|
|
|
|
|
mDownloadHelper.addTask(apkUrl, apkFile, FIRST_ACTION).submit(MyApplication.getContext());
|
|
|
|
|
@@ -1171,21 +1193,25 @@ public class BackgroundService extends Service {
|
|
|
// 开始安装
|
|
|
private void startInstallApk() {
|
|
|
// AppLogUtils.e("startInstallApk--开始安装,filePath=" + filePath);
|
|
|
+ AppLogUtils.e(INSTALL_TAG+"startInstallApk--开始安装,apkFile=" + apkFile.getName());
|
|
|
getiDeviceUI().silenceInstall(apkFile.getAbsolutePath(), new SilenceInstallSuccessListener() {
|
|
|
@Override
|
|
|
public void success(boolean isSucceeded) {
|
|
|
if(!isSucceeded){
|
|
|
defaultInstallApp() ;
|
|
|
+ }else {
|
|
|
+ getmHandler().removeMessages(WHAT_ANSTALL);
|
|
|
+ getmHandler().sendEmptyMessageDelayed(WHAT_ANSTALL, TIME_INSTALL_INTERVAL);//开启定时任务
|
|
|
+ apkInstallTime = System.currentTimeMillis();
|
|
|
}
|
|
|
}
|
|
|
});
|
|
|
}
|
|
|
|
|
|
private void defaultInstallApp(){
|
|
|
- AppLogUtils.e("startInstallApk--开始安装,apkFile=" + apkFile.getName());
|
|
|
-
|
|
|
- mHandler.postDelayed(apkInstallRunnable, TIME_INSTALL_INTERVAL);//开启定时任务
|
|
|
- AppLogUtils.e("startInstallApk--开始安装,启动定时检测任务");
|
|
|
+ getmHandler().removeMessages(WHAT_ANSTALL);
|
|
|
+ getmHandler().sendEmptyMessageDelayed(WHAT_ANSTALL, TIME_INSTALL_INTERVAL);//开启定时任务
|
|
|
+ AppLogUtils.e(INSTALL_TAG+"startInstallApk--开始安装,启动定时检测任务");
|
|
|
apkInstallTime = System.currentTimeMillis();
|
|
|
|
|
|
Intent intent = new Intent(Intent.ACTION_VIEW);
|
|
@@ -1385,20 +1411,18 @@ public class BackgroundService extends Service {
|
|
|
|
|
|
private long apkInstallTime = 0L;
|
|
|
// 定时任务,是否安装成功的循环
|
|
|
- private Runnable apkInstallRunnable = new Runnable() {
|
|
|
- @Override
|
|
|
- public void run() {
|
|
|
- AppLogUtils.e("开始apkInstallRunnable检测-------------");
|
|
|
+ private void apkInstallPolling(){
|
|
|
+ AppLogUtils.e("开始apkInstallRunnable检测-------------");
|
|
|
// AppLogUtils.e("开始apkInstallRunnable检测-------System.currentTimeMillis() =" + System.currentTimeMillis());
|
|
|
// AppLogUtils.e("开始apkInstallRunnable检测-------apkInstallTime =" + apkInstallTime);
|
|
|
// AppLogUtils.e("开始apkInstallRunnable检测-------相减 =" + (System.currentTimeMillis() - apkInstallTime));
|
|
|
|
|
|
- if (System.currentTimeMillis() - apkInstallTime >= TIME_INSTALL_ALL) {
|
|
|
- // 现在时间-开始安装时间,超过了安装总时长,算安装失败
|
|
|
+ if (System.currentTimeMillis() - apkInstallTime >= TIME_INSTALL_ALL) {
|
|
|
+ // 现在时间-开始安装时间,超过了安装总时长,算安装失败
|
|
|
// AppLogUtils.e("超过了安装总时长");
|
|
|
- AppLogUtils.e("超过了安装总时长,主动查询服务器");
|
|
|
+ AppLogUtils.e("超过了安装总时长,主动查询服务器");
|
|
|
|
|
|
- queryServerAppInfo();
|
|
|
+ queryServerAppInfo();
|
|
|
|
|
|
|
|
|
// ArrayList<AppInfoBean> appList = AppUtils.getAppList(MyApplication.getContext());
|
|
@@ -1441,63 +1465,66 @@ public class BackgroundService extends Service {
|
|
|
// }
|
|
|
|
|
|
|
|
|
- } else {
|
|
|
+ } else {
|
|
|
|
|
|
|
|
|
- ArrayList<AppInfoBean> appList = AppUtils.getAppList(MyApplication.getContext());
|
|
|
+ ArrayList<AppInfoBean> appList = AppUtils.getAppList(MyApplication.getContext());
|
|
|
|
|
|
- if (appList != null && appList.size() > 0) {
|
|
|
- // 循环apkUrlMap
|
|
|
- for (int i = 0; i < appList.size(); i++) {
|
|
|
- for (String key : apkUrlMap.keySet()) {
|
|
|
+ if (appList != null && appList.size() > 0) {
|
|
|
+ // 循环apkUrlMap
|
|
|
+ for (int i = 0; i < appList.size(); i++) {
|
|
|
+ for (String key : apkUrlMap.keySet()) {
|
|
|
// AppLogUtils.e("map-key:" + key);
|
|
|
- ServerActionAppUpdateRequestBean serverUpdateBean = apkUrlMap.get(key);
|
|
|
-
|
|
|
- AppInfoBean appInfoBean = appList.get(i);
|
|
|
+ ServerActionAppUpdateRequestBean serverUpdateBean = apkUrlMap.get(key);
|
|
|
|
|
|
- if (key.equals(appInfoBean.getPackageName())) {
|
|
|
- AppLogUtils.e("map循环中,有包名");
|
|
|
- // 已有
|
|
|
- if (appInfoBean.getVersionName().equals(serverUpdateBean.getVersionName())) {
|
|
|
- // 相等就是安装成功
|
|
|
- AppLogUtils.e("map循环中,有包名,版本号一致");
|
|
|
- // 安装成功与否发送给服务端的消息
|
|
|
- ServerActionAppUpdateResultBean resultBean = new ServerActionAppUpdateResultBean();
|
|
|
- resultBean.setSource("app");
|
|
|
- resultBean.setSn(DeviceUtils.getDeviceSN());
|
|
|
- resultBean.setOp(UPGRADE_PROCESSING);
|
|
|
- resultBean.setTaskId(serverUpdateBean.getTaskId());
|
|
|
- resultBean.setDownloadPercent(100);
|
|
|
- resultBean.setSender(serverUpdateBean.getSender());
|
|
|
-
|
|
|
- if (mWebSocketClient == null) {
|
|
|
- initSockect(websocketUrl);
|
|
|
- }
|
|
|
+ AppInfoBean appInfoBean = appList.get(i);
|
|
|
|
|
|
- // 4:安装成功
|
|
|
- resultBean.setStatus(4);
|
|
|
- String resultStr = gson.toJson(resultBean);
|
|
|
- AppLogUtils.e("定时任务--安装成功---发送apk安装升级消息--resultStr: " + resultStr);
|
|
|
+ if (key.equals(appInfoBean.getPackageName())) {
|
|
|
+ AppLogUtils.e(INSTALL_TAG+"map循环中,有包名");
|
|
|
+ // 已有
|
|
|
+ if (appInfoBean.getVersionName().equals(serverUpdateBean.getVersionName())) {
|
|
|
+ // 相等就是安装成功
|
|
|
+ AppLogUtils.e(INSTALL_TAG+"map循环中,有包名,版本号一致");
|
|
|
+ // 安装成功与否发送给服务端的消息
|
|
|
+ ServerActionAppUpdateResultBean resultBean = new ServerActionAppUpdateResultBean();
|
|
|
+ resultBean.setSource("app");
|
|
|
+ resultBean.setSn(DeviceUtils.getDeviceSN());
|
|
|
+ resultBean.setOp(UPGRADE_PROCESSING);
|
|
|
+ resultBean.setTaskId(serverUpdateBean.getTaskId());
|
|
|
+ resultBean.setDownloadPercent(100);
|
|
|
+ resultBean.setSender(serverUpdateBean.getSender());
|
|
|
|
|
|
- sendMessageByWebSocket(resultStr);
|
|
|
+ if (mWebSocketClient == null) {
|
|
|
+ initSockect(websocketUrl);
|
|
|
+ }
|
|
|
|
|
|
- pauseTaskAndDelete(serverUpdateBean);
|
|
|
+ // 4:安装成功
|
|
|
+ resultBean.setStatus(4);
|
|
|
+ String resultStr = gson.toJson(resultBean);
|
|
|
+ AppLogUtils.e(INSTALL_TAG+"定时任务--安装成功---发送apk安装升级消息--resultStr: " + resultStr);
|
|
|
+ getmHandler().removeMessages(WHAT_ANSTALL);
|
|
|
+ sendMessageByWebSocket(resultStr);
|
|
|
|
|
|
- } else {
|
|
|
- AppLogUtils.e("map循环中,有包名,但版本号还不一致");
|
|
|
- }
|
|
|
+ pauseTaskAndDelete(serverUpdateBean);
|
|
|
|
|
|
+ } else {
|
|
|
+ AppLogUtils.e(INSTALL_TAG+"map循环中,有包名,但版本号还不一致");
|
|
|
}
|
|
|
+
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
}
|
|
|
|
|
|
+ }
|
|
|
|
|
|
- mHandler.postDelayed(this, TIME_INSTALL_INTERVAL); //每隔一定的时间,进行一次检测
|
|
|
+ if(apkUrlMap!=null&&apkUrlMap.size()>0) {
|
|
|
+ getmHandler().sendEmptyMessageDelayed(WHAT_ANSTALL, TIME_INSTALL_INTERVAL); //每隔一定的时间,进行一次检测
|
|
|
+ }else{
|
|
|
+ getmHandler().removeMessages(WHAT_ANSTALL);
|
|
|
}
|
|
|
}
|
|
|
- };
|
|
|
+ }
|
|
|
+
|
|
|
|
|
|
|
|
|
// ----------aidl 消息互通-----------
|
|
@@ -1648,15 +1675,19 @@ public class BackgroundService extends Service {
|
|
|
};
|
|
|
|
|
|
private void pauseTaskAndDelete(ServerActionAppUpdateRequestBean serverUpdateBean) {
|
|
|
- // 停止下载任务
|
|
|
- mDownloadHelper.pauseTask(serverUpdateBean.getFilePath(), apkFile, FIRST_ACTION).submit(MyApplication.getContext());
|
|
|
- // 删除对应文件
|
|
|
- apkFile = new File(getDir(), serverUpdateBean.getFileName());
|
|
|
- if (apkFile != null && apkFile.exists()) {
|
|
|
- AppLogUtils.e("有对应文件,删除");
|
|
|
- apkFile.delete();
|
|
|
- } else {
|
|
|
- AppLogUtils.e("无对应文件");
|
|
|
+ if(serverUpdateBean!=null) {
|
|
|
+ // 停止下载任务
|
|
|
+ mDownloadHelper.pauseTask(serverUpdateBean.getFilePath(), apkFile, FIRST_ACTION).submit(MyApplication.getContext());
|
|
|
+ // 删除对应文件
|
|
|
+ apkFile = new File(getDir(), serverUpdateBean.getFileName());
|
|
|
+ if (apkFile != null && apkFile.exists()) {
|
|
|
+ AppLogUtils.e("有对应文件,删除");
|
|
|
+ apkFile.delete();
|
|
|
+ } else {
|
|
|
+ AppLogUtils.e("无对应文件");
|
|
|
+ }
|
|
|
+ }else{
|
|
|
+ AppLogUtils.e(INSTALL_TAG+"pauseTaskAndDelete serverUpdateBean == null");
|
|
|
}
|
|
|
// map移除该key-value
|
|
|
Iterator<String> iterator = apkUrlMap.keySet().iterator();
|
|
@@ -1676,9 +1707,7 @@ public class BackgroundService extends Service {
|
|
|
AppLogUtils.e("newApkUrlMap--get--" + apkInfoMapStr);
|
|
|
|
|
|
// 移除定时任务
|
|
|
- if (apkInstallRunnable != null) {
|
|
|
- mHandler.removeCallbacks(apkInstallRunnable);
|
|
|
- }
|
|
|
+ getmHandler().removeMessages(WHAT_ANSTALL);
|
|
|
AppLogUtils.e("移除定时任务");
|
|
|
|
|
|
}
|