version:2.3

fix:增加上传日志功能,优化一键加速功能
update:
This commit is contained in:
2022-02-11 09:53:30 +08:00
parent edf23945b5
commit 61ef0d7bfa
57 changed files with 4290 additions and 925 deletions

View File

@@ -15,10 +15,10 @@ import android.util.Log;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.aoleyun.sn.action.JGYActions;
import com.aoleyun.sn.bean.PoweroffBean;
import com.aoleyun.sn.bean.SnRunLog;
import com.aoleyun.sn.bean.WiFiAlias;
import com.aoleyun.sn.comm.JGYActions;
import com.aoleyun.sn.network.api.newapi.GetPublicIPApi;
import com.aoleyun.sn.service.LogcatService;
import com.aoleyun.sn.utils.WiFiUtils;
@@ -39,11 +39,10 @@ import com.aoleyun.sn.utils.URLUtils;
import com.aoleyun.sn.bean.Appground;
import com.aoleyun.sn.bean.BaseResponse;
import com.aoleyun.sn.bean.NetAndLaunchBean;
import com.aoleyun.sn.jpush.TagAliasOperatorHelper;
import com.aoleyun.sn.network.api.newapi.SnTimeControlApi;
import com.aoleyun.sn.network.api.newapi.TopAppControlApi;
import com.aoleyun.sn.network.api.newapi.UpdateDeviceInfoApi;
import com.aoleyun.sn.service.MainService;
import com.aoleyun.sn.service.main.MainService;
import com.aoleyun.sn.utils.ApkUtils;
import com.aoleyun.sn.utils.ForegroundAppUtil;
import com.aoleyun.sn.utils.SPUtils;
@@ -55,7 +54,6 @@ import com.tencent.mmkv.MMKV;
import java.io.IOException;
import java.lang.reflect.Type;
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
@@ -537,58 +535,6 @@ public class HTTPInterface {
});
}
@SuppressLint("NewApi")
synchronized public static void updateDeviceInfo(Context context) {
String address = String.valueOf(SPUtils.get(context, "AmapAddress", "-"));
if ("-".equals(address)) {
address = (String) SPUtils.get(context, "AmapError", "-");
}
String longitude = String.valueOf(SPUtils.get(context, "longitude", "0"));
String latitude = String.valueOf(SPUtils.get(context, "latitude", "0"));
JSONObject jsonObject = new JSONObject();
jsonObject.put("address", address);
jsonObject.put("longitude", longitude);
jsonObject.put("latitude", latitude);
String add = jsonObject.toJSONString();
UpdateDeviceInfoApi updateDeviceInfo = NetInterfaceManager.getInstance().getUpdateDeviceInfo();
updateDeviceInfo.updateDeviceInfo(
Utils.getSerial(),
NetInterfaceManager.HTTP_KEY,
Utils.getMachine(context),
Utils.getHardware(context),
add
)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<ResponseBody>() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onNext(ResponseBody responseBody) {
try {
Log.e("updateDeviceInfo", "上传的结果" + responseBody.string());
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public void onError(Throwable e) {
Log.e("updateDeviceInfo", e.getMessage());
}
@Override
public void onComplete() {
}
});
ApkUtils.getAppInfo(context);
}
public static void getSnTimeControl(final Context context) {
SnTimeControlApi snTimeControl = NetInterfaceManager.getInstance().getSnTimeControlApi();
snTimeControl.getSnTimeControl(Utils.getSerial())

View File

@@ -2,8 +2,10 @@ package com.aoleyun.sn.network;
import android.annotation.SuppressLint;
import android.content.Context;
import android.provider.Settings;
import android.util.Log;
import com.alibaba.fastjson.JSONObject;
import com.aoleyun.sn.BuildConfig;
import com.aoleyun.sn.bean.Appground;
import com.aoleyun.sn.bean.BaseResponse;
@@ -18,6 +20,8 @@ import com.aoleyun.sn.bean.PoweroffBean;
import com.aoleyun.sn.bean.SnRunLog;
import com.aoleyun.sn.bean.StudentsInfo;
import com.aoleyun.sn.bean.WiFiAlias;
import com.aoleyun.sn.comm.CommonConfig;
import com.aoleyun.sn.comm.JGYActions;
import com.aoleyun.sn.comm.PackageNames;
import com.aoleyun.sn.network.api.AppLimitApi;
import com.aoleyun.sn.network.api.DeselectIDApi;
@@ -44,6 +48,7 @@ import com.aoleyun.sn.network.api.newapi.GetLockStateApi;
import com.aoleyun.sn.network.api.newapi.GetJpushTagsApi;
import com.aoleyun.sn.network.api.newapi.GetPoweroffApi;
import com.aoleyun.sn.network.api.newapi.GetSnRunLogApi;
import com.aoleyun.sn.network.api.newapi.GetUploadIsLogApi;
import com.aoleyun.sn.network.api.newapi.GetUploadLogApi;
import com.aoleyun.sn.network.api.newapi.GetWiFiAliasApi;
import com.aoleyun.sn.network.api.newapi.LogoImgApi;
@@ -58,27 +63,42 @@ import com.aoleyun.sn.network.api.newapi.SnTimeControlApi;
import com.aoleyun.sn.network.api.newapi.StudentsInfosApi;
import com.aoleyun.sn.network.api.newapi.TopAppControlApi;
import com.aoleyun.sn.network.api.newapi.UpdateDeviceInfoApi;
import com.aoleyun.sn.rlog.LogDBManager;
import com.aoleyun.sn.utils.ApkUtils;
import com.aoleyun.sn.utils.JGYUtils;
import com.aoleyun.sn.utils.MD5Util;
import com.aoleyun.sn.utils.SPUtils;
import com.aoleyun.sn.utils.Utils;
import com.google.gson.Gson;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import com.trello.rxlifecycle2.LifecycleProvider;
import com.trello.rxlifecycle2.android.ActivityEvent;
import org.jetbrains.annotations.NotNull;
import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.TimeUnit;
import io.reactivex.Observable;
import io.reactivex.Observer;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.annotations.NonNull;
import io.reactivex.disposables.Disposable;
import io.reactivex.schedulers.Schedulers;
import okhttp3.Cache;
import okhttp3.Interceptor;
import okhttp3.MediaType;
import okhttp3.MultipartBody;
import okhttp3.OkHttpClient;
import okhttp3.Protocol;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;
import okhttp3.ResponseBody;
import retrofit2.Retrofit;
@@ -86,6 +106,8 @@ import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory;
import retrofit2.converter.gson.GsonConverterFactory;
public class NetInterfaceManager {
private static final String TAG = NetInterfaceManager.class.getSimpleName();
@SuppressLint("StaticFieldLeak")
private static NetInterfaceManager INSTANCE;
private Context mContext;
@@ -547,4 +569,207 @@ public class NetInterfaceManager {
return mRetrofit.create(GetUploadLogApi.class);
}
public GetUploadIsLogApi getUploadIsLogApi() {
return mRetrofit.create(GetUploadIsLogApi.class);
}
/*
*
* execution
*
* */
private final int OK = 200;
private final static int NOTFOUND = -300;
public interface ObserverCallback {
void onSubscribe(Disposable d);
void onNext(BaseResponse response);
void onError(Throwable e);
void onComplete();
}
public void getLockedState(LifecycleProvider<ActivityEvent> provider, ObserverCallback callback) {
NetInterfaceManager.getInstance()
.getDevicesLockedStateObservable()
.compose(provider.bindUntilEvent(ActivityEvent.DESTROY))
.subscribe(new Observer<BaseResponse>() {
@Override
public void onSubscribe(@NonNull Disposable d) {
Log.e(TAG + ":" + "getLockedState", "onSubscribe: ");
callback.onSubscribe(d);
}
@Override
public void onNext(@NonNull BaseResponse response) {
Log.e(TAG + ":" + "getLockedState", "onNext: " + response);
if (response.code == OK) {
JsonObject jsonObject = JsonParser.parseString(new Gson().toJson(response.data)).getAsJsonObject();
int locked = jsonObject.get("lock").getAsInt();
Log.e(TAG + ":" + "getLockedState", "locked: " + locked);
int oldState = Settings.System.getInt(mContext.getContentResolver(), JGYActions.ACTION_QCH_UNLOCK_IPAD, JGYActions.FRAME_CODE_LOCKED);
Log.e(TAG + ":" + "getLockedState", "qch_unlock_ipad: " + oldState);
//后台1是锁定底层0是锁定
SPUtils.put(mContext, CommonConfig.JGY_FIRST_CONNECT, 1);
if (locked == JGYActions.NET_CODE_LOCKED) {
if (oldState == JGYActions.FRAME_CODE_UNLOCKED) {
Log.e(TAG + ":" + "getLockedState", "onNext: " + "state changed , reset devices");
Utils.doMasterClear(mContext);
}
Settings.System.putInt(mContext.getContentResolver(), JGYActions.ACTION_QCH_UNLOCK_IPAD, JGYActions.FRAME_CODE_LOCKED);
} else if (locked == JGYActions.NET_CODE_UNLOCKED) {
// SysSettingUtils.setEnableSetting(mContext);
Settings.System.putInt(mContext.getContentResolver(), JGYActions.ACTION_QCH_UNLOCK_IPAD, JGYActions.FRAME_CODE_UNLOCKED);
}
} else if (response.code == NOTFOUND) {
Settings.System.putInt(mContext.getContentResolver(), JGYActions.ACTION_QCH_UNLOCK_IPAD, JGYActions.FRAME_CODE_LOCKED);
Log.e(TAG + ":" + "getLockedState", "locked: " + false);
}
callback.onNext(response);
}
@Override
public void onError(@NonNull Throwable e) {
Log.e(TAG + ":" + "getLockedState", "onError: " + e.getMessage());
callback.onError(e);
onComplete();
}
@Override
public void onComplete() {
Log.e(TAG + ":" + "getLockedState", "onComplete: ");
callback.onComplete();
}
});
}
@SuppressLint("NewApi")
public void updateDeviceInfo(ObserverCallback callback) {
String address = String.valueOf(SPUtils.get(mContext, "AmapAddress", "-"));
if ("-".equals(address)) {
address = (String) SPUtils.get(mContext, "AmapError", "-");
}
String longitude = String.valueOf(SPUtils.get(mContext, "longitude", "0"));
String latitude = String.valueOf(SPUtils.get(mContext, "latitude", "0"));
JSONObject jsonObject = new JSONObject();
jsonObject.put("address", address);
jsonObject.put("longitude", longitude);
jsonObject.put("latitude", latitude);
String add = jsonObject.toJSONString();
getUpdateDeviceInfo().updateDeviceInfo(
Utils.getSerial(),
NetInterfaceManager.HTTP_KEY,
Utils.getMachine(mContext),
Utils.getHardware(mContext),
add
)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<BaseResponse>() {
@Override
public void onSubscribe(Disposable d) {
callback.onSubscribe(d);
}
@Override
public void onNext(BaseResponse baseResponse) {
callback.onNext(baseResponse);
Log.e("updateDeviceInfo", "上传的结果" + baseResponse.toString());
}
@Override
public void onError(Throwable e) {
callback.onError(e);
Log.e("updateDeviceInfo", e.getMessage());
onComplete();
}
@Override
public void onComplete() {
callback.onComplete();
}
});
}
public void sendRunningAppInfo(ObserverCallback callback) {
String jsonString = ApkUtils.getRunningAppInfo(mContext);
getUploadAppInfoApi().getUploadAppInfoApi(NetInterfaceManager.HTTP_KEY,
Utils.getSerial(),
jsonString)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<BaseResponse>() {
@Override
public void onSubscribe(Disposable d) {
Log.e("sendRunningAppInfo", "onSubscribe: ");
callback.onSubscribe(d);
}
@Override
public void onNext(BaseResponse baseResponse) {
Log.e("sendRunningAppInfo", "onNext: " + baseResponse.toString());
callback.onNext(baseResponse);
}
@Override
public void onError(Throwable e) {
Log.e("sendRunningAppInfo", "onError: " + e.getMessage());
callback.onError(e);
onComplete();
}
@Override
public void onComplete() {
Log.e("sendRunningAppInfo", "onComplete: ");
callback.onComplete();
}
});
}
public void uploadLogFile() {
String logFilePath = LogDBManager.getInstance().saveToFile();
File logFile = new File(logFilePath);
if (!logFile.exists()) {
Log.e(TAG, "senSNLogFile: " + logFilePath + " is not exists");
return;
}
Map<String, String> params = new HashMap<>();
params.put("sn", Utils.getSerial());
MediaType mediaType = MediaType.Companion.parse("text/plain");
RequestBody fileBody = RequestBody.Companion.create(logFile, mediaType);
//设置一个file文件
MultipartBody.Part body = MultipartBody.Part.createFormData("file", logFile.getName(), fileBody);
NetInterfaceManager.getInstance().getUploadIsLogApi()
.sendSnisLog(params, body)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<BaseResponse>() {
@Override
public void onSubscribe(Disposable d) {
Log.e("uploadLogFile", "onSubscribe: ");
}
@Override
public void onNext(BaseResponse baseResponse) {
Log.e("uploadLogFile", "onNext: " + baseResponse);
}
@Override
public void onError(Throwable e) {
Log.e("uploadLogFile", "onError: " + e.getMessage());
onComplete();
}
@Override
public void onComplete() {
Log.e("uploadLogFile", "onComplete: ");
}
});
}
}

