package com.aoleyun.sn.tpush; import android.annotation.SuppressLint; import android.content.ContentResolver; 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.Handler; import android.provider.Settings; import android.text.TextUtils; import android.util.Log; import android.widget.Toast; 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.R; import com.aoleyun.sn.base.BaseApplication; import com.aoleyun.sn.bean.BaseResponse; import com.aoleyun.sn.bean.RemoteDebug; import com.aoleyun.sn.bean.SnRunLog; import com.aoleyun.sn.comm.CommonConfig; import com.aoleyun.sn.comm.JGYActions; import com.aoleyun.sn.manager.AmapManager; import com.aoleyun.sn.network.HTTPInterface; import com.aoleyun.sn.network.NetInterfaceManager; import com.aoleyun.sn.rlog.LogDBManager; import com.aoleyun.sn.service.main.MainService; import com.aoleyun.sn.tpush.common.NotificationService; import com.aoleyun.sn.tpush.po.XGNotification; import com.aoleyun.sn.utils.ApkUtils; import com.aoleyun.sn.utils.CacheUtils; import com.aoleyun.sn.utils.CmdUtil; import com.aoleyun.sn.utils.ForegroundAppUtil; import com.aoleyun.sn.utils.JGYUtils; 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 com.arialyy.aria.core.Aria; import com.google.gson.Gson; import com.google.gson.JsonObject; import com.google.gson.JsonParser; import com.google.gson.reflect.TypeToken; import com.tencent.android.tpush.NotificationAction; import com.tencent.android.tpush.XGPushBaseReceiver; import com.tencent.android.tpush.XGPushClickedResult; import com.tencent.android.tpush.XGPushRegisterResult; import com.tencent.android.tpush.XGPushShowedResult; import com.tencent.android.tpush.XGPushTextMessage; import java.io.File; import java.lang.reflect.Type; import java.text.SimpleDateFormat; import java.util.Arrays; import java.util.Calendar; import java.util.HashMap; import java.util.HashSet; import java.util.Map; 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 MessageReceiver extends XGPushBaseReceiver { public static final String UPDATE_LISTVIEW_ACTION = "com.qq.xgdemo.activity.UPDATE_LISTVIEW"; public static final String TEST_ACTION = "com.qq.xgdemo.activity.TEST_ACTION"; public static final String LogTag = "xg.test"; private static final String TAG = MessageReceiver.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"; /*添加wifi*/ private final String UPDATE_WIFI_PW = "38"; /*远程关机*/ private final String DEVICES_POWEROFF = "41"; /*远程log*/ private final String SN_RUN_LOG = "43"; /*自定义指令*/ private final String CUSTOM_ORDER = "44"; /*优化内存*/ private final String CLEAN_MEMORY = "47"; /*运行日志设置*/ private final String SN_LOG_SETTING = "48"; private Context mContext; private ContentResolver mResolver; private PackageManager mPackageManager; /** * 消息透传处理 * * @param context * @param message 解析自定义的 JSON */ @Override public void onTextMessage(Context context, XGPushTextMessage message) { this.mContext = context; this.mResolver = context.getContentResolver(); this.mPackageManager = context.getPackageManager(); String text = "收到消息:" + message.toString(); // 获取自定义key-value String customContent = message.getCustomContent(); if (customContent != null && customContent.length() != 0) { JsonObject obj = JsonParser.parseString(customContent).getAsJsonObject(); // key1为前台配置的key if (!TextUtils.isEmpty(obj.get("key").getAsString())) { String value = obj.get("key").getAsString(); Log.d(LogTag, "get custom value:" + value); } // ... } // APP自主处理消息的过程... Log.e(LogTag, text); show(context, text); processCustomMessage(context, message); } /** * 通知展示 * * @param context * @param notifiShowedRlt 包含通知的内容 */ @Override public void onNotificationShowedResult(Context context, XGPushShowedResult notifiShowedRlt) { if (context == null || notifiShowedRlt == null) { return; } XGNotification notific = new XGNotification(); notific.setMsg_id(notifiShowedRlt.getMsgId()); notific.setTitle(notifiShowedRlt.getTitle()); notific.setContent(notifiShowedRlt.getContent()); // notificationActionType==1为Activity,2为url,3为intent notific.setNotificationActionType(notifiShowedRlt .getNotificationActionType()); // Activity,url,intent都可以通过getActivity()获得 notific.setActivity(notifiShowedRlt.getActivity()); notific.setUpdate_time(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss") .format(Calendar.getInstance().getTime())); NotificationService.getInstance(context).save(notific); Intent testIntent = new Intent(TEST_ACTION); if (notifiShowedRlt.getTitle().equals(Constants.LOCAL_NOTIFICATION_TITLE)) { testIntent.putExtra("step", Constants.TEST_LOCAL_NOTIFICATION); } else { testIntent.putExtra("step", Constants.TEST_NOTIFICATION); } context.sendBroadcast(testIntent); Intent viewIntent = new Intent(UPDATE_LISTVIEW_ACTION); context.sendBroadcast(viewIntent); show(context, "您有1条新消息, " + "通知被展示 , " + notifiShowedRlt.toString()); Log.d(LogTag, "您有1条新消息, " + "通知被展示 , " + notifiShowedRlt.toString() + ", PushChannel:" + notifiShowedRlt.getPushChannel()); } /** * 注册回调 * * @param context * @param errorCode 0 为成功,其它为错误码 */ @Override public void onRegisterResult(Context context, int errorCode, XGPushRegisterResult message) { if (context == null || message == null) { return; } String text = ""; if (errorCode == XGPushBaseReceiver.SUCCESS) { // 在这里拿token String token = message.getToken(); text = "注册成功1. token:" + token; } else { text = message + "注册失败,错误码:" + errorCode; } Log.d(LogTag, text); show(context, text); } /** * 反注册回调 * * @param context * @param errorCode 0 为成功,其它为错误码 */ @Override public void onUnregisterResult(Context context, int errorCode) { if (context == null) { return; } String text = ""; if (errorCode == XGPushBaseReceiver.SUCCESS) { text = "反注册成功"; } else { text = "反注册失败" + errorCode; } Log.d(LogTag, text); show(context, text); } /** * 设置标签回调 * * @param context * @param errorCode 0 为成功,其它为错误码 * @param tagName 设置的 TAG */ @Override public void onSetTagResult(Context context, int errorCode, String tagName) { if (context == null) { return; } String text = ""; if (errorCode == XGPushBaseReceiver.SUCCESS) { text = "\"" + tagName + "\"设置成功"; } else { text = "\"" + tagName + "\"设置失败,错误码:" + errorCode; } Log.d(LogTag, text); show(context, text); Intent testIntent = new Intent(TEST_ACTION); testIntent.putExtra("step", Constants.TEST_SET_TAG); context.sendBroadcast(testIntent); } /** * 删除标签的回调 * * @param context * @param errorCode 0 为成功,其它为错误码 * @param tagName 设置的 TAG */ @Override public void onDeleteTagResult(Context context, int errorCode, String tagName) { if (context == null) { return; } String text = ""; if (errorCode == XGPushBaseReceiver.SUCCESS) { text = "\"" + tagName + "\"删除成功"; } else { text = "\"" + tagName + "\"删除失败,错误码:" + errorCode; } Log.d(LogTag, text); show(context, text); Intent testIntent = new Intent(TEST_ACTION); testIntent.putExtra("step", Constants.TEST_DEL_TAG); context.sendBroadcast(testIntent); } /** * 设置账号回调 * * @param context * @param errorCode 0 为成功,其它为错误码 * @param account 设置的账号 */ @Override public void onSetAccountResult(Context context, int errorCode, String account) { Intent testIntent = new Intent(TEST_ACTION); testIntent.putExtra("step", Constants.TEST_SET_ACCOUNT); context.sendBroadcast(testIntent); } /** * 删除账号回调 * * @param context * @param errorCode 0 为成功,其它为错误码 * @param account 设置的账号 */ @Override public void onDeleteAccountResult(Context context, int errorCode, String account) { Intent testIntent = new Intent(TEST_ACTION); testIntent.putExtra("step", Constants.TEST_DEL_ACCOUNT); context.sendBroadcast(testIntent); } @Override public void onSetAttributeResult(Context context, int i, String s) { } @Override public void onDeleteAttributeResult(Context context, int i, String s) { } @Override public void onQueryTagsResult(Context context, int errorCode, String data, String operateName) { Log.i(LogTag, "action - onQueryTagsResult, errorCode:" + errorCode + ", operateName:" + operateName + ", data: " + data); } /** * 通知点击回调 actionType=1为该消息被清除,actionType=0为该消息被点击 * * @param context * @param message 包含被点击通知的内容 */ @Override public void onNotificationClickedResult(Context context, XGPushClickedResult message) { if (context == null || message == null) { return; } String text = ""; if (message.getActionType() == NotificationAction.clicked.getType()) { // 通知在通知栏被点击啦。。。。。 // APP自己处理点击的相关动作 // 这个动作可以在activity的onResume也能监听,请看第3点相关内容 text = "通知被打开 :" + message; } else if (message.getActionType() == NotificationAction.delete.getType()) { // 通知被清除啦。。。。 // APP自己处理通知被清除后的相关动作 text = "通知被清除 :" + message; } Toast.makeText(context, "广播接收到通知被点击:" + message.toString(), Toast.LENGTH_SHORT).show(); // 获取自定义key-value String customContent = message.getCustomContent(); if (customContent != null && customContent.length() != 0) { JsonObject obj = JsonParser.parseString(customContent).getAsJsonObject(); // key1为前台配置的key if (!TextUtils.isEmpty(obj.get("key").getAsString())) { String value = obj.get("key").getAsString(); Log.d(LogTag, "get custom value:" + value); } // ... } // APP自主处理的过程。。。 Log.d(LogTag, text); show(context, text); } private void show(Context context, String text) { Toast.makeText(context, text, Toast.LENGTH_SHORT).show(); } private int changeNum(int paramInt) { return paramInt == 0 ? 1 : 0; } private void processCustomMessage(Context context, XGPushTextMessage message) { if (context == null || message == null) { return; } String title = message.getTitle(); String content = message.getContent(); JsonObject extrasJson = JsonParser.parseString(content).getAsJsonObject(); String extras = ""; if (extrasJson.get("extras") != null) { extras = extrasJson.get("extras").toString(); } switch (title) { 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(mContext); 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(mContext); 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 usedTimeJson = JSON.parseObject(extras); String random = usedTimeJson.getString("random"); String sendType = usedTimeJson.getString("type"); BaseApplication.sendAppUsedTime(random, sendType); break; case GET_FORCEDOWNLOADURL: ToastUtil.betaShow("收到管控:应用强制安装"); File file = new File(JGYUtils.getInstance().getDownLoadPath()); if (!file.exists()) { file.mkdirs(); } if (TextUtils.isEmpty(extras)) { Log.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); 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(); Log.e(TAG, "setHomepagtag: " + e.getMessage()); } setHomepagtag(); 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(() -> { //后台发送时数据库未改变,有时候可能获取到的数据时上一次的 Log.e(TAG, "run: HIDE_DESKTOP_ICON "); HTTPInterface.setHideDesktopIcon(mContext); }, 2000); break; case DISABLE_APP_SLIDE: ToastUtil.betaShow("收到管控:应用滑动设置"); setDisableSlideList(extras); break; case UPDATE_INFO: ToastUtil.betaShow("收到管控:更新白名单"); HTTPInterface.getAppLimit(mContext); 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(); MainService.mPresenter.sendMACAddress(); Log.e(TAG, "mPresenter: " + "getLockedState"); } else { Log.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) { Log.e(TAG, "onLocationChanged: " + "定位成功"); Log.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())); } Log.e(TAG, (String) SPUtils.get(mContext, "AmapAddress", "-")); Log.e(TAG, (String) SPUtils.get(mContext, "AmapError", "-")); Log.e(TAG, "amap: " + sb.toString()); NetInterfaceManager.getInstance().updateDeviceInfo(new NetInterfaceManager.ObserverCallback() { @Override public void onSubscribe(Disposable d) { } @Override public void onNext(BaseResponse response) { } @Override public void onError(Throwable e) { } @Override public void onComplete() { } }); } }); break; case LOCK_SCREEN: ToastUtil.betaShow("收到管控:屏幕锁定"); JSONObject lockJSONObject = JSON.parseObject(extras); String name = lockJSONObject.getString("name"); setLock_screen(1, name); break; case UNLOCK_SCREEN: ToastUtil.betaShow("收到管控:屏幕解锁"); setLock_screen(0, ""); break; case KILL_SERVER: ToastUtil.betaShow("收到管控:停止应用"); JSONObject killJSONObject = JSON.parseObject(extras); String packages = killJSONObject.getString("package_name"); JGYUtils.getInstance().killBackgroundProcesses(packages); break; case TIME_CONTROL: ToastUtil.betaShow("收到管控:使用时间管控"); getTimeControl(extras); break; case TOP_APP: ToastUtil.betaShow("收到管控:应用霸屏"); getTopApp(extras); break; case LOGO_IMG: ToastUtil.betaShow("收到管控:开机动画设置"); setBootanimation(extras); Log.e(TAG, "processCustomMessage: " + extras); break; case DEFAULTP_APP: ToastUtil.betaShow("收到管控:"); setDefalutApp(extras); break; case PLAY_SOUND: ToastUtil.betaShow("收到管控:查找设备"); playSound(extras); break; case CLEAN_APP_CACHE: ToastUtil.betaShow("收到管控:应用缓存清除"); cleanCache(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("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(); Log.e(TAG, "setHomepagtag: " + e.getMessage()); } if (MainService.mPresenter != null) { MainService.mPresenter.getLockedState(); Log.e("getLockedState", "mPresenter: " + "getLockedState"); } else { Log.e("getLockedState", "mPresenter is NULL"); } break; case UPDATE_WIFI_PW: HTTPInterface.getWiFiPasswd(mContext); break; case DEVICES_POWEROFF: HTTPInterface.getPoweroffTime(); break; case SN_RUN_LOG: recordLog(extras); break; case CUSTOM_ORDER: customOrder(extras); break; case CLEAN_MEMORY: JGYUtils.getInstance().cleanBackgroundMemory(); break; case SN_LOG_SETTING: senSNLogFile(extras); break; } } private void setLock_screen(int state, String name) { if (ServiceAliveUtils.isServiceAlive(mContext)) { mContext.startService(new Intent(mContext, 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); } mContext.sendBroadcast(intent); } private void doDownloadAndInstall(String jsonString) { File file = new File(JGYUtils.getInstance().getDownLoadPath()); if (!file.exists()) { file.mkdirs(); } if (TextUtils.isEmpty(jsonString)) { Log.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); Log.e(TAG, "doDownloadAndInstall: app_package:" + app_package); Log.e(TAG, "doDownloadAndInstall: app_url:" + app_url); SaveListUtils.addList(app_package); SaveListUtils.sendForceAPP(mContext); PackageInfo packageInfo = null; try { packageInfo = mPackageManager.getPackageInfo(app_package, 0); } catch (PackageManager.NameNotFoundException e) { e.printStackTrace(); } if (packageInfo == null) { Log.e(TAG, "doDownloadAndInstall: " + app_package + "未安装"); if (!SaveListUtils.isDownLoading(app_url)) { Log.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 { Log.e(TAG, "doDownloadAndInstall: " + app_package + "已安装最新版"); } } } private int getBatteryLevel() { if (Build.VERSION.SDK_INT >= 21) { return ((BatteryManager) mContext.getSystemService(Context.BATTERY_SERVICE)).getIntProperty(4); } Intent intent = (new ContextWrapper(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() { @Override public void onSubscribe(Disposable param1Disposable) { Log.e("getDeselectID", "onSubscribe: "); } @Override public void onNext(ResponseBody param1ResponseBody) { String ids = ""; String packages = ""; try { String responString = param1ResponseBody.string(); Log.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) { Log.e("getDeselectID", "onNext: Exception: " + e.getMessage()); e.printStackTrace(); } JGYUtils.getInstance().writeDeselectIDtoSystem(ids, packages); } @Override public void onError(Throwable param1Throwable) { Log.e("getDeselectID", "onError: " + param1Throwable.getMessage()); } @Override public void onComplete() { Log.e("getDeselectID", "onComplete: "); } }); } private void setDisableSlideList(String jsonString) { JSONObject jSONObject = JSON.parseObject(jsonString); Log.e("setDisableSlideList", "jSONObject::" + jSONObject.toString()); String strban = jSONObject.getString("ban"); String strnot = jSONObject.getString("not"); String qch_disable_slide = Settings.System.getString(mResolver, "qch_disable_slide"); Log.e("fht", "qch_disable_slide::" + qch_disable_slide); if (!TextUtils.isEmpty(strban)) { Settings.System.putString(mResolver, "qch_disable_slide", strban); Log.e("fht", "sendban::" + strban); } else { Settings.System.putString(mResolver, "qch_disable_slide", "Invalid"); } Log.e("fht", "qch_disable_slide::" + Settings.System.getString(mResolver, "qch_disable_slide")); } private void setDisableUpdateList(String jsonString) { Log.e("setDisableUpdateList", jsonString); JSONObject jsonObject = JSON.parseObject(jsonString); 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"); mContext.sendBroadcast(intent); Log.e(TAG, "settingNetControl extras is null"); return; } JSONObject jSONObject = JSON.parseObject(s); String s1 = jSONObject.getString("ban"); // String str = jSONObject.optString("not"); Log.e("settingCamera", "ban::" + s1); // Log.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); mContext.sendBroadcast(intent2); } else { Intent intent1 = new Intent("qch_camera_open").setPackage("com.android.settings"); // intent1.putExtra("camera_package_name", str); mContext.sendBroadcast(intent1); } } private void settingOneNet(String s) { if (TextUtils.isEmpty(s)) { Log.e(TAG, "settingNetControl extras is null"); // return; } JSONObject jSONObject = JSON.parseObject(s); Log.e("settingOneNet", "jSONObject::" + jSONObject.toString()); String packages = jSONObject.getString("package"); String status = jSONObject.getString("status"); } private void settingNetControl(String s) { if (TextUtils.isEmpty(s)) { Log.e(TAG, "settingNetControl extras is null"); } JSONObject jSONObject = JSON.parseObject(s); Log.e("settingNetControl", "jSONObject::" + jSONObject.toString()); String disallow = jSONObject.getString("ban"); String allow = jSONObject.getString("not"); HashSet disallowApp = new HashSet<>(Arrays.asList(disallow.split(","))); JGYUtils.setAppNetwork(mContext, disallowApp); } private void settingPowerOn(String s) { if (TextUtils.isEmpty(s)) { Log.e(TAG, "settingPowerOn extras is null"); return; } JSONObject jSONObject = JSON.parseObject(s); String ban = jSONObject.getString("ban"); String not = jSONObject.getString("not"); Log.e(TAG, "settingPowerOn: qch_app_power_on = " + not); if (TextUtils.isEmpty(not)) { //当 qch_app_power_on 的值为空时,会造成系统所有应用断网 Settings.System.putString(mResolver, "qch_app_power_on", "Invalid"); } else { Settings.System.putString(mResolver, "qch_app_power_on", not); } } private void writeDeselectBrowserIDtoSystem(String s) { boolean bool = Settings.System.putString(mResolver, "DeselectBrowserArray", s); Log.e("SystemSetting", "DeselectBrowserArray---------" + s); Log.e("SystemSetting", "DeselectBrowserArray---------" + bool); } private void setHomepagtag() { HTTPInterface.getHomePageBookmarks(mContext, null); } private void setAPPinsideWebsite(String s) { //禁止app内部网页访问,包名用,隔开 HTTPInterface.getAppinsideWeb(mContext, new HTTPInterface.GetAppinsideWebCallback() { @Override public void onComplete() { Log.e(TAG, "ononComplete: setAPPinsideWebsite"); } }); } /** * 锁定设备 * * @param s */ public void settingLock(String s) { if (TextUtils.isEmpty(s)) { Log.e(TAG, "settingLock extras is null"); return; } JSONObject jSONObject = JSON.parseObject(s); int i = changeNum(jSONObject.getIntValue("lock")); Settings.System.putInt(mResolver, JGYActions.ACTION_QCH_UNLOCK_IPAD, i); Log.e("SystemSetting", "qch_unlock_ipad---------" + i); if (getBatteryLevel() >= CommonConfig.MIN_POWER) { Utils.doMasterClear(mContext); } else { MySQLData.SetBooleanData(mContext, CommonConfig.IS_RESET, true); } } public void screenshot(String s) { JSONObject jSONObject = JSON.parseObject(s); long createTime = jSONObject.getLong("createTime"); if (createTime != 0) { Log.e("createTime", String.valueOf(createTime)); doscreenshot(createTime); } } public void doscreenshot(final long time) { Observable.create(new ObservableOnSubscribe() { @Override public void subscribe(ObservableEmitter 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() { @Override public void onSubscribe(Disposable d) { } @Override public void onNext(Integer integer) { if (integer == 0) { uplaodImage(time); } else { Log.e("doss", "失败"); } } @Override public void onError(Throwable e) { Log.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()) { Log.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); Map params = new HashMap<>(); params.put("sn", Utils.getSerial()); params.put("createtime", String.valueOf(time)); NetInterfaceManager.getInstance().getScreenshotApi() .sendScreenshot(params, body) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Observer() { @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(String extras) { HTTPInterface.getSnTimeControl(mContext); } private void getTopApp(String extras) { JSONObject jsonObject = JSON.parseObject(extras); String packageName = jsonObject.getString("app_package"); if (TextUtils.isEmpty(packageName)) { SPUtils.put(mContext, ForegroundAppUtil.TOPAPP_KEY, ""); ForegroundAppUtil.setTopAppClass(mContext, ""); } else { SPUtils.put(mContext, ForegroundAppUtil.TOPAPP_KEY, packageName); ForegroundAppUtil.setTopAppClass(mContext, packageName); ForegroundAppUtil.openTopApp(mContext); } } private void setBootanimation(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(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(mContext, "default_launcher", ""); } else { JGYUtils.getInstance().setDefaultDesktop(default_launcher); SPUtils.put(mContext, "default_launcher", default_launcher); } } } private void playSound(String extras) { JSONObject jsonObject = JSONObject.parseObject(extras); defaultCallMediaPlayer(mContext); } /** * 播放系统默认来电铃声 * * @return MediaPlayer对象 * @throws Exception */ MediaPlayer mediaPlayer; public void defaultCallMediaPlayer(Context mContext) { if (mediaPlayer != null) { mediaPlayer.stop(); mediaPlayer.release(); } mediaPlayer = MediaPlayer.create(mContext, R.raw.test); try { // mediaPlayer.prepare(); mediaPlayer.setLooping(false); int duration = mediaPlayer.getDuration() / 1000; Log.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(mContext); mediaPlayer.start(); soundCount[0] += 1; Log.e(TAG, "onCompletion: " + "loop: " + finalLoop); Log.e(TAG, "onCompletion: " + "soundCount: " + soundCount[0]); } else { mediaPlayer.stop(); mediaPlayer.release(); Log.e(TAG, "onCompletion: " + "loop: " + finalLoop); Log.e(TAG, "onCompletion: " + "soundCount: " + soundCount[0]); } } }); mediaPlayer.setLooping(false); setMaxVolume(mContext); mediaPlayer.start(); } catch (Exception e) { e.printStackTrace(); Log.e(TAG, "defaultCallMediaPlayer: " + e.getMessage()); } } private void setMaxVolume(Context mContext) { AudioManager audioManager = (AudioManager) mContext.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(String extras) { JSONObject jsonObject = JSONObject.parseObject(extras); String packageName = jsonObject.getString("app_package"); if (TextUtils.isEmpty(packageName)) { Log.e(TAG, "cleanCache: " + "package is empty"); } else { try { if (new CacheUtils().cleanApplicationUserData(mContext, packageName)) { Log.e(TAG, "cleanCache: " + packageName + " success"); } else { Log.e(TAG, "cleanCache: " + packageName + " failed"); } } catch (Exception e) { e.printStackTrace(); Log.e(TAG, "cleanCache: " + e.getMessage()); } } } private void setDeveloperoptions(String extras) { JSONObject jsonObject = JSONObject.parseObject(extras); int is_developer = jsonObject.getInteger("is_developer"); Log.e(TAG + ":" + "getDeveloper", "onNext: " + is_developer); Log.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 { Log.e(TAG, "GlobalUpdate: " + "应用与app平台不符合"); } } @SuppressLint("NewApi") private void checkAPPInstall(JSONObject jsonObject) { long version_code = jsonObject.getLong("app_version_code"); PackageInfo packageInfo = null; try { packageInfo = mPackageManager.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 { Log.e(TAG, "checkAPPInstall: " + "已经是最新版"); } } private void setEbagCode(String jsonString) { JSONObject jsonObject = JSON.parseObject(jsonString); String ebagCode = jsonObject.getString("ebagCode"); if (TextUtils.isEmpty(ebagCode)) { Log.e(TAG, "setEbagCode: " + "ebagCode is empty"); } else { SPUtils.put(mContext, "ebagCode", ebagCode); } } private void recordLog(String jsonString) { HTTPInterface.getRunLog(mContext); } private static final int ACTION_PULL = 1; private static final int ACTION_DELETE = 2; private static final int ACTION_UPGRADE = 3; private void customOrder(String jsonString) { Gson gson = new Gson(); Type type = new TypeToken() { }.getType(); RemoteDebug remoteDebug = gson.fromJson(jsonString, type); if (remoteDebug != null) { String pkg = remoteDebug.getApp_package(); String content = remoteDebug.getContent(); switch (remoteDebug.getType()) { case ACTION_PULL: Log.e(TAG, "customOrder: 唤起"); ApkUtils.openPackage(mContext, pkg); break; case ACTION_DELETE: Log.e(TAG, "customOrder: 删除"); ApkUtils.UninstallAPP(mContext, pkg); break; case ACTION_UPGRADE: Log.e(TAG, "customOrder: 更新"); HTTPInterface.getForceDownload(mContext); break; default: break; } } } /** * @param jsonString * "is_log": 1,//是否开启运行日志 0关闭 1开启 * "is_log_type": 1 //获取运行日志类型 0即时 1定时 */ private void senSNLogFile(String jsonString) { JSONObject jsonObject = JSON.parseObject(jsonString); int is_log = jsonObject.getInteger("is_log"); int is_log_type = jsonObject.getInteger("is_log_type"); if (is_log == 0) { return; } if (is_log_type == 0) { NetInterfaceManager.getInstance().uploadLogFile(); } else { SPUtils.put(mContext, CommonConfig.UPLOAD_LOG_TYPE, 1); } } }