987 lines
43 KiB
Java
987 lines
43 KiB
Java
package com.aoleyun.sn.receiver;
|
||
|
||
import android.annotation.SuppressLint;
|
||
import android.content.BroadcastReceiver;
|
||
import android.content.Context;
|
||
import android.content.ContextWrapper;
|
||
import android.content.Intent;
|
||
import android.content.IntentFilter;
|
||
import android.content.pm.PackageInfo;
|
||
import android.content.pm.PackageManager;
|
||
import android.media.AudioManager;
|
||
import android.media.MediaPlayer;
|
||
import android.os.BatteryManager;
|
||
import android.os.Build;
|
||
import android.os.Bundle;
|
||
import android.os.Handler;
|
||
import android.provider.Settings;
|
||
import android.text.TextUtils;
|
||
import android.util.Log;
|
||
|
||
import com.alibaba.fastjson.JSON;
|
||
import com.alibaba.fastjson.JSONObject;
|
||
import com.amap.api.location.AMapLocation;
|
||
import com.amap.api.location.AMapLocationClient;
|
||
import com.amap.api.location.AMapLocationListener;
|
||
import com.aoleyun.sn.action.JGYActions;
|
||
import com.aoleyun.sn.bean.BaseResponse;
|
||
import com.arialyy.aria.core.Aria;
|
||
import com.blankj.utilcode.util.PathUtils;
|
||
import com.aoleyun.sn.R;
|
||
import com.aoleyun.sn.utils.CacheUtils;
|
||
import com.aoleyun.sn.utils.JGYUtils;
|
||
import com.aoleyun.sn.base.BaseApplication;
|
||
import com.aoleyun.sn.comm.CommonDatas;
|
||
import com.aoleyun.sn.manager.AmapManager;
|
||
import com.aoleyun.sn.manager.NetInterfaceManager;
|
||
import com.aoleyun.sn.network.HTTPInterface;
|
||
import com.aoleyun.sn.service.MainService;
|
||
import com.aoleyun.sn.utils.ApkUtils;
|
||
import com.aoleyun.sn.utils.CmdUtil;
|
||
import com.aoleyun.sn.utils.ForegroundAppUtil;
|
||
import com.aoleyun.sn.utils.Logutils;
|
||
import com.aoleyun.sn.utils.MySQLData;
|
||
import com.aoleyun.sn.utils.SPUtils;
|
||
import com.aoleyun.sn.utils.SaveListUtils;
|
||
import com.aoleyun.sn.utils.ServiceAliveUtils;
|
||
import com.aoleyun.sn.utils.ToastUtil;
|
||
import com.aoleyun.sn.utils.Utils;
|
||
|
||
import java.io.File;
|
||
import java.util.Arrays;
|
||
import java.util.HashSet;
|
||
|
||
import cn.jpush.android.api.JPushInterface;
|
||
import io.reactivex.Observable;
|
||
import io.reactivex.ObservableEmitter;
|
||
import io.reactivex.ObservableOnSubscribe;
|
||
import io.reactivex.Observer;
|
||
import io.reactivex.android.schedulers.AndroidSchedulers;
|
||
import io.reactivex.disposables.Disposable;
|
||
import io.reactivex.schedulers.Schedulers;
|
||
import okhttp3.MediaType;
|
||
import okhttp3.MultipartBody;
|
||
import okhttp3.RequestBody;
|
||
import okhttp3.ResponseBody;
|
||
|
||
public class MyJPushReceiver extends BroadcastReceiver {
|
||
private static final String TAG = MyJPushReceiver.class.getSimpleName();
|
||
|
||
//删除应用
|
||
private final String MSG_DELETE = "1";
|
||
//系统设置管控
|
||
private final String MSG_SETTING = "2";
|
||
//浏览器网址管控
|
||
private final String MSG_BROWSER = "4";
|
||
//app id管控
|
||
private final String MSG_APPID = "5";
|
||
//应用联网管控
|
||
private final String MSG_NET_CONTROL = "6";
|
||
//APP自启联网滑动管控
|
||
private final String MSG_POWER_ON = "7";
|
||
//重置
|
||
private final String MSG_RESET = "8";
|
||
//强制安装
|
||
private final String MSG_INSTALL = "9";
|
||
//解锁
|
||
private final String MSG_LOCK = "10";
|
||
//旧版相机管控
|
||
private final String MSG_CAMERA = "11";
|
||
|
||
private final String MSG_ONEPACKAGES = "12";
|
||
//app使用时间
|
||
private final String GET_APP_USEDTIME = "13";
|
||
//强制下载
|
||
private final String GET_FORCEDOWNLOADURL = "14";
|
||
//主页和书签管控
|
||
private final String SET_HOMEPAG_TAG = "15";
|
||
//app内网页管控
|
||
private final String APP_WEBSITE = "16";
|
||
//禁止app升级
|
||
private final String DISABLE_APPUPDATE = "17";
|
||
//隐藏桌面图标
|
||
private final String HIDE_DESKTOP_ICON = "18";
|
||
//禁止滑动
|
||
private final String DISABLE_APP_SLIDE = "19";
|
||
//更新引用白名单
|
||
private final String UPDATE_INFO = "20";
|
||
//截图
|
||
private final String SN_SCREENSHOT = "21";
|
||
//重启
|
||
private final String DEVICES_REBOOT = "22";
|
||
//获取设备详细信息
|
||
private final String GET_DEVICES_INFO = "23";
|
||
//霸屏
|
||
private final String LOCK_SCREEN = "24";
|
||
//取消霸屏
|
||
private final String UNLOCK_SCREEN = "25";
|
||
//结束进程
|
||
private final String KILL_SERVER = "26";
|
||
//时间管控
|
||
private final String TIME_CONTROL = "27";
|
||
//app霸屏
|
||
private final String TOP_APP = "28";
|
||
//开机动画
|
||
private final String LOGO_IMG = "29";
|
||
//默认应用
|
||
private final String DEFAULTP_APP = "30";
|
||
//发出声音
|
||
private final String PLAY_SOUND = "31";
|
||
//清除app数据
|
||
private final String CLEAN_APP_CACHE = "32";
|
||
//开发人员选项
|
||
private final String DEVELOPER_OPTIONS = "33";
|
||
//全局更新
|
||
private final String GLOBAL_UPDATE = "34";
|
||
//电子书包激活码
|
||
private final String EBAG_CODE = "35";
|
||
//更新白名单
|
||
private final String UPDATE_WHITELIST = "36";
|
||
//更换批次不恢复出厂
|
||
private final String UPDATE_BATCH = "37";
|
||
|
||
|
||
private Context mContext;
|
||
|
||
private int changeNum(int paramInt) {
|
||
return paramInt == 0 ? 1 : 0;
|
||
}
|
||
|
||
@Override
|
||
public void onReceive(Context context, Intent intent) {
|
||
mContext = context;
|
||
Bundle bundle = intent.getExtras();
|
||
|
||
if (JPushInterface.ACTION_REGISTRATION_ID.equals(intent.getAction())) {
|
||
String regId = bundle.getString(JPushInterface.EXTRA_REGISTRATION_ID);
|
||
Logutils.e(TAG, "[MyReceiver] 接收Registration Id : " + regId);
|
||
//send the Registration Id to your server...
|
||
} else if (JPushInterface.ACTION_MESSAGE_RECEIVED.equals(intent.getAction())) {
|
||
// ToastTool.show("[MyReceiver] 接收到推送下来的自定义消息: " + bundle.getString(JPushInterface.EXTRA_MESSAGE)
|
||
// + "---" + bundle.getString(JPushInterface.EXTRA_TITLE) + "---" + bundle.getString(JPushInterface.EXTRA_CONTENT_TYPE)
|
||
// + "---" + bundle.getString(JPushInterface.EXTRA_EXTRA) + "----" + bundle.getString("package_name"));
|
||
// Logutils.e(TAG, "[MyReceiver] 接收到推送下来的自定义消息: " + bundle.getString(JPushInterface.EXTRA_MESSAGE)
|
||
// + "---" + bundle.getString(JPushInterface.EXTRA_TITLE) + "---" + bundle.getString(JPushInterface.EXTRA_CONTENT_TYPE)
|
||
// + "---" + bundle.getString(JPushInterface.EXTRA_EXTRA) + "----" + bundle.getString("package_name"));
|
||
processCustomMessage(context, bundle);//屏蔽推送
|
||
} else if (JPushInterface.ACTION_NOTIFICATION_RECEIVED.equals(intent.getAction())) {
|
||
Logutils.e(TAG, "[MyReceiver] 接收到推送下来的通知" + bundle.getString(JPushInterface.EXTRA_EXTRA));
|
||
// doDownloadAndInstall(bundle.getString(JPushInterface.EXTRA_EXTRA));
|
||
// Logutils.e(getBatteryLevel()+"-0-iweroiwerewefeerer-----------");
|
||
int notifactionId = bundle.getInt(JPushInterface.EXTRA_NOTIFICATION_ID);
|
||
Logutils.e(TAG, "[MyReceiver] 接收到推送下来的通知的ID: " + notifactionId);
|
||
} else if (JPushInterface.ACTION_NOTIFICATION_OPENED.equals(intent.getAction())) {
|
||
Logutils.e(TAG, "[MyReceiver] 用户点击打开了通知");
|
||
} else if (JPushInterface.ACTION_RICHPUSH_CALLBACK.equals(intent.getAction())) {
|
||
Logutils.e(TAG, "[MyReceiver] 用户收到到RICH PUSH CALLBACK: " + bundle.getString(JPushInterface.EXTRA_EXTRA));
|
||
//在这里根据 JPushInterface.EXTRA_EXTRA 的内容处理代码,比如打开新的Activity, 打开一个网页等..
|
||
} else if (JPushInterface.ACTION_CONNECTION_CHANGE.equals(intent.getAction())) {
|
||
boolean connected = intent.getBooleanExtra(JPushInterface.EXTRA_CONNECTION_CHANGE, false);
|
||
Logutils.i(TAG, "[MyReceiver]" + intent.getAction() + " connected state change to " + connected);
|
||
} else {
|
||
Logutils.e(TAG, "[MyReceiver] Unhandled intent - " + intent.getAction());
|
||
}
|
||
}
|
||
|
||
private void processCustomMessage(final Context context, Bundle bundle) {
|
||
String message = bundle.getString(JPushInterface.EXTRA_MESSAGE);
|
||
String title = bundle.getString(JPushInterface.EXTRA_TITLE);
|
||
String type = bundle.getString(JPushInterface.EXTRA_CONTENT_TYPE);
|
||
String extras = bundle.getString(JPushInterface.EXTRA_EXTRA);
|
||
String package_name = bundle.getString("package_name");
|
||
Logutils.e(TAG, "message::" + message + "--type::" + type + "--title::" + title + "--extras::" + extras);
|
||
switch (message) {
|
||
default:
|
||
break;
|
||
case MSG_DELETE:
|
||
ToastUtil.betaShow("收到管控:应用删除");
|
||
if (!TextUtils.isEmpty(title)) {
|
||
if (SaveListUtils.getlist().contains(title)) {
|
||
SaveListUtils.getlist().remove(title);
|
||
}
|
||
SaveListUtils.sendForceAPP(mContext);
|
||
ApkUtils.UninstallAPP(mContext, title);
|
||
}
|
||
HTTPInterface.getAppLimit(context);
|
||
HTTPInterface.getNetAndLaunchSetting(mContext);
|
||
break;
|
||
case MSG_SETTING:
|
||
ToastUtil.betaShow("收到管控:系统设置");
|
||
if (!TextUtils.isEmpty(extras)) {
|
||
JGYUtils.getInstance().SettingSysData(extras);
|
||
}
|
||
break;
|
||
case MSG_BROWSER:
|
||
ToastUtil.betaShow("收到管控:浏览器网址管控");
|
||
getDeselectBrowerID();
|
||
break;
|
||
case MSG_APPID:
|
||
ToastUtil.betaShow("收到管控:APP ID管控");
|
||
getDeselectID();
|
||
break;
|
||
case MSG_NET_CONTROL:
|
||
ToastUtil.betaShow("收到管控:应用联网管控");
|
||
settingNetControl(extras);
|
||
break;
|
||
case MSG_POWER_ON:
|
||
ToastUtil.betaShow("收到管控:应用自启管控");
|
||
settingPowerOn(extras);
|
||
break;
|
||
case MSG_RESET:
|
||
ToastUtil.betaShow("收到管控:设备重置");
|
||
Utils.doMasterClear(mContext);
|
||
break;
|
||
case MSG_INSTALL:
|
||
ToastUtil.betaShow("收到管控:应用安装");
|
||
HTTPInterface.getAppLimit(context);
|
||
doDownloadAndInstall(extras);
|
||
HTTPInterface.setHideDesktopIcon(mContext);
|
||
break;
|
||
case MSG_LOCK:
|
||
ToastUtil.betaShow("收到管控:设备锁定");
|
||
settingLock(extras);
|
||
break;
|
||
case MSG_CAMERA:
|
||
ToastUtil.betaShow("收到管控:相机管控");
|
||
settingCamera(extras);
|
||
break;
|
||
case MSG_ONEPACKAGES:
|
||
ToastUtil.betaShow("收到管控:");
|
||
if (BaseApplication.getInstance().isFinished()) {
|
||
settingOneNet(extras);
|
||
}
|
||
break;
|
||
case GET_APP_USEDTIME:
|
||
ToastUtil.betaShow("收到管控:获取应用使用时间");
|
||
JSONObject jsonObject = JSON.parseObject(extras);
|
||
String random = jsonObject.getString("random");
|
||
String sendType = jsonObject.getString("type");
|
||
BaseApplication.sendAppUsedTime(random, sendType);
|
||
break;
|
||
case GET_FORCEDOWNLOADURL:
|
||
ToastUtil.betaShow("收到管控:应用强制安装");
|
||
File file = new File(PathUtils.getExternalDownloadsPath() + "/jgy/");
|
||
if (!file.exists()) {
|
||
file.mkdirs();
|
||
}
|
||
if (TextUtils.isEmpty(extras)) {
|
||
Logutils.e(TAG, "settingNetControl extras is null");
|
||
return;
|
||
}
|
||
JSONObject extra = JSON.parseObject(extras);
|
||
String app_name = extra.getString("app_name");
|
||
String app_package = extra.getString("package");
|
||
String url = extra.getString("url");
|
||
int versionCode = extra.getInteger("version_code");
|
||
String app_id = extra.getString("app_id");
|
||
JSONObject packageObj = new JSONObject();
|
||
packageObj.put("app_name", app_name);
|
||
packageObj.put("app_package", app_package);
|
||
packageObj.put("app_id", app_id);
|
||
// Aria.download(this)
|
||
// .load(url) //读取下载地址
|
||
// .setFilePath(PathUtils.getExternalDownloadsPath() + "/jgy/" + EncryptUtils.encryptMD5ToString(url) + ".apk", true)
|
||
// .setExtendField(packageObj.toJSONString())
|
||
// .create(); //启动下载}
|
||
Utils.ariaDownload(mContext, url, packageObj);
|
||
break;
|
||
case SET_HOMEPAG_TAG:
|
||
Handler.getMain().postDelayed(new Runnable() {
|
||
@Override
|
||
public void run() {
|
||
try {
|
||
new CacheUtils().cleanApplicationUserData(mContext, "com.android.browser");
|
||
} catch (Exception e) {
|
||
e.printStackTrace();
|
||
Logutils.e(TAG, "setHomepagtag: " + e.getMessage());
|
||
}
|
||
setHomepagtag(extras);
|
||
ToastUtil.betaShow("收到管控:浏览器主页书签设置");
|
||
}
|
||
}, 2000);
|
||
|
||
break;
|
||
case APP_WEBSITE:
|
||
ToastUtil.betaShow("收到管控:APP内部网页管控");
|
||
setAPPinsideWebsite(extras);
|
||
break;
|
||
case DISABLE_APPUPDATE:
|
||
ToastUtil.betaShow("收到管控:应用禁止更新设置");
|
||
setDisableUpdateList(extras);
|
||
break;
|
||
case HIDE_DESKTOP_ICON:
|
||
ToastUtil.betaShow("收到管控:隐藏应用设置");
|
||
Handler.getMain().postDelayed(() -> {
|
||
//后台发送时数据库未改变,有时候可能获取到的数据时上一次的
|
||
Logutils.e(TAG, "run: HIDE_DESKTOP_ICON ");
|
||
HTTPInterface.setHideDesktopIcon(context);
|
||
}, 2000);
|
||
break;
|
||
case DISABLE_APP_SLIDE:
|
||
ToastUtil.betaShow("收到管控:应用滑动设置");
|
||
setDisableSlideList(extras);
|
||
break;
|
||
case UPDATE_INFO:
|
||
ToastUtil.betaShow("收到管控:更新白名单");
|
||
HTTPInterface.getAppLimit(context);
|
||
break;
|
||
case SN_SCREENSHOT:
|
||
ToastUtil.betaShow("收到管控:设备截图");
|
||
screenshot(extras);
|
||
break;
|
||
case DEVICES_REBOOT:
|
||
ToastUtil.betaShow("收到管控:设备重启");
|
||
Utils.rebootDevices(mContext);
|
||
break;
|
||
case GET_DEVICES_INFO:
|
||
ToastUtil.betaShow("收到管控:获取设备信息");
|
||
if (MainService.mPresenter != null) {
|
||
MainService.mPresenter.getLockedState();
|
||
Logutils.e(TAG, "mPresenter: " + "getLockedState");
|
||
} else {
|
||
Logutils.e(TAG, "mPresenter is NULL");
|
||
}
|
||
AMapLocationClient aMapLocationClient = AmapManager.getInstance().getLocationClient();
|
||
aMapLocationClient.stopLocation();
|
||
aMapLocationClient.startLocation();
|
||
aMapLocationClient.setLocationListener(new AMapLocationListener() {
|
||
@Override
|
||
public void onLocationChanged(AMapLocation aMapLocation) {
|
||
StringBuilder sb = new StringBuilder();
|
||
//errCode等于0代表定位成功,其他的为定位失败,具体的可以参照官网定位错误码说明
|
||
if (aMapLocation.getErrorCode() == 0) {
|
||
Logutils.e(TAG, "onLocationChanged: " + "定位成功");
|
||
Logutils.e(TAG, "onLocationChanged: " + aMapLocation.getAddress());
|
||
sb.append(aMapLocation.getAddress()).append("\n");
|
||
SPUtils.put(mContext, "AmapAddress", aMapLocation.getAddress());
|
||
SPUtils.put(mContext, "longitude", aMapLocation.getLongitude());
|
||
SPUtils.put(mContext, "latitude", aMapLocation.getLatitude());
|
||
} else {
|
||
//定位失败
|
||
sb.append("定位失败" + "\n");
|
||
SPUtils.put(mContext, "AmapError", String.valueOf(aMapLocation.getErrorCode()));
|
||
}
|
||
Logutils.e(TAG, (String) SPUtils.get(mContext, "AmapAddress", "-"));
|
||
Logutils.e(TAG, (String) SPUtils.get(mContext, "AmapError", "-"));
|
||
Logutils.e(TAG, "amap: " + sb.toString());
|
||
HTTPInterface.updateDeviceInfo(mContext);
|
||
}
|
||
});
|
||
break;
|
||
case LOCK_SCREEN:
|
||
ToastUtil.betaShow("收到管控:屏幕锁定");
|
||
JSONObject lockJSONObject = JSON.parseObject(extras);
|
||
String name = lockJSONObject.getString("name");
|
||
setLock_screen(1, context, name);
|
||
break;
|
||
case UNLOCK_SCREEN:
|
||
ToastUtil.betaShow("收到管控:屏幕解锁");
|
||
setLock_screen(0, context, "");
|
||
break;
|
||
case KILL_SERVER:
|
||
ToastUtil.betaShow("收到管控:停止应用");
|
||
JSONObject killJSONObject = JSON.parseObject(extras);
|
||
String packages = killJSONObject.getString("package_name");
|
||
JGYUtils.getInstance().killBackgroundProcesses(context, packages);
|
||
break;
|
||
case TIME_CONTROL:
|
||
ToastUtil.betaShow("收到管控:使用时间管控");
|
||
getTimeControl(context, extras);
|
||
break;
|
||
case TOP_APP:
|
||
ToastUtil.betaShow("收到管控:应用霸屏");
|
||
getTopApp(context, extras);
|
||
break;
|
||
case LOGO_IMG:
|
||
ToastUtil.betaShow("收到管控:开机动画设置");
|
||
setBootanimation(context, extras);
|
||
Logutils.e(TAG, "processCustomMessage: " + extras);
|
||
break;
|
||
case DEFAULTP_APP:
|
||
ToastUtil.betaShow("收到管控:");
|
||
setDefalutApp(context, extras);
|
||
break;
|
||
case PLAY_SOUND:
|
||
ToastUtil.betaShow("收到管控:查找设备");
|
||
playSound(context, extras);
|
||
break;
|
||
case CLEAN_APP_CACHE:
|
||
ToastUtil.betaShow("收到管控:应用缓存清除");
|
||
cleanCache(context, extras);
|
||
break;
|
||
case DEVELOPER_OPTIONS:
|
||
ToastUtil.betaShow("收到管控:开发人员选项管控");
|
||
setDeveloperoptions(extras);
|
||
break;
|
||
case GLOBAL_UPDATE:
|
||
ToastUtil.betaShow("收到管控:全局更新");
|
||
GlobalUpdate(extras);
|
||
break;
|
||
case EBAG_CODE:
|
||
ToastUtil.betaShow("收到管控:电子书包激活码");
|
||
setEbagCode(extras);
|
||
JGYUtils.getInstance().killBackgroundProcesses(context, "com.jxw.launcher");
|
||
break;
|
||
case UPDATE_WHITELIST:
|
||
ToastUtil.betaShow("收到管控:更新白名单");
|
||
HTTPInterface.getAppLimit(mContext);
|
||
break;
|
||
case UPDATE_BATCH:
|
||
ToastUtil.betaShow("收到管控:更换批次不恢复出厂设置");
|
||
Aria.download(this).removeAllTask(true);
|
||
try {
|
||
new CacheUtils().cleanApplicationUserData(mContext, "com.android.browser");
|
||
} catch (Exception e) {
|
||
e.printStackTrace();
|
||
Logutils.e(TAG, "setHomepagtag: " + e.getMessage());
|
||
}
|
||
if (MainService.mPresenter != null) {
|
||
MainService.mPresenter.getLockedState();
|
||
Logutils.e("getLockedState", "mPresenter: " + "getLockedState");
|
||
} else {
|
||
Logutils.e("getLockedState", "mPresenter is NULL");
|
||
}
|
||
break;
|
||
}
|
||
|
||
}
|
||
|
||
private void setLock_screen(int state, Context context, String name) {
|
||
if (ServiceAliveUtils.isServiceAlive(context)) {
|
||
context.startService(new Intent(context, MainService.class));
|
||
}
|
||
Intent intent = new Intent();
|
||
intent.putExtra("name", name);
|
||
if (state == 1) {
|
||
intent.setAction(MainService.LockScreenReceiver.action_lock);
|
||
} else if (state == 0) {
|
||
intent.setAction(MainService.LockScreenReceiver.action_unlock);
|
||
}
|
||
context.sendBroadcast(intent);
|
||
}
|
||
|
||
private void doDownloadAndInstall(String jsonString) {
|
||
File file = new File(PathUtils.getExternalDownloadsPath() + "/jgy/");
|
||
if (!file.exists()) {
|
||
file.mkdirs();
|
||
}
|
||
if (TextUtils.isEmpty(jsonString)) {
|
||
Logutils.e(TAG, "doDownloadAndInstall: extras is null");
|
||
return;
|
||
}
|
||
JSONObject jSONObject = JSON.parseObject(jsonString);
|
||
String app_name = jSONObject.getString("app_name");
|
||
String app_package = jSONObject.getString("bg");
|
||
String app_url = jSONObject.getString("app_url");
|
||
int app_version_code = jSONObject.getInteger("app_version_code");
|
||
String app_id = jSONObject.getString("app_id");
|
||
String MD5 = jSONObject.getString("app_md5");
|
||
JSONObject packageObj = new JSONObject();
|
||
packageObj.put("app_name", app_name);
|
||
packageObj.put("app_package", app_package);
|
||
packageObj.put("app_id", app_id);
|
||
packageObj.put("MD5", MD5);
|
||
Logutils.e(TAG, "doDownloadAndInstall: app_package:" + app_package);
|
||
Logutils.e(TAG, "doDownloadAndInstall: app_url:" + app_url);
|
||
SaveListUtils.addList(app_package);
|
||
SaveListUtils.sendForceAPP(mContext);
|
||
PackageManager pm = mContext.getPackageManager();
|
||
PackageInfo packageInfo = null;
|
||
try {
|
||
packageInfo = pm.getPackageInfo(app_package, 0);
|
||
} catch (PackageManager.NameNotFoundException e) {
|
||
e.printStackTrace();
|
||
}
|
||
if (packageInfo == null) {
|
||
Logutils.e(TAG, "doDownloadAndInstall: " + app_package + "未安装");
|
||
if (!SaveListUtils.isDownLoading(app_url)) {
|
||
Logutils.e(TAG, "doDownloadAndInstall: " + app_package + "开始下载");
|
||
Utils.ariaDownload(mContext, app_url, packageObj);
|
||
}
|
||
} else {
|
||
long appVersionCode;
|
||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
|
||
appVersionCode = packageInfo.getLongVersionCode();
|
||
} else {
|
||
appVersionCode = packageInfo.versionCode;
|
||
}
|
||
if (app_version_code > appVersionCode) {
|
||
if (!SaveListUtils.isDownLoading(app_url)) {
|
||
Utils.ariaDownload(mContext, app_url, packageObj);
|
||
}
|
||
} else {
|
||
Logutils.e(TAG, "doDownloadAndInstall: " + app_package + "已安装最新版");
|
||
}
|
||
}
|
||
}
|
||
|
||
private int getBatteryLevel() {
|
||
if (Build.VERSION.SDK_INT >= 21) {
|
||
return ((BatteryManager) this.mContext.getSystemService(Context.BATTERY_SERVICE)).getIntProperty(4);
|
||
}
|
||
Intent intent = (new ContextWrapper(this.mContext)).registerReceiver(null, new IntentFilter("android.intent.action.BATTERY_CHANGED"));
|
||
return intent.getIntExtra("level", -1) * 100 / intent.getIntExtra("scale", -1);
|
||
}
|
||
|
||
private void getDeselectBrowerID() {
|
||
HTTPInterface.setBrowserBlackList(mContext);//浏览器网址管控
|
||
}
|
||
|
||
private void getDeselectID() {
|
||
NetInterfaceManager.getInstance().getDeselectIDApi()
|
||
.getDeselectIDApi(NetInterfaceManager.HTTP_KEY,
|
||
Utils.getSerial())
|
||
.subscribeOn(Schedulers.io())
|
||
.observeOn(AndroidSchedulers.mainThread())
|
||
.subscribe(new Observer<ResponseBody>() {
|
||
@Override
|
||
public void onSubscribe(Disposable param1Disposable) {
|
||
Logutils.e("getDeselectID", "onSubscribe: ");
|
||
}
|
||
|
||
@Override
|
||
public void onNext(ResponseBody param1ResponseBody) {
|
||
String ids = "";
|
||
String packages = "";
|
||
try {
|
||
String responString = param1ResponseBody.string();
|
||
Logutils.e("getDeselectID", "onNext: " + responString);
|
||
JSONObject jSONObject = JSON.parseObject(responString);
|
||
int code = jSONObject.getInteger("code");
|
||
if (code == 200) {
|
||
ids = jSONObject.getJSONObject("data").getString("ids");
|
||
packages = jSONObject.getJSONObject("data").getString("package");
|
||
}
|
||
} catch (Exception e) {
|
||
Logutils.e("getDeselectID", "onNext: Exception: " + e.getMessage());
|
||
e.printStackTrace();
|
||
}
|
||
JGYUtils.getInstance().writeDeselectIDtoSystem(ids, packages);
|
||
}
|
||
|
||
@Override
|
||
public void onError(Throwable param1Throwable) {
|
||
Logutils.e("getDeselectID", "onError: " + param1Throwable.getMessage());
|
||
}
|
||
|
||
@Override
|
||
public void onComplete() {
|
||
Logutils.e("getDeselectID", "onComplete: ");
|
||
}
|
||
});
|
||
}
|
||
|
||
|
||
private void setDisableSlideList(String s) {
|
||
JSONObject jSONObject = JSON.parseObject(s);
|
||
Logutils.e("setDisableSlideList", "jSONObject::" + jSONObject.toString());
|
||
String strban = jSONObject.getString("ban");
|
||
String strnot = jSONObject.getString("not");
|
||
String qch_disable_slide = Settings.System.getString(mContext.getApplicationContext().getContentResolver(), "qch_disable_slide");
|
||
Logutils.e("fht", "qch_disable_slide::" + qch_disable_slide);
|
||
|
||
if (!TextUtils.isEmpty(strban)) {
|
||
Settings.System.putString(mContext.getContentResolver(), "qch_disable_slide", strban);
|
||
Logutils.e("fht", "sendban::" + strban);
|
||
} else {
|
||
Settings.System.putString(mContext.getContentResolver(), "qch_disable_slide", "Invalid");
|
||
}
|
||
Logutils.e("fht", "qch_disable_slide::" + Settings.System.getString(mContext.getApplicationContext().getContentResolver(), "qch_disable_slide"));
|
||
}
|
||
|
||
private void setDisableUpdateList(String s) {
|
||
Logutils.e("setDisableUpdateList", s);
|
||
JSONObject jsonObject = JSON.parseObject(s);
|
||
String ban = jsonObject.getString("ban");
|
||
String not = jsonObject.getString("not");
|
||
String[] banList = ban.split(",");
|
||
String[] notList = not.split(",");
|
||
boolean b = Utils.writeDisableUpdateList(mContext, banList, notList);
|
||
HTTPInterface.getAppLimit(mContext);
|
||
}
|
||
|
||
private void settingCamera(String s) {
|
||
if (TextUtils.isEmpty(s)) {
|
||
Intent intent = new Intent("qch_camera_forbid").setPackage("com.android.settings");
|
||
intent.putExtra("camera_package_name", "close");
|
||
this.mContext.sendBroadcast(intent);
|
||
Logutils.e(TAG, "settingNetControl extras is null");
|
||
return;
|
||
}
|
||
JSONObject jSONObject = JSON.parseObject(s);
|
||
String s1 = jSONObject.getString("ban");
|
||
// String str = jSONObject.optString("not");
|
||
Logutils.e("settingCamera", "ban::" + s1);
|
||
// Logutils.e("settingCamera", "not::" + str);
|
||
if ("0".equals(s1)) {
|
||
Intent intent2 = new Intent("qch_camera_forbid").setPackage("com.android.settings");
|
||
// intent2.putExtra("camera_package_name", s1);
|
||
this.mContext.sendBroadcast(intent2);
|
||
} else {
|
||
Intent intent1 = new Intent("qch_camera_open").setPackage("com.android.settings");
|
||
// intent1.putExtra("camera_package_name", str);
|
||
this.mContext.sendBroadcast(intent1);
|
||
}
|
||
}
|
||
|
||
private void settingOneNet(String s) {
|
||
if (TextUtils.isEmpty(s)) {
|
||
Logutils.e(TAG, "settingNetControl extras is null");
|
||
// return;
|
||
}
|
||
JSONObject jSONObject = JSON.parseObject(s);
|
||
Logutils.e("settingOneNet", "jSONObject::" + jSONObject.toString());
|
||
|
||
String packages = jSONObject.getString("package");
|
||
String status = jSONObject.getString("status");
|
||
}
|
||
|
||
private void settingNetControl(String s) {
|
||
if (TextUtils.isEmpty(s)) {
|
||
Logutils.e(TAG, "settingNetControl extras is null");
|
||
}
|
||
JSONObject jSONObject = JSON.parseObject(s);
|
||
Logutils.e("settingNetControl", "jSONObject::" + jSONObject.toString());
|
||
String disallow = jSONObject.getString("ban");
|
||
String allow = jSONObject.getString("not");
|
||
HashSet<String> disallowApp = new HashSet<>(Arrays.asList(disallow.split(",")));
|
||
JGYUtils.setAppNetwork(mContext, disallowApp);
|
||
}
|
||
|
||
private void settingPowerOn(String s) {
|
||
if (TextUtils.isEmpty(s)) {
|
||
Logutils.e(TAG, "settingPowerOn extras is null");
|
||
return;
|
||
}
|
||
JSONObject jSONObject = JSON.parseObject(s);
|
||
String ban = jSONObject.getString("ban");
|
||
String not = jSONObject.getString("not");
|
||
Logutils.e(TAG, "settingPowerOn: qch_app_power_on = " + not);
|
||
if (TextUtils.isEmpty(not)) {
|
||
//当 qch_app_power_on 的值为空时,会造成系统所有应用断网
|
||
Settings.System.putString(mContext.getContentResolver(), "qch_app_power_on", "Invalid");
|
||
} else {
|
||
Settings.System.putString(mContext.getContentResolver(), "qch_app_power_on", not);
|
||
}
|
||
}
|
||
|
||
|
||
private void writeDeselectBrowserIDtoSystem(String s) {
|
||
boolean bool = Settings.System.putString(this.mContext.getContentResolver(), "DeselectBrowserArray", s);
|
||
Logutils.e("SystemSetting", "DeselectBrowserArray---------" + s);
|
||
Logutils.e("SystemSetting", "DeselectBrowserArray---------" + bool);
|
||
}
|
||
|
||
private void setHomepagtag(String s) {
|
||
HTTPInterface.getHomePageBookmarks(mContext, null);
|
||
}
|
||
|
||
private void setAPPinsideWebsite(String s) {
|
||
//禁止app内部网页访问,包名用,隔开
|
||
HTTPInterface.getAppinsideWeb(mContext, new HTTPInterface.GetAppinsideWebCallback() {
|
||
@Override
|
||
public void onComplete() {
|
||
Logutils.e(TAG, "ononComplete: setAPPinsideWebsite");
|
||
}
|
||
});
|
||
}
|
||
|
||
/**
|
||
* 锁定设备
|
||
*
|
||
* @param s
|
||
*/
|
||
public void settingLock(String s) {
|
||
if (TextUtils.isEmpty(s)) {
|
||
Logutils.e(TAG, "settingLock extras is null");
|
||
return;
|
||
}
|
||
JSONObject jSONObject = JSON.parseObject(s);
|
||
|
||
int i = changeNum(jSONObject.getIntValue("lock"));
|
||
Settings.System.putInt(this.mContext.getContentResolver(), JGYActions.ACTION_QCH_UNLOCK_IPAD, i);
|
||
Logutils.e("SystemSetting", "qch_unlock_ipad---------" + i);
|
||
|
||
if (getBatteryLevel() >= CommonDatas.MIN_POWER) {
|
||
Utils.doMasterClear(mContext);
|
||
} else {
|
||
MySQLData.SetBooleanData(mContext, CommonDatas.IS_RESET, true);
|
||
}
|
||
}
|
||
|
||
public void screenshot(String s) {
|
||
JSONObject jSONObject = JSON.parseObject(s);
|
||
long createTime = jSONObject.getLong("createTime");
|
||
if (createTime != 0) {
|
||
Logutils.e("createTime", String.valueOf(createTime));
|
||
doscreenshot(createTime);
|
||
}
|
||
}
|
||
|
||
public void doscreenshot(final long time) {
|
||
Observable.create(new ObservableOnSubscribe<Integer>() {
|
||
@Override
|
||
public void subscribe(ObservableEmitter<Integer> e) throws Exception {
|
||
String filepath = mContext.getExternalFilesDir("db").getAbsolutePath();
|
||
int n = CmdUtil.execute("screencap -p " + filepath + File.separator + time + ".db").code;
|
||
e.onNext(n);
|
||
}
|
||
}).subscribeOn(Schedulers.io())
|
||
.observeOn(AndroidSchedulers.mainThread())
|
||
.subscribe(new Observer<Integer>() {
|
||
@Override
|
||
public void onSubscribe(Disposable d) {
|
||
|
||
}
|
||
|
||
@Override
|
||
public void onNext(Integer integer) {
|
||
if (integer == 0) {
|
||
uplaodImage(time);
|
||
} else {
|
||
Logutils.e("doss", "失败");
|
||
}
|
||
}
|
||
|
||
@Override
|
||
public void onError(Throwable e) {
|
||
Logutils.e("doss", "Throwable=" + e.getMessage());
|
||
}
|
||
|
||
@Override
|
||
public void onComplete() {
|
||
|
||
}
|
||
});
|
||
}
|
||
|
||
private void uplaodImage(long time) {
|
||
String filepath = mContext.getExternalFilesDir("db").getAbsolutePath();
|
||
// String filepath = mContext.getFileStreamPath("screenshot").getAbsolutePath();
|
||
//放在app内部data下面
|
||
File file = new File(filepath + File.separator + time + ".db");
|
||
//不要直接使用常用图片格式
|
||
if (!file.exists()) {
|
||
Logutils.e("uplaodImage", "File does not exists");
|
||
return;
|
||
}
|
||
//设置图片格式
|
||
// RequestBody requestFile = RequestBody.create(MediaType.parse("image/jpg"), file);
|
||
//File转RequestBody
|
||
MediaType mediaType = MediaType.Companion.parse("image/png");
|
||
RequestBody fileBody = RequestBody.Companion.create(file, mediaType);
|
||
//设置一个file文件
|
||
MultipartBody.Part body = MultipartBody.Part.createFormData("file", file.getName(), fileBody);
|
||
NetInterfaceManager.getInstance().getScreenshotApi()
|
||
.sendScreenshot(Utils.getSerial(), time, body)
|
||
.subscribeOn(Schedulers.io())
|
||
.observeOn(AndroidSchedulers.mainThread())
|
||
.subscribe(new Observer<BaseResponse>() {
|
||
@Override
|
||
public void onSubscribe(Disposable d) {
|
||
Log.e("uplaodImage", "onSubscribe: ");
|
||
}
|
||
|
||
@Override
|
||
public void onNext(BaseResponse baseResponse) {
|
||
Log.e("uplaodImage", "onNext: " + baseResponse.msg);
|
||
}
|
||
|
||
@Override
|
||
public void onError(Throwable e) {
|
||
Log.e("uplaodImage", "onError: " + e.getMessage());
|
||
}
|
||
|
||
@Override
|
||
public void onComplete() {
|
||
Log.e("uplaodImage", "onComplete: ");
|
||
}
|
||
});
|
||
}
|
||
|
||
private void getTimeControl(Context context, String extras) {
|
||
HTTPInterface.getSnTimeControl(context);
|
||
}
|
||
|
||
private void getTopApp(Context context, String extras) {
|
||
JSONObject jsonObject = JSON.parseObject(extras);
|
||
String packageName = jsonObject.getString("app_package");
|
||
if (TextUtils.isEmpty(packageName)) {
|
||
SPUtils.put(context, ForegroundAppUtil.TOPAPP_KEY, "");
|
||
ForegroundAppUtil.setTopAppClass(context, "");
|
||
} else {
|
||
SPUtils.put(context, ForegroundAppUtil.TOPAPP_KEY, packageName);
|
||
ForegroundAppUtil.setTopAppClass(context, packageName);
|
||
ForegroundAppUtil.openTopApp(context);
|
||
}
|
||
}
|
||
|
||
private void setBootanimation(Context context, String extras) {
|
||
JSONObject jsonObject = JSONObject.parseObject(extras);
|
||
int type = jsonObject.getInteger("type");
|
||
if (type == 1) {
|
||
String file_url = jsonObject.getString("file_url");
|
||
String file_md5 = jsonObject.getString("file_md5");
|
||
JGYUtils.getInstance().checkBootFile(file_url, file_md5);
|
||
} else {
|
||
JGYUtils.getInstance().removeBootanimation();
|
||
}
|
||
}
|
||
|
||
private void setDefalutApp(Context context, String extras) {
|
||
if (TextUtils.isEmpty(extras)) {
|
||
JGYUtils.getInstance().setDefaultDesktop("");
|
||
} else {
|
||
JSONObject jsonObject = JSON.parseObject(extras);
|
||
String default_launcher = jsonObject.getString("default_launcher");
|
||
if (TextUtils.isEmpty(default_launcher)) {
|
||
JGYUtils.getInstance().setDefaultDesktop("");
|
||
SPUtils.put(context, "default_launcher", "");
|
||
|
||
} else {
|
||
JGYUtils.getInstance().setDefaultDesktop(default_launcher);
|
||
SPUtils.put(context, "default_launcher", default_launcher);
|
||
}
|
||
}
|
||
}
|
||
|
||
private void playSound(Context context, String extras) {
|
||
JSONObject jsonObject = JSONObject.parseObject(extras);
|
||
defaultCallMediaPlayer(context);
|
||
}
|
||
|
||
/**
|
||
* 播放系统默认来电铃声
|
||
*
|
||
* @return MediaPlayer对象
|
||
* @throws Exception
|
||
*/
|
||
MediaPlayer mediaPlayer;
|
||
|
||
public void defaultCallMediaPlayer(Context context) {
|
||
if (mediaPlayer != null) {
|
||
mediaPlayer.stop();
|
||
mediaPlayer.release();
|
||
}
|
||
mediaPlayer = MediaPlayer.create(context, R.raw.test);
|
||
try {
|
||
// mediaPlayer.prepare();
|
||
mediaPlayer.setLooping(false);
|
||
int duration = mediaPlayer.getDuration() / 1000;
|
||
Logutils.e(TAG, "defaultCallMediaPlayer: " + "duration: " + duration);
|
||
int loop = 0;
|
||
if (duration <= 1) {
|
||
loop = 30;
|
||
} else {
|
||
loop = (30 / duration);
|
||
}
|
||
final int[] soundCount = {0};
|
||
int finalLoop = loop;
|
||
mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
|
||
@Override
|
||
public void onCompletion(MediaPlayer mediaPlayer) {
|
||
if (soundCount[0] <= finalLoop) {
|
||
setMaxVolume(context);
|
||
mediaPlayer.start();
|
||
soundCount[0] += 1;
|
||
Logutils.e(TAG, "onCompletion: " + "loop: " + finalLoop);
|
||
Logutils.e(TAG, "onCompletion: " + "soundCount: " + soundCount[0]);
|
||
} else {
|
||
mediaPlayer.stop();
|
||
mediaPlayer.release();
|
||
Logutils.e(TAG, "onCompletion: " + "loop: " + finalLoop);
|
||
Logutils.e(TAG, "onCompletion: " + "soundCount: " + soundCount[0]);
|
||
}
|
||
}
|
||
});
|
||
mediaPlayer.setLooping(false);
|
||
setMaxVolume(context);
|
||
mediaPlayer.start();
|
||
} catch (Exception e) {
|
||
e.printStackTrace();
|
||
Logutils.e(TAG, "defaultCallMediaPlayer: " + e.getMessage());
|
||
}
|
||
|
||
}
|
||
|
||
private void setMaxVolume(Context context) {
|
||
AudioManager audioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
|
||
int ringMax = audioManager.getStreamMaxVolume(AudioManager.STREAM_RING);
|
||
int musicMax = audioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
|
||
int voiceMax = audioManager.getStreamMaxVolume(AudioManager.STREAM_VOICE_CALL);
|
||
audioManager.setStreamVolume(AudioManager.STREAM_RING, ringMax, 0);
|
||
audioManager.setStreamVolume(AudioManager.STREAM_VOICE_CALL, voiceMax, 0);
|
||
audioManager.setStreamVolume(AudioManager.STREAM_MUSIC, musicMax, 0); //音乐音量
|
||
audioManager.setMode(AudioManager.MODE_IN_COMMUNICATION);
|
||
audioManager.setSpeakerphoneOn(true);
|
||
}
|
||
|
||
|
||
private void cleanCache(Context context, String extras) {
|
||
JSONObject jsonObject = JSONObject.parseObject(extras);
|
||
String packageName = jsonObject.getString("app_package");
|
||
if (TextUtils.isEmpty(packageName)) {
|
||
Logutils.e(TAG, "cleanCache: " + "package is empty");
|
||
} else {
|
||
try {
|
||
if (new CacheUtils().cleanApplicationUserData(context, packageName)) {
|
||
Logutils.e(TAG, "cleanCache: " + packageName + " success");
|
||
} else {
|
||
Logutils.e(TAG, "cleanCache: " + packageName + " failed");
|
||
}
|
||
} catch (Exception e) {
|
||
e.printStackTrace();
|
||
Logutils.e(TAG, "cleanCache: " + e.getMessage());
|
||
}
|
||
}
|
||
}
|
||
|
||
private void setDeveloperoptions(String extras) {
|
||
JSONObject jsonObject = JSONObject.parseObject(extras);
|
||
int is_developer = jsonObject.getInteger("is_developer");
|
||
Logutils.e(TAG + ":" + "getDeveloper", "onNext: " + is_developer);
|
||
Logutils.e(TAG, "setDeveloperoptions: " + is_developer);
|
||
JGYUtils.getInstance().setDeveloperOptions(is_developer == 0 ? 1 : 0);
|
||
}
|
||
|
||
private void GlobalUpdate(String jsonString) {
|
||
if (TextUtils.isEmpty(jsonString)) {
|
||
throw new RuntimeException();
|
||
}
|
||
JSONObject jsonObject = JSON.parseObject(jsonString);
|
||
String platform = jsonObject.getString("platform");
|
||
if (JGYUtils.getInstance().isSamePlatform(platform)) {
|
||
checkAPPInstall(jsonObject);
|
||
} else {
|
||
Logutils.e(TAG, "GlobalUpdate: " + "应用与app平台不符合");
|
||
}
|
||
}
|
||
|
||
@SuppressLint("NewApi")
|
||
private void checkAPPInstall(JSONObject jsonObject) {
|
||
long version_code = jsonObject.getLong("app_version_code");
|
||
PackageManager pm = mContext.getPackageManager();
|
||
PackageInfo packageInfo = null;
|
||
try {
|
||
packageInfo = pm.getPackageInfo(jsonObject.getString("app_package"), 0);
|
||
} catch (PackageManager.NameNotFoundException e) {
|
||
e.printStackTrace();
|
||
}
|
||
if (packageInfo == null || packageInfo.getLongVersionCode() < version_code) {
|
||
Utils.ariaDownload(mContext, jsonObject.getString("app_url"), jsonObject);
|
||
} else {
|
||
Logutils.e(TAG, "checkAPPInstall: " + "已经是最新版");
|
||
}
|
||
}
|
||
|
||
private void setEbagCode(String jsonString) {
|
||
JSONObject jsonObject = JSON.parseObject(jsonString);
|
||
String ebagCode = jsonObject.getString("ebagCode");
|
||
if (TextUtils.isEmpty(ebagCode)) {
|
||
Logutils.e(TAG, "setEbagCode: " + "ebagCode is empty");
|
||
} else {
|
||
SPUtils.put(mContext, "ebagCode", ebagCode);
|
||
}
|
||
}
|
||
}
|