View File

@@ -8,86 +8,87 @@ import rxhttp.wrapper.annotation.DefaultDomain;
* @author Administrator
*/
public class UrlAddress {
//根网址
/*根网址*/
@DefaultDomain
public static final String HTTP_TAG_HEAD_NEW = BuildConfig.ROOT_URL;
// 下载接口 根据包名匹配 请求后更新下载次数
/*下载接口 根据包名匹配 请求后更新下载次数*/
public static final String SEND_DOWNLOAD_TIMES = "count/index";
//app下载完成发送下载次数
/*app下载完成发送下载次数*/
public static final String SEND_DOWNLOAD_FILE_INFO = "app/downloadApp";
//获取设备锁定状态
/*获取设备锁定状态*/
public static final String GET_DEVICES_LOCKED = "lock/index";
//发送设备信息
/*发送设备信息*/
public static final String SEND_DEVICES = "Mac/getMac";
//发送app使用情况
/*发送app使用情况*/
public static final String GET_APP_LOG = "Applog/getAppLog";
//更新接口
/*更新接口*/
public static final String CHECK_UPDATE = "Silent/silent";
//获取设备标签
/*获取设备标签*/
public static final String GET_DEVICES_TAGS = "Sn/getSnTag";
//删除Aliases
/*删除Aliases*/
public static final String DELETE_GEDEVICE_ALIAS = "Sn/deleteAliases";
//浏览器书签主页设置
/*浏览器书签主页设置*/
public static final String SET_HOMEPAG_TAG = "Label";
//app内部网页管控
/*app内部网页管控*/
public static final String SET_APPINSIDEWEB = "Appground";
//浏览器黑白名单地址
/*浏览器黑白名单地址*/
public static final String SET_BROWSER_LIST = "browser";
//强制安装应用
/*强制安装应用*/
public static final String GET_FORCE_INSTALL_LIST = "forceinstall/index";
//应用白名单
/*应用白名单*/
public static final String SET_WHITE_PACKAGE_LIST = "firmware/index";
//获取隐藏桌面图标
/*获取隐藏桌面图标*/
public static final String GET_HIDE_DESKTOPICON = "Icon";
//获取应用升级自启
/*获取应用升级自启*/
public static final String NET_AND_LAUNCH_API = "automatic/get";
//通过sn获取信息
/*通过sn获取信息*/
public static final String GET_STUDENTS_INFO = "Sn/getStudent";
//上传截图
/*上传截图*/
public static final String SEND_SCREENSHOT = "Screenshot/addImg";
//上传我的设备
/*上传我的设备*/
public static final String UPDATE_DEVICEINFO = "Mac/getInfo";
//获取霸屏状态
/*获取霸屏状态*/
public static final String GET_LOCK_SCREEN_STATE = "Sn/getSnScreen";
//获取默认桌面升级
/*获取默认桌面升级*/
public static final String GET_DESKTOP = "Sn/getSnDesktop";
//获取时间管控
/*获取时间管控*/
public static final String GET_SN_TIME_CONTROL = "Sn/getSnTimeControl";
//获取顶部app管控
/*获取顶部app管控*/
public static final String GET_TOP_APP_CONTROL = "Sn/getSnAppControl";
//获取测试app
/*获取测试app*/
public static final String GET_SN_APP_TEST = "Sn/getSnAppTest";
//开机动画
/*开机动画*/
public static final String GET_LOGO_IMG = "Sn/getLogoImg";
//开发人员选项开关
/*开发人员选项开关*/
public static final String GET_DEVELOPER = "Sn/getDeveloper";
//通过固件名获取内置应用
/*通过固件名获取内置应用*/
public static final String GET_ROM_APP = "And/getFirmwareApp";
//获取全部应用
/*获取全部应用*/
public static final String GET_ALL_APP = "recommend/index";
//获取电子书包激活码
/*获取电子书包激活码*/
public static final String GET_EBAG_CODE = "And/getEbagCode";
//获取系统默认程序
/*获取系统默认程序*/
public static final String GET_DEFAULT_APP = "app/getDefaultApp";
//恢复出厂设置次数
/*恢复出厂设置次数*/
public static final String SEND_RESTORE_TIMES = "And/restore";
//获取远程关机时间
/*获取远程关机时间*/
public static final String GET_POWEROFF_TIME = "And/getTimedShutdown";
//获取WiFi名和密码
/*获取WiFi名和密码*/
public static final String GET_WIFI_ALIAS_PW = "And/getWifi";
//获取log任务
/*获取log任务*/
public static final String GET_LOG_ORDER = "And/getSnRunLog";
//上传log文件
/*上传log文件*/
public static final String UPLOAD_LOG_FILE = "And/uploadLogFile";
/*上传运行日志设置文件*/
public static final String UPLOAD_IS_LOG_FILE = "And/sn/uploadIsLogFile";
//获取公网IP
/*获取公网IP*/
public static final String SHOUHU_CITYJSON = "http://pv.sohu.com/cityjson/";
//删除alias
/*删除alias*/
public static final String DELETE_JPUSH_ALIAS = "https://device.jpush.cn/v3/aliases/";
//删除tags
/*删除tags*/
public static final String DELETE_JPUSH_TAG = "https://device.jpush.cn/v3/tags/";
}

View File

@@ -1,5 +1,7 @@
package com.aoleyun.sn.network.api;
import com.aoleyun.sn.bean.BaseResponse;
import io.reactivex.Observable;
import okhttp3.ResponseBody;
import retrofit2.http.Field;
@@ -9,7 +11,7 @@ import retrofit2.http.POST;
public interface UploadAppInfoApi {
@FormUrlEncoded
@POST("log/index")
Observable<ResponseBody> getUploadAppInfoApi(
Observable<BaseResponse> getUploadAppInfoApi(
@Field("key") String key,
@Field("sn") String sn,
@Field("app_infoes") String json

View File

@@ -0,0 +1,23 @@
package com.aoleyun.sn.network.api.newapi;
import com.aoleyun.sn.bean.BaseResponse;
import com.aoleyun.sn.bean.SnRunLog;
import com.aoleyun.sn.network.UrlAddress;
import java.util.Map;
import io.reactivex.Observable;
import okhttp3.MultipartBody;
import retrofit2.http.Multipart;
import retrofit2.http.POST;
import retrofit2.http.Part;
import retrofit2.http.QueryMap;
public interface GetUploadIsLogApi {
@Multipart
@POST(UrlAddress.UPLOAD_IS_LOG_FILE)
Observable<BaseResponse> sendSnisLog(
@QueryMap Map<String, String> params,
@Part MultipartBody.Part body
);
}

View File

@@ -1,9 +1,9 @@
package com.aoleyun.sn.network.api.newapi;
import com.aoleyun.sn.bean.BaseResponse;
import com.aoleyun.sn.network.UrlAddress;
import io.reactivex.Observable;
import okhttp3.ResponseBody;
import retrofit2.http.Field;
import retrofit2.http.FormUrlEncoded;
import retrofit2.http.POST;
@@ -11,7 +11,7 @@ import retrofit2.http.POST;
public interface UpdateDeviceInfoApi {
@FormUrlEncoded
@POST(UrlAddress.UPDATE_DEVICEINFO)
Observable<ResponseBody> updateDeviceInfo(
Observable<BaseResponse> updateDeviceInfo(
@Field("sn") String sn,
@Field("key") String key,
@Field("machine") String machine,