Files
CubeAoleyunSN/app/src/main/java/com/aoleyun/sn/utils/JgyUtils.java
tongtongstudio 2029f7020f version:1.6.0317
bugfixes:修复网络黑白名单报错
add:增加设置菜单管控,增加中性桌面包名
2026-03-18 11:55:44 +08:00

3920 lines
162 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package com.aoleyun.sn.utils;
import android.annotation.SuppressLint;
import android.app.ActivityManager;
import android.app.ActivityManagerNative;
import android.app.ActivityTaskManager;
import android.app.WallpaperManager;
import android.app.role.RoleManager;
import android.content.ComponentName;
import android.content.ContentResolver;
import android.content.Context;
import android.content.ContextWrapper;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.ServiceConnection;
import android.content.pm.ActivityInfo;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.content.pm.UserInfo;
import android.graphics.Bitmap;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.net.Uri;
import android.os.BatteryManager;
import android.os.Build;
import android.os.Debug;
import android.os.Environment;
import android.os.IBinder;
import android.os.PowerManager;
import android.os.Process;
import android.os.RemoteException;
import android.os.SystemProperties;
import android.os.UserHandle;
import android.provider.Settings;
import android.text.TextUtils;
import android.util.Log;
import android.view.inputmethod.InputMethodInfo;
import android.view.inputmethod.InputMethodManager;
import androidx.annotation.Nullable;
import androidx.annotation.RequiresApi;
import androidx.core.content.ContextCompat;
import com.alibaba.sdk.android.push.noonesdk.PushServiceFactory;
import com.aoleyun.sn.BuildConfig;
import com.aoleyun.sn.bean.AdminAppInfo;
import com.aoleyun.sn.bean.AppID;
import com.aoleyun.sn.bean.AppListInfo;
import com.aoleyun.sn.bean.Appground;
import com.aoleyun.sn.bean.BaseResponse;
import com.aoleyun.sn.bean.ForceDownloadData;
import com.aoleyun.sn.bean.LessonJson;
import com.aoleyun.sn.bean.NetAndLaunchBean;
import com.aoleyun.sn.bean.NetAndLaunchData;
import com.aoleyun.sn.bean.TTAppground;
import com.aoleyun.sn.comm.CommonConfig;
import com.aoleyun.sn.comm.JGYActions;
import com.aoleyun.sn.comm.PackageNames;
import com.aoleyun.sn.disklrucache.CacheHelper;
import com.aoleyun.sn.gson.GsonUtils;
import com.aoleyun.sn.manager.AllwinnerCubeMdmManager;
import com.aoleyun.sn.network.NetInterfaceManager;
import com.aoleyun.sn.network.UrlAddress;
import com.aoleyun.sn.receiver.BootReceiver;
import com.aoleyun.sn.service.GuardService;
import com.aoleyun.sn.service.StepService;
import com.aoleyun.sn.service.main.MainService;
import com.blankj.utilcode.util.FileUtils;
import com.bumptech.glide.Glide;
import com.bumptech.glide.request.target.SimpleTarget;
import com.bumptech.glide.request.transition.Transition;
import com.google.gson.Gson;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import com.google.gson.reflect.TypeToken;
import com.google.zxing.BarcodeFormat;
import com.google.zxing.EncodeHintType;
import com.google.zxing.WriterException;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.qrcode.QRCodeWriter;
import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;
import com.hjq.toast.Toaster;
import com.kte.interfacesettings.aidl.ITools;
import com.tencent.mmkv.MMKV;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Type;
import java.net.Inet4Address;
import java.net.InetAddress;
import java.net.NetworkInterface;
import java.net.SocketException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.Set;
import java.util.concurrent.Executor;
import java.util.function.BiConsumer;
import java.util.function.Consumer;
import java.util.function.Function;
import java.util.function.Predicate;
import java.util.stream.Collectors;
import io.reactivex.rxjava3.annotations.NonNull;
import io.reactivex.rxjava3.core.Observable;
import io.reactivex.rxjava3.core.ObservableEmitter;
import io.reactivex.rxjava3.core.ObservableOnSubscribe;
import io.reactivex.rxjava3.core.Observer;
import io.reactivex.rxjava3.disposables.Disposable;
import static android.app.ActivityManager.RECENT_IGNORE_UNAVAILABLE;
public class JgyUtils {
private static final String TAG = "JgyUtils";
/*九学王*/
public static final String JXW_LAUNCHER_PACKAGE_NAME = "com.jxw.launcher";
/*注册服务*/
public static final String JXW_LAUNCHER_CLASS_NAME = "com.jht.engine.platsign.PlatformService";
/*学习资源*/
public static final String JXW_LAUNCHER_UPDATE_CLASS_NAME = "com.jxw.engine.platsign.UpdateActivity";
@SuppressLint("StaticFieldLeak")
private static JgyUtils sInstance;
private MMKV mMMKV = MMKV.mmkvWithID(CommonConfig.MMKV_ID, MMKV.MULTI_PROCESS_MODE);
private Context mContext;
private ContentResolver crv;
private LessonJson mLessonJson;
private TimeUtils.ContralTime mContralTime;
public static final int UnknowPlatform = 0;
public static final int MTKPlatform = 1;
public static final int ZhanruiPlatform = 2;
// public static final int CubePlatform = 3;
public static final int MTK11Platform = 5;
public static final int TeclastP20sPlatform = 6;
public static final int AH6016Platform = 9;
public static final int ZR6016Platform = 10;
public static final int HRAD13Platform = 11;
public static final int G10PPlatform = 12;
public static final int C2Platform = 13;
public static final int YXPD1Platform = 15;
public static final int G11Platform = 16;
public static final int MT8768Platform = 17;
public static final int AUDG104Platform = 18;
public static final int HL500Platform = 20;
public static final int G11JPlatform = 21;
public static final int P50Platform = 23;
public static final int seewoPlatform = 25;
public static final int U1302Platform = 26;
public static final int MT6765Platform = 28;
public static final int G128TPlatform = 29;
public static final String Other = "其他";
public static final String MTKTag = "MTK";
public static final String ZhanruiTag = "展锐";
// public static final String CubeTag = "展锐cube";
public static final String MTK11Tag = "MTK11";
public static final String TeclastP20sTag = "P20S";
public static final String AH6016Tag = "AH6016";
public static final String ZR6016Tag = "ZR6016";
public static final String HRAD13Tag = "HRAD13";
public static final String G10PTag = "G10P";
public static final String C2Tag = "MTK8183";
public static final String YXPD1TAG = "YXPD1";
public static final String G11TAG = "MTKG11";
public static final String MT8768Tag = "MT8768";
public static final String AUDG104Tag = "AUDG104";
public static final String HL500Tag = "HL500";
public static final String G11JTag = "aud8786";
public static final String P50Tag = "P50TD";
public static final String seewoTag = "seewo";
public static final String allwinner_U1302 = "QZA15";
public static final String MT6765_TAG = "MT6765";
public static final String G128T_TAG = "G128T";
private CacheHelper cacheHelper;
static {
System.loadLibrary("jgy");
}
private JgyUtils(Context context) {
if (context == null) {
throw new RuntimeException("Context is NULL");
}
this.mContext = context;
this.crv = context.getContentResolver();
this.cacheHelper = new CacheHelper(context);
initConnectedTimeCache();
if (C2Tag.equals(BuildConfig.platform)) {
Log.e(TAG, "JgyUtils: c2");
mServiceConnection = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName componentName, IBinder iBinder) {
Log.e(TAG, "onServiceConnected: " + componentName);
try {
mITools = ITools.Stub.asInterface(iBinder);
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public void onServiceDisconnected(ComponentName componentName) {
Log.e(TAG, "onServiceDisconnected: " + componentName);
mITools = null;
bindEbaifenService();
}
};
bindEbaifenService();
}
refresh();
}
public static void init(Context context) {
if (sInstance == null) {
Log.e(TAG, "init: ");
sInstance = new JgyUtils(context);
}
}
public static JgyUtils getInstance() {
if (sInstance == null) {
throw new IllegalStateException("You must be init JgyUtils first");
}
return sInstance;
}
public static native String getAuthorization();
private static final String EBAIFEN_PACKAGE = "com.kte.interfacesettings";
private static final String EBAIFEN_CLASS_NAME = "com.kte.interfacesettings.ToolsImplService";
private static final String EBAIFEN_ACTION = "com.kte.interfacesettings.aidl";
private ITools mITools;
private ServiceConnection mServiceConnection;
private void bindEbaifenService() {
Intent intent = new Intent(EBAIFEN_ACTION);
intent.setPackage(EBAIFEN_PACKAGE);
// intent.setComponent(new ComponentName(EBAIFEN_PACKAGE, EBAIFEN_CLASS_NAME));
mContext.bindService(intent, mServiceConnection, Context.BIND_AUTO_CREATE);
}
public int checkSNPlatform(String sn) {
if (TextUtils.isEmpty(sn)) return UnknowPlatform;
String secondChars = sn.substring(1, 2);
if ("N".equalsIgnoreCase(secondChars)) {//MTK平台
return MTKPlatform;
} else if ("R".equalsIgnoreCase(secondChars)) {//展锐平台
return ZhanruiPlatform;
} else {
Log.e(TAG, "checkSNPlatform: " + "sn: " + sn + "没有对应平台");
return UnknowPlatform;
}
}
public int checkAppPlatform() {
String platform = BuildConfig.platform;
if (MTKTag.equalsIgnoreCase(platform)) {
Log.i(TAG, "checkAppPlatform: " + "MTK平台");
return MTKPlatform;
} else if (ZhanruiTag.equalsIgnoreCase(platform)) {
Log.i(TAG, "checkAppPlatform: " + "展锐平台");
return ZhanruiPlatform;
}
// else if (CubeTag.equalsIgnoreCase(platform)) {
// Log.i(TAG, "checkAppPlatform: " + "ZhanRuiCube");
// return CubePlatform;
// }
else if (MTK11Tag.equalsIgnoreCase(platform)) {
Log.i(TAG, "checkAppPlatform: " + "MTK11");
return MTK11Platform;
} else if (TeclastP20sTag.equalsIgnoreCase(platform)) {
Log.i(TAG, "checkAppPlatform: " + "P20S");
return TeclastP20sPlatform;
} else if (AH6016Tag.equalsIgnoreCase(platform)) {
Log.i(TAG, "checkAppPlatform: " + "AH6016");
return AH6016Platform;
} else if (ZR6016Tag.equalsIgnoreCase(platform)) {
Log.i(TAG, "checkAppPlatform: " + "ZR6016");
return ZR6016Platform;
} else if (HRAD13Tag.equalsIgnoreCase(platform)) {
Log.i(TAG, "checkAppPlatform: " + "HRAD13");
return HRAD13Platform;
} else if (G10PTag.equalsIgnoreCase(platform)) {
Log.i(TAG, "checkAppPlatform: " + "G10P");
return G10PPlatform;
} else if (C2Tag.equalsIgnoreCase(platform)) {
Log.i(TAG, "checkAppPlatform: " + "C2");
return C2Platform;
} else if (YXPD1TAG.equalsIgnoreCase(platform)) {
Log.i(TAG, "checkAppPlatform: " + "YXPD1");
return YXPD1Platform;
} else if (G11TAG.equalsIgnoreCase(platform)) {
Log.i(TAG, "checkAppPlatform: " + "MTKG11");
return G11Platform;
} else if (MT8768Tag.equalsIgnoreCase(platform)) {
Log.i(TAG, "checkAppPlatform: " + "MT8768");
return MT8768Platform;
} else if (AUDG104Tag.equalsIgnoreCase(platform)) {
Log.i(TAG, "checkAppPlatform: " + "AUDG104");
return AUDG104Platform;
} else if (HL500Tag.equalsIgnoreCase(platform)) {
Log.i(TAG, "checkAppPlatform: " + "HL500");
return HL500Platform;
} else if (G11JTag.equalsIgnoreCase(platform)) {
Log.i(TAG, "checkAppPlatform: " + "G11J");
return G11JPlatform;
} else if (P50Tag.equalsIgnoreCase(platform)) {
Log.i(TAG, "checkAppPlatform: " + "P50TD");
return P50Platform;
} else if (seewoTag.equalsIgnoreCase(platform)) {
Log.i(TAG, "checkAppPlatform: " + "seewo");
return seewoPlatform;
} else if (allwinner_U1302.equalsIgnoreCase(platform)) {
Log.i(TAG, "checkAppPlatform: " + "U1302");
return U1302Platform;
} else if (MT6765_TAG.equalsIgnoreCase(platform)) {
Log.i(TAG, "checkAppPlatform: " + "MT6765");
return MT6765Platform;
} else if (G128T_TAG.equalsIgnoreCase(platform)) {
Log.i(TAG, "checkAppPlatform: " + "G128T");
return G128TPlatform;
} else {
Log.i(TAG, "checkAppPlatform: " + "没有数据");
return UnknowPlatform;
}
}
public boolean isSamePlatform(String platform) {
String AppPlatform = BuildConfig.platform;
if (ZhanruiTag.equals(AppPlatform)) {
return ZhanruiTag.equals(platform);
} else {
return AppPlatform.equals(platform);
}
}
public interface GetAppPlatformCallback {
void AppPlatform(int platform);
}
public void getAppPlatform(GetAppPlatformCallback getAppPlatformCallback) {
String platform = BuildConfig.platform;
if (MTKTag.equalsIgnoreCase(platform)) {
getAppPlatformCallback.AppPlatform(MTKPlatform);
} else if (ZhanruiTag.equalsIgnoreCase(platform)) {
getAppPlatformCallback.AppPlatform(ZhanruiPlatform);
}
// else if ("ZhanRuiCube".equalsIgnoreCase(platform)) {
// getAppPlatformCallback.AppPlatform(CubePlatform);
// }
else if (MTK11Tag.equalsIgnoreCase(platform)) {
getAppPlatformCallback.AppPlatform(MTK11Platform);
} else if (TeclastP20sTag.equalsIgnoreCase(platform)) {
getAppPlatformCallback.AppPlatform(TeclastP20sPlatform);
} else if (AH6016Tag.equalsIgnoreCase(platform)) {
getAppPlatformCallback.AppPlatform(AH6016Platform);
} else if (ZR6016Tag.equalsIgnoreCase(platform)) {
getAppPlatformCallback.AppPlatform(ZR6016Platform);
} else if (HRAD13Tag.equalsIgnoreCase(platform)) {
getAppPlatformCallback.AppPlatform(HRAD13Platform);
} else if (G10PTag.equalsIgnoreCase(platform)) {
getAppPlatformCallback.AppPlatform(G10PPlatform);
} else if (C2Tag.equalsIgnoreCase(platform)) {
getAppPlatformCallback.AppPlatform(C2Platform);
} else if (YXPD1TAG.equalsIgnoreCase(platform)) {
getAppPlatformCallback.AppPlatform(YXPD1Platform);
} else if (G11TAG.equalsIgnoreCase(platform)) {
getAppPlatformCallback.AppPlatform(G11Platform);
} else if (MT8768Tag.equalsIgnoreCase(platform)) {
getAppPlatformCallback.AppPlatform(MT8768Platform);
} else if (AUDG104Tag.equalsIgnoreCase(platform)) {
getAppPlatformCallback.AppPlatform(AUDG104Platform);
} else if (HL500Tag.equalsIgnoreCase(platform)) {
getAppPlatformCallback.AppPlatform(HL500Platform);
} else if (G11JTag.equalsIgnoreCase(platform)) {
getAppPlatformCallback.AppPlatform(G11JPlatform);
} else if (P50Tag.equalsIgnoreCase(platform)) {
getAppPlatformCallback.AppPlatform(P50Platform);
} else if (seewoTag.equalsIgnoreCase(platform)) {
getAppPlatformCallback.AppPlatform(seewoPlatform);
} else if (allwinner_U1302.equalsIgnoreCase(platform)) {
getAppPlatformCallback.AppPlatform(U1302Platform);
} else if (MT6765_TAG.equalsIgnoreCase(platform)) {
getAppPlatformCallback.AppPlatform(MT6765Platform);
} else if (G128T_TAG.equalsIgnoreCase(platform)) {
getAppPlatformCallback.AppPlatform(G128TPlatform);
} else {
getAppPlatformCallback.AppPlatform(UnknowPlatform);
}
}
public String getAppPlatform() {
String platform = BuildConfig.platform;
if (MTKTag.equalsIgnoreCase(platform)) {
return MTKTag;
} else if (ZhanruiTag.equalsIgnoreCase(platform)) {
return ZhanruiTag;
}
// else if (CubeTag.equalsIgnoreCase(platform)) {
// return CubeTag;
// }
else if (MTK11Tag.equalsIgnoreCase(platform)) {
return MTK11Tag;
} else if (TeclastP20sTag.equalsIgnoreCase(platform)) {
return TeclastP20sTag;
} else if (AH6016Tag.equalsIgnoreCase(platform)) {
return AH6016Tag;
} else if (ZR6016Tag.equalsIgnoreCase(platform)) {
return ZR6016Tag;
} else if (HRAD13Tag.equalsIgnoreCase(platform)) {
return HRAD13Tag;
} else if (G10PTag.equalsIgnoreCase(platform)) {
return G10PTag;
} else if (C2Tag.equalsIgnoreCase(platform)) {
return C2Tag;
} else if (YXPD1TAG.equalsIgnoreCase(platform)) {
return YXPD1TAG;
} else if (G11TAG.equalsIgnoreCase(platform)) {
return G11TAG;
} else {
return Other;
}
}
public static boolean isOfficialVersion() {
String channelValue = JgyUtils.getInstance().getStringMetaData();
return "official".equals(channelValue);
}
public static boolean isOfficialVersion(Context context) {
Log.e(TAG, "isOfficialVersion: " + ProcessUtil.getCurrentProcessName(context));
String channelValue = JgyUtils.getInstance().getStringMetaData();
return "official".equals(channelValue);
}
public static boolean isNewlyVersion() {
String channelValue = JgyUtils.getInstance().getStringMetaData();
return "beta".equals(channelValue);
}
public static boolean isBetaVersion() {
String channelValue = JgyUtils.getInstance().getStringMetaData();
return "beta".equals(channelValue);
}
public static String getCHANNEL_VALUE() {
return JgyUtils.getInstance().getStringMetaData();
}
public void resetDevice() {
boolean isReset = MySQLData.GetBooleanData(mContext, CommonConfig.IS_RESET);
int batteryLevel = getBatteryLevel();
Log.e(TAG, "batteryLevel:" + batteryLevel + " isReset" + isReset);
if (isReset && batteryLevel >= CommonConfig.MIN_POWER) {
Utils.doMasterClear(mContext);
}
}
public String getDownLoadPath() {
String path = ContextCompat.getExternalFilesDirs(mContext, Environment.DIRECTORY_DOWNLOADS)[0].getAbsolutePath();
return path + File.separator;
}
public boolean getDeviceIsLocked() {
int locked = Settings.System.getInt(crv, JGYActions.ACTION_QCH_UNLOCK_IPAD, JGYActions.FRAME_CODE_LOCKED);
return locked == JGYActions.FRAME_CODE_LOCKED;
}
public boolean tagEmpty() {
String tag = mMMKV.decodeString(CommonConfig.DEVICES_TAG, "");
return TextUtils.isEmpty(tag);
}
public int getBatteryLevel() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
BatteryManager batteryManager = (BatteryManager) mContext.getSystemService(Context.BATTERY_SERVICE);
return batteryManager.getIntProperty(BatteryManager.BATTERY_PROPERTY_CAPACITY);
} else {
Intent intent = new ContextWrapper(mContext).registerReceiver(null, new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
return (intent.getIntExtra(BatteryManager.EXTRA_LEVEL, -1) * 100) /
intent.getIntExtra(BatteryManager.EXTRA_SCALE, -1);
}
}
private PowerManager.WakeLock wakeLock = null;
private static final String mWakeLockName = "BackupService";
/**
* 获取电源锁保持该服务在屏幕熄灭时仍然获取CPU时保持运行
*/
@SuppressLint("InvalidWakeLockTag")
private synchronized void acquireWakeLock() {
if (null == wakeLock) {
PowerManager pm = (PowerManager) mContext.getSystemService(Context.POWER_SERVICE);
wakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK
| PowerManager.ON_AFTER_RELEASE, mWakeLockName);
if (null != wakeLock) {
Log.e("fht", "acquireWakeLock!");
wakeLock.acquire();
}
}
}
/**
* 释放设备电源锁
*/
private synchronized void releaseWakeLock() {
if (null != wakeLock) {
Log.e("fht", "releaseWakeLock!");
wakeLock.release();
wakeLock = null;
}
}
/**
* 忽略电池优化
*/
private void ignoreBatteryOptimization(Context context) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
PowerManager powerManager = (PowerManager) mContext.getSystemService(Context.POWER_SERVICE);
boolean hasIgnored = powerManager.isIgnoringBatteryOptimizations(context.getPackageName());
// 判断当前APP是否有加入电池优化的白名单如果没有弹出加入电池优化的白名单的设置对话框。
if (!hasIgnored) {
Intent intent = new Intent(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS);
intent.setData(Uri.parse("package:" + context.getPackageName()));
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
mContext.startActivity(intent);
}
}
}
public static boolean getScreenStatus(Context context) {
PowerManager powerManager = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
//true为打开false为关闭
return powerManager.isScreenOn();
}
/**
* 点亮屏幕
*
* @param timeout The timeout after which to release the wake lock, in milliseconds.
*/
@Nullable
public static PowerManager.WakeLock acquireWakeLock(@NonNull Context context, long timeout) {
PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
if (pm == null)
return null;
PowerManager.WakeLock wakeLock = pm.newWakeLock(PowerManager.ACQUIRE_CAUSES_WAKEUP |
PowerManager.FULL_WAKE_LOCK |
PowerManager.ON_AFTER_RELEASE,
context.getClass().getName());
wakeLock.acquire(timeout);
return wakeLock;
}
public static void release(@Nullable PowerManager.WakeLock wakeLock) {
if (wakeLock != null && wakeLock.isHeld()) {
wakeLock.release();
}
}
/**
* 应用自启升级和网络权限管理
*
* @param netAndLaunchBean
*/
public void setNetAndlaunch(NetAndLaunchBean netAndLaunchBean, List<AppListInfo> appListInfos) {
Log.e(TAG, "setNetAndlaunch: " + "应用联网管控: " + netAndLaunchBean.getData().toString());
Log.e(TAG, "setNetAndlaunch: ");
HashSet<String> autoLaunchApp = new HashSet<>();//开机自启app
HashSet<String> allowNetApp = new HashSet<>();//允许联网
HashSet<String> disallowNetApp = new HashSet<>();//禁止联网
HashSet<String> allowUpgrade = new HashSet<>();//允许升级
HashSet<String> disallowUpgrade = new HashSet<>();//禁止升级
HashSet<String> allowSlide = new HashSet<>();//允许滑动
HashSet<String> disallowSlide = new HashSet<>();//禁止滑动
List<NetAndLaunchData> data = netAndLaunchBean.getData();
for (NetAndLaunchData netAndLaunchData : data) {
String app_package = netAndLaunchData.getApp_package();
int is_auto = netAndLaunchData.getIs_auto();
int is_network = netAndLaunchData.getIs_network();
int is_upgrade = netAndLaunchData.getIs_upgrade();
int is_slide = netAndLaunchData.getIs_slide();
if (is_auto == 1) {
autoLaunchApp.add(app_package);
}
if (is_network == 1) {
allowNetApp.add(app_package);
} else {
disallowNetApp.add(app_package);
}
if (is_upgrade == 1) {
allowUpgrade.add(app_package);
} else {
disallowUpgrade.add(app_package);
}
if (is_slide == 1) {
allowSlide.add(app_package);
} else {
disallowSlide.add(app_package);
}
}
if (disallowSlide.size() != 0) {
String slide_not = String.join(",", disallowSlide);
boolean writeSucceed = Settings.System.putString(crv, CommonConfig.AOLE_ACTION_DISABLE_SLIDE, slide_not);
Log.e("fht", "aole_disable_slide=" + writeSucceed + ":" + slide_not);
} else {
String slide_ok = String.join(",", allowSlide);
boolean writeSucceed = Settings.System.putString(crv, CommonConfig.AOLE_ACTION_DISABLE_SLIDE, "Invalid");
Log.e("fht", "aole_disable_slide ok=" + writeSucceed + ":" + slide_ok);
}
String[] upgrade_ok = new String[allowUpgrade.size()];
allowUpgrade.toArray(upgrade_ok);
checkPackageAndVersion(disallowUpgrade, appListInfos);
String[] upgrade_not = new String[disallowUpgrade.size()];
disallowUpgrade.toArray(upgrade_not);
Utils.writeDisableUpdateList(mContext, upgrade_not, upgrade_ok);
String aole_app_power_on = String.join(",", autoLaunchApp);
Log.e(TAG, "setNetAndlaunch: aole_app_power_on: " + aole_app_power_on);
if (TextUtils.isEmpty(aole_app_power_on)) {
//当 aole_app_power_on 的值为空时,会造成系统所有应用断网
Settings.System.putString(crv, CommonConfig.AOLE_ACTION_APP_POWER_ON, "Invalid");
Log.e(TAG, "setNetAndlaunch: aole_app_power_on: " + "Invalid");
} else {
Settings.System.putString(crv, CommonConfig.AOLE_ACTION_APP_POWER_ON, aole_app_power_on);
Log.e(TAG, "setNetAndlaunch: aole_app_power_on: " + aole_app_power_on);
}
// if (BuildConfig.DEBUG) {
// TODO: 2021/7/2 测试写入为空是否断网
// boolean w = Settings.System.putString(crv, "aole_app_power_on", "");
// Log.e(TAG, "setNetAndlaunch: 测试写入: " + w);
// }
setAppNetwork(disallowNetApp, allowNetApp);
}
public void onBootOpenApp() {
if ("G1096JW".equals(Build.MODEL)) {
if (ApkUtils.isAvailable(mContext, "com.aisudu.xhb")) {
ApkUtils.openPackage(mContext, "com.aisudu.xhb");
}
}
String qch_app_power_on = Settings.System.getString(crv, CommonConfig.AOLE_ACTION_APP_POWER_ON);
if (TextUtils.isEmpty(qch_app_power_on)) {
return;
}
List<String> appList = new ArrayList<>(Arrays.asList(qch_app_power_on.split(",")));
for (String s : appList) {
if (TextUtils.isEmpty(s)) continue;
Log.e(TAG, "onBootOpenApp: " + s);
ApkUtils.openApp(mContext, s);
}
}
private void checkPackageAndVersion(HashSet<String> disallowUpgrade, List<AppListInfo> appListInfos) {
if (appListInfos == null || appListInfos.size() == 0) {
return;
}
Log.e(TAG, "checkPackageAndVersion: " + disallowUpgrade);
PackageManager pm = mContext.getPackageManager();
HashMap<String, AppListInfo> listInfoHashMap = new HashMap<>();
for (AppListInfo appListInfo : appListInfos) {
listInfoHashMap.put(appListInfo.getApp_package(), appListInfo);
}
for (String pkg : disallowUpgrade) {
AppListInfo info = listInfoHashMap.get(pkg);
if (info != null) {
PackageInfo packageInfo = null;
try {
packageInfo = pm.getPackageInfo(pkg, 0);
long appVersionCode;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
appVersionCode = packageInfo.getLongVersionCode();
} else {
appVersionCode = packageInfo.versionCode;
}
if (appVersionCode > info.getApp_version_code() && info.getApp_version_code() != 0) {
Log.e(TAG, "checkPackageAndVersion: appVersionCode: " + appVersionCode + " getApp_version_code: " + info.getApp_version_code());
Log.e(TAG, "checkPackageAndVersion: " + pkg + " 卸载");
ApkUtils.UninstallAPP(mContext, pkg);
JsonObject packageObj = new JsonObject();
packageObj.addProperty("app_name", info.getApp_name());
packageObj.addProperty("app_package", info.getApp_package());
packageObj.addProperty("app_id", info.getApp_id());
packageObj.addProperty("MD5", info.getApp_md5());
Utils.ariaDownload(mContext, info.getApp_url(), packageObj);
} else {
Log.e(TAG, "checkPackageAndVersion: " + pkg + " 版本正常");
}
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
}
}
}
public void setNetAndlaunch(NetAndLaunchBean netAndLaunchBean) {
Log.e(TAG, "setNetAndlaunch: " + "应用联网管控: " + netAndLaunchBean.getData().toString());
Log.e(TAG, "setNetAndlaunch: ");
HashSet<String> autoLaunchApp = new HashSet<>();//开机自启app
HashSet<String> allowNetApp = new HashSet<>();//允许联网
HashSet<String> disallowNetApp = new HashSet<>();//禁止联网
HashSet<String> allowUpgrade = new HashSet<>();//允许升级
HashSet<String> disallowUpgrade = new HashSet<>();//禁止升级
HashSet<String> allowSlide = new HashSet<>();//允许滑动
HashSet<String> disallowSlide = new HashSet<>();//禁止滑动
HashSet<String> disallowNotification = new HashSet<>();//禁止通知栏显示通知
HashSet<String> allowPermissions = new HashSet<>();//默认给所有权限
List<NetAndLaunchData> data = netAndLaunchBean.getData();
for (NetAndLaunchData netAndLaunchData : data) {
String app_package = netAndLaunchData.getApp_package();
int is_auto = netAndLaunchData.getIs_auto();
int is_network = netAndLaunchData.getIs_network();
int is_upgrade = netAndLaunchData.getIs_upgrade();
int is_slide = netAndLaunchData.getIs_slide();
int is_notification = netAndLaunchData.getIs_notification();
int is_dynamic_perm = netAndLaunchData.getIs_dynamic_perm();
if (is_auto == 1) {
autoLaunchApp.add(app_package);
}
if (is_network == 1) {
allowNetApp.add(app_package);
} else {
disallowNetApp.add(app_package);
}
if (is_upgrade == 1) {
allowUpgrade.add(app_package);
} else {
disallowUpgrade.add(app_package);
}
if (is_slide == 1) {
allowSlide.add(app_package);
} else {
disallowSlide.add(app_package);
}
if (is_notification == 0) {
disallowNotification.add(app_package);
}
if (is_dynamic_perm == 1) {
allowPermissions.add(app_package);
}
}
if (disallowSlide.size() != 0) {
String slide_not = String.join(",", disallowSlide);
boolean writeSucceed = Settings.System.putString(crv, CommonConfig.AOLE_ACTION_DISABLE_SLIDE, slide_not);
Log.e("fht", "aole_disable_slide=" + writeSucceed + ":" + slide_not);
} else {
String slide_ok = String.join(",", allowSlide);
boolean writeSucceed = Settings.System.putString(crv, CommonConfig.AOLE_ACTION_DISABLE_SLIDE, "Invalid");
Log.e("fht", "aole_disable_slide ok=" + writeSucceed + ":" + slide_ok);
}
String[] upgrade_ok = new String[allowUpgrade.size()];
allowUpgrade.toArray(upgrade_ok);
String[] upgrade_not = new String[disallowUpgrade.size()];
disallowUpgrade.toArray(upgrade_not);
Utils.writeDisableUpdateList(mContext, upgrade_not, upgrade_ok);
String aole_app_power_on = String.join(",", autoLaunchApp);
Log.e(TAG, "setNetAndlaunch: aole_app_power_on: " + aole_app_power_on);
if (TextUtils.isEmpty(aole_app_power_on)) {
//当 qch_app_power_on 的值为空时,会造成系统所有应用断网
Settings.System.putString(crv, CommonConfig.AOLE_ACTION_APP_POWER_ON, "Invalid");
Log.e(TAG, "setNetAndlaunch: aole_app_power_on: " + "Invalid");
} else {
Settings.System.putString(crv, CommonConfig.AOLE_ACTION_APP_POWER_ON, aole_app_power_on);
Log.e(TAG, "setNetAndlaunch: aole_app_power_on: " + aole_app_power_on);
}
// if (BuildConfig.DEBUG) {
// TODO: 2021/7/2 测试写入为空是否断网
// boolean w = Settings.System.putString(crv, "aole_app_power_on", "");
// Log.e(TAG, "setNetAndlaunch: 测试写入: " + w);
// }
setAppNetwork(disallowNetApp, allowNetApp);
setDisallowNotificationPackage(mContext, disallowNotification);
mMMKV.encode("aole_app_privilege", allowPermissions);
setAllowPermissionsPackage();
}
private void setDisallowNotificationPackage(Context context, HashSet<String> pkgSet) {
Log.e(TAG, "setDisallowNotificationPackage: " + pkgSet);
if (pkgSet.size() == 0) {
Settings.System.putString(context.getContentResolver(), "aole_app_info", "");
} else {
Settings.System.putString(context.getContentResolver(), "aole_app_info", String.join(",", pkgSet));
}
if (JgyUtils.isAllWinnerDevice()) {
AllwinnerCubeMdmManager.getInstance().setDisallowNotification(new ArrayList<>(pkgSet));
}
}
public void setAllowPermissionsPackage() {
Set<String> privilegeApp = mMMKV.decodeStringSet("aole_app_privilege", new HashSet<>());
Log.e(TAG, "setAllowPermissionsPackage: " + privilegeApp);
Set<String> pkgSet = privilegeApp.stream().filter(s -> ApkUtils.isAvailable(mContext, s)).collect(Collectors.toSet());
Log.e(TAG, "setAllowPermissionsPackage: " + pkgSet);
if (pkgSet.size() == 0) {
Settings.System.putString(crv, "aole_app_privilege", "");
} else {
Settings.System.putString(crv, "aole_app_privilege", String.join(",", pkgSet));
}
if (JgyUtils.isAllWinnerDevice()) {
AllwinnerCubeMdmManager.getInstance().setDefaultPermissions(new ArrayList<>(pkgSet));
}
}
public static final Set<String> DEFAULT_ALLOW_NETWORK_APP_SET = new HashSet<String>() {{
this.add(BuildConfig.APPLICATION_ID);
this.add("com.aoleyun.appstore");
this.add("com.aoleyun.camera");
this.add("com.aoleyun.browser");
this.add("com.aoleyun.info");
this.add("com.aoleyun.os");
this.add("com.aoleyun.calculator");
this.add("com.aoleyun.gallery3d");
this.addAll(ApkUtils.mJxwApp);
this.addAll(ApkUtils.desktopAPP);
this.add("com.android.settings");
this.add("com.aoleyunos.dop");
this.add("com.aoleyunos.dop1");
this.add("com.aoleyunos.dop2");
this.add("com.aoleyunos.dop3");
this.add("com.aoleyunos.dop4");
this.add("com.aoleyunos.dop5");
this.add("com.aoleyunos.dop6");
this.add("com.aoleyunos.dop7");
this.add("com.aoleyunos.dop8");
this.add("com.aoleyunos.dop9");
this.add("com.aoleyunos.dop10");
this.add("com.schoolos.cmcc");
this.add("com.aoleyunos.natuer");
}};
public void setAppNetwork(HashSet<String> blackList, HashSet<String> whiteList) {
Log.e(TAG, "setAppNetwork: " + "设置应用联网管控 blackList =" + blackList);
Log.e(TAG, "setAppNetwork: " + "设置应用联网管控 whiteList =" + whiteList);
if ("Ebox201W".equals(Build.MODEL) || "Ebox201".equals(Build.MODEL)) {
} else {
try {
Settings.System.putString(crv, CommonConfig.AOLE_ACTION_NETWORK_ALLOW, null);
CmdUtil.Result result = CmdUtil.execute(" settings delete system aole_network_allow");
Log.e(TAG, "setAppNetwork: " + result);
} catch (Exception e) {
e.printStackTrace();
}
}
if (!MTK11Tag.equals(JgyUtils.getInstance().getAppPlatform())) {
if (blackList == null || blackList.size() == 0) {
Settings.System.putString(crv, CommonConfig.AOLE_ACTION_NETWORK_DISALLOW, null);
} else {
String net_not = String.join(",", blackList);
Settings.System.putString(crv, CommonConfig.AOLE_ACTION_NETWORK_DISALLOW, net_not);
Log.e(TAG, "setAppNetwork: " + net_not);
}
}
if (blackList != null) {
List<String> installedBlackApps = blackList.stream().filter(s -> ApkUtils.isAvailable(mContext, s)).collect(Collectors.toList());
Log.e(TAG, "setAppNetwork: installedBlackApps = " + installedBlackApps);
if (JgyUtils.isAllWinnerDevice()) {
AllwinnerCubeMdmManager.getInstance().setBlackNetApp(installedBlackApps);
}
}
mMMKV.encode(CommonConfig.AOLE_ACTION_NETWORK_ALLOW, whiteList);
Set<String> pkgs;
int is_app_install = Settings.System.getInt(crv, CommonConfig.AOLE_APP_ALLOW_INSTALL, 0);
if (is_app_install == 1) {
Log.e(TAG, "setAppNetwork: is_app_install = 1");
pkgs = new HashSet<>(ApkUtils.queryFilterAppList(mContext));
} else {
pkgs = new HashSet<>(whiteList);
}
pkgs.addAll(DEFAULT_ALLOW_NETWORK_APP_SET);
List<String> filterList = pkgs.stream().filter(s -> ApkUtils.isAvailable(mContext, s)).collect(Collectors.toList());
Log.e(TAG, "setAppNetwork: filterList = " + filterList);
if ("Ebox201W".equals(Build.MODEL) || "Ebox201".equals(Build.MODEL)) {
if (filterList.size() == 0) {
Settings.System.putString(crv, CommonConfig.AOLE_ACTION_NETWORK_ALLOW, null);
} else {
// TODO: 2024/10/31 需要多写一次保证数据库变化
filterList.add("com.ttstd.utils");
Settings.System.putString(crv, CommonConfig.AOLE_ACTION_NETWORK_ALLOW, String.join(",", filterList));
filterList.remove("com.ttstd.utils");
Settings.System.putString(crv, CommonConfig.AOLE_ACTION_NETWORK_ALLOW, String.join(",", filterList));
}
}
}
/**
* 应用安装之后添加到白名单
*/
public void updateNetworkWhiteList() {
Log.e(TAG, "updateNetworkWhiteList: ");
if ("Ebox201W".equals(Build.MODEL) || "Ebox201".equals(Build.MODEL)) {
} else {
try {
Settings.System.putString(crv, CommonConfig.AOLE_ACTION_NETWORK_ALLOW, null);
CmdUtil.Result result = CmdUtil.execute(" settings delete system aole_network_allow");
Log.e(TAG, "updateNetworkWhiteList: " + result);
} catch (Exception e) {
e.printStackTrace();
}
}
if ("Ebox201W".equals(Build.MODEL) || "Ebox201".equals(Build.MODEL)) {
} else {
try {
Settings.System.putString(mContext.getContentResolver(), CommonConfig.AOLE_APP_WEB_BLACK_LIST, null);
CmdUtil.Result result = CmdUtil.execute(" settings delete system app_web_black_list");
Log.e(TAG, "updateNetworkWhiteList: " + result);
} catch (Exception e) {
e.printStackTrace();
}
}
if ("Ebox201W".equals(Build.MODEL) || "Ebox201".equals(Build.MODEL)) {
} else {
try {
Settings.System.putString(mContext.getContentResolver(), CommonConfig.AOLE_APP_WEB_WHITE_LIST, null);
CmdUtil.Result result = CmdUtil.execute(" settings delete system app_web_white_list");
Log.e(TAG, "getWhiteList: " + result);
} catch (Exception e) {
e.printStackTrace();
}
}
Set<String> pkgs;
int is_app_install = Settings.System.getInt(crv, CommonConfig.AOLE_APP_ALLOW_INSTALL, 0);
if (is_app_install == 1) {
Log.e(TAG, "updateNetworkWhiteList: is_app_install = 1");
pkgs = new HashSet<>(ApkUtils.queryFilterAppList(mContext));
} else {
pkgs = mMMKV.decodeStringSet(CommonConfig.AOLE_ACTION_NETWORK_ALLOW, new HashSet<>());
}
pkgs.addAll(DEFAULT_ALLOW_NETWORK_APP_SET);
List<String> whiteList = new ArrayList<>(pkgs);
List<String> filterList = whiteList.stream().filter(s -> ApkUtils.isAvailable(mContext, s)).collect(Collectors.toList());
Log.e(TAG, "updateNetworkWhiteList: filterList = " + filterList);
if ("Ebox201W".equals(Build.MODEL) || "Ebox201".equals(Build.MODEL)) {
if (filterList.size() == 0) {
Settings.System.putString(crv, CommonConfig.AOLE_ACTION_NETWORK_ALLOW, null);
} else {
// TODO: 2024/10/31 需要多写一次保证数据库变化
filterList.add("com.ttstd.utils");
Settings.System.putString(crv, CommonConfig.AOLE_ACTION_NETWORK_ALLOW, String.join(",", filterList));
filterList.remove("com.ttstd.utils");
Settings.System.putString(crv, CommonConfig.AOLE_ACTION_NETWORK_ALLOW, String.join(",", filterList));
}
}
Log.e(TAG, "updateNetworkWhiteList: " + filterList);
}
public void onBootSendNetwork() {
if (!MTK11Tag.equals(JgyUtils.getInstance().getAppPlatform())) {
String oldBlackListString = (String) SPUtils.get(mContext, CommonConfig.AOLE_ACTION_NETWORK_DISALLOW, "");
HashSet<String> oldBlackListSet = new HashSet<>(Arrays.asList(oldBlackListString.split(",")));
Log.e(TAG, "setAppNetwork: oldBlackListSet: " + oldBlackListSet);
oldBlackListSet.removeIf(new Predicate<String>() {
@Override
public boolean test(String s) {
return TextUtils.isEmpty(s.trim());
}
});
for (String pkg : oldBlackListSet) {
if (TextUtils.isEmpty(pkg)) continue;
if (!ApkUtils.isAvailable(mContext, pkg)) {
Log.e(TAG, "setAppNetwork: skip: " + pkg);
continue;
}
Intent netControlNotIntent = new Intent(CommonConfig.AOLE_ACTION_NETWORK_DISALLOW);
netControlNotIntent.putExtra("package_name", pkg);
netControlNotIntent.setPackage("com.android.settings");
mContext.sendBroadcast(netControlNotIntent);
}
}
}
public void writeDeselectIDtoSystem(List<AppID> appIDList) {
if (!"Ebox201".equals(Build.MODEL) && !"Ebox201W".equals(Build.MODEL)) {
Log.e(TAG, "writeDeselectIDtoSystem: not match Ebox201 or Ebox201W");
return;
}
if (appIDList == null || appIDList.isEmpty()) {
if ("G10".equals(Build.MODEL) || "D1".equals(Build.MODEL)) {
Settings.System.putString(mContext.getContentResolver(), CommonConfig.APP_VIEW_CLICK_DISABLED, "com.arivoc.wordhd:2131624676,2131624689;com.ttstd.utils:12345");
} else {
try {
Settings.System.putString(crv, CommonConfig.APP_VIEW_CLICK_DISABLED, null);
// TODO: 2024/9/11 修复1.4.0907版本数据为空系统报错
CmdUtil.Result result = CmdUtil.execute(" settings delete system app_view_click_disabled");
Log.e(TAG, "writeDeselectIDtoSystem: " + result);
} catch (Exception e) {
e.printStackTrace();
}
}
} else {
String s = appIDList.stream().map(new Function<AppID, String>() {
@Override
public String apply(AppID appID) {
return appID.toString();
}
}).collect(Collectors.joining(";"));
Log.e(TAG, "writeDeselectIDtoSystem: " + s);
Settings.System.putString(crv, CommonConfig.APP_VIEW_CLICK_DISABLED, s);
}
}
public void setAppinsideWeb(BaseResponse<List<Appground>> response) {
if (response.code == 200) {
List<Appground> appgrounds = response.data;
if (appgrounds != null && appgrounds.size() > 0) {
StringBuilder strings = new StringBuilder();
StringBuilder packageList = new StringBuilder();//单条管控名单
for (Appground appground : appgrounds) {
if (TextUtils.isEmpty(appground.getAddress())) {
if (packageList.length() > 0) {
packageList.append(",");
}
packageList.append(appground.getPackages());
} else {
if (strings.length() > 0) {
strings.append(";");
}
strings.append(appground.toString());
}
}
if (packageList.length() > 0) {
//app内所有的网页禁止
Log.e("setAppinsideWeb ", "packageList:" + packageList.toString());
Intent qch_app_website = new Intent("qch_app_website")
.setPackage("com.android.settings");
qch_app_website.putExtra("package_name", packageList.toString());
mContext.sendBroadcast(qch_app_website);
} else {
sendAllweb(mContext);
}
if (strings.length() > 0) {
//app内单个网页地址禁止打开
Log.e("setAppinsideWeb ", "strings:" + strings.toString());
Intent intent = new Intent("qch_app_inside_website")
.setPackage("com.android.settings");
intent.putExtra("websitelist", strings.toString());
mContext.sendBroadcast(intent);
} else {
sendwebUrl(mContext);
}
}
} else if (response.code == 400) {
//列表为空的情况
sendAllweb(mContext);
sendwebUrl(mContext);
//Toaster.show(msg);
Log.e("setAppinsideWeb", "setAppinsideWeb: " + response.msg);
}
}
/**
* @param response 黑白名单都可以管控
*/
public void setNewAppinsideWeb(BaseResponse response) {
Log.e(TAG, "setNewAppinsideWeb: " + "应用内部联网管控: " + response);
if (response.code == 200) {
String jsonString = GsonUtils.toJSONString(response.data);
Gson gson = new Gson();
Type type = new TypeToken<List<TTAppground>>() {
}.getType();
List<TTAppground> appgrounds = gson.fromJson(jsonString, type);
List<TTAppground> whiteApp = new ArrayList<>();
List<TTAppground> blackApp = new ArrayList<>();
if (appgrounds != null && appgrounds.size() > 0) {
for (TTAppground appground : appgrounds) {
if (appground.getType() == 1) {
whiteApp.add(appground);
} else {
blackApp.add(appground);
}
}
Log.e(TAG, "setAppinsideWeb: whiteApp: " + whiteApp);
Log.e(TAG, "setAppinsideWeb: blackApp: " + blackApp);
setWhiteApp(whiteApp);
setBlackApp(blackApp);
}
} else if (response.code == 400) {
//列表为空的情况
List<TTAppground> whiteApp = new ArrayList<>();
setWhiteApp(whiteApp);
sendAllweb(mContext);
sendwebUrl(mContext);
//Toaster.show(msg);
Log.e("setAppinsideWeb", "setAppinsideWeb: " + response.msg);
}
}
public static final String JGY_APPINSIDE_WHITELIST = "JGY_APPINSIDE_WHITELIST";
// public static final String JGY_APPINSIDE_FIRST_WRITE = "JGY_APPINSIDE_FIRST_WRITE";
@SuppressLint("NewApi")
private void setWhiteApp(List<TTAppground> appgrounds) {
//去重
List<TTAppground> ttAppgrounds = appgrounds.stream().distinct().collect(Collectors.toList());
List<TTAppground> old = getOldWhitelist();
comparedAppground(old, ttAppgrounds);
setWhiteList(ttAppgrounds);
}
private void comparedAppground(List<TTAppground> oldAppgrounds, List<TTAppground> newAppgrounds) {
List<TTAppground> addAppgrounds = new ArrayList<>();
List<TTAppground> deleteAppgrounds = new ArrayList<>();
List<TTAppground> changedAppgrounds = new ArrayList<>();
HashMap<String, TTAppground> oldAppgroundsMap = new HashMap<>();
HashMap<String, TTAppground> newAppgroundsMap = new HashMap<>();
for (TTAppground appground : oldAppgrounds) {
oldAppgroundsMap.put(appground.getPackages(), appground);
}
for (TTAppground appground : newAppgrounds) {
newAppgroundsMap.put(appground.getPackages(), appground);
}
for (TTAppground appground : oldAppgrounds) {
String packageName = appground.getPackages();
TTAppground mapground = newAppgroundsMap.get(packageName);
if (mapground == null) {
deleteAppgrounds.add(appground);
} else {
if (!appground.equals(mapground)) {
changedAppgrounds.add(mapground);
}
}
newAppgroundsMap.remove(packageName);
}
for (Map.Entry<String, TTAppground> entry : newAppgroundsMap.entrySet()) {
addAppgrounds.add(entry.getValue());
}
Log.e(TAG, "comparedAppground: addAppgrounds.size():" + addAppgrounds.size());
Log.e(TAG, "comparedAppground: deleteAppgrounds.size():" + deleteAppgrounds.size());
Log.e(TAG, "comparedAppground: changedAppgrounds.size():" + changedAppgrounds.size());
addAppground(addAppgrounds);
deleteAppground(deleteAppgrounds);
changeAppground(oldAppgroundsMap, changedAppgrounds);
Log.e(TAG, "comparedAppground: complete");
}
private void addAppground(List<TTAppground> appgroundList) {
for (TTAppground appground : appgroundList) {
addPackage(appground.getPackages());
//删除空的,旧版本使用这个清除
deleteWhitelistUrl(appground.getPackages(), "Invalid");
addToWhitelist(appground.getPackages(), appground.getAddress());
Log.e("comparedAppground", "addAppground: " + appground.getAddress());
}
}
private void deleteAppground(List<TTAppground> appgroundList) {
for (TTAppground appground : appgroundList) {
deleteWhitelistUrl(appground.getPackages(), appground.getAddress());
deleteOtherAppWhitelist(appground.getPackages());
Log.e("comparedAppground", "deleteAppground: " + appground.getAddress());
}
}
private void changeAppground(HashMap<String, TTAppground> oldAppgroundsMap, List<TTAppground> appgroundList) {
for (TTAppground appground : appgroundList) {
HashSet<String> newURL = new HashSet<>(Arrays.asList(appground.getAddress().split(",")));
TTAppground oldAppground = oldAppgroundsMap.get(appground.getPackages());
HashSet<String> oldURL = new HashSet<>(Arrays.asList(oldAppground.getAddress().split(",")));
for (String url : newURL) {
if (oldURL.contains(url)) {
oldURL.remove(url);
} else {
addToWhitelist(appground.getPackages(), url);
Log.e("comparedAppground", "addToWhitelist: " + url);
}
}
for (String url : oldURL) {
deleteWhitelistUrl(appground.getPackages(), url);
Log.e("comparedAppground", "deleteWhitelistUrl: " + url);
}
}
}
private List<TTAppground> getOldWhitelist() {
String whiteListString = (String) SPUtils.get(mContext, JGY_APPINSIDE_WHITELIST, "");
Log.e(TAG, "getOldWhitelist: " + whiteListString);
Gson gson = new Gson();
Type listType = new TypeToken<List<TTAppground>>() {
}.getType();
List<TTAppground> whiteList = gson.fromJson(whiteListString, listType);
if (whiteList == null) {
whiteList = new ArrayList<>();
}
//去重
whiteList.removeIf(new Predicate<TTAppground>() {
@Override
public boolean test(TTAppground ttAppground) {
return !ApkUtils.isAvailable(mContext, ttAppground.getPackages());
}
});
List<TTAppground> ttAppgrounds = whiteList.stream().distinct().collect(Collectors.toList());
return ttAppgrounds;
}
/**
* @param appgrounds 写入缓存
*/
private void setWhiteList(List<TTAppground> appgrounds) {
appgrounds.removeIf(new Predicate<TTAppground>() {
@Override
public boolean test(TTAppground ttAppground) {
return !ApkUtils.isAvailable(mContext, ttAppground.getPackages());
}
});
String data = new Gson().toJson(appgrounds);
SPUtils.put(mContext, JGY_APPINSIDE_WHITELIST, data);
}
public void onBootSetAppInsideWeb() {
List<TTAppground> old = getOldWhitelist();
Log.e(TAG, "onBootSetAppInsideWeb: " + old);
for (TTAppground appground : old) {
if (TextUtils.isEmpty(appground.getAddress())) {
Log.e(TAG, "setWhiteApp: " + "skip: " + appground.getAddress());
} else {
addPackage(appground.getPackages());
//删除空的,旧版本使用这个清除
addToWhitelist(appground.getPackages(), appground.getAddress());
deleteWhitelistUrl(appground.getPackages(), "Invalid");
}
}
}
/**
* @param pkg 开启app白名单
*/
private void addPackage(String pkg) {
Log.e(TAG, "addPackage: " + pkg);
Intent intent26 = new Intent();
intent26.setAction("qch_app_inside_website");
intent26.putExtra("WEBURLforbidapp", pkg);
intent26.setPackage("com.android.settings");
mContext.sendBroadcast(intent26);
}
/**
* @param pkg
* @param urls 添加app白名单
*/
private void addToWhitelist(String pkg, String urls) {
if (TextUtils.isEmpty(urls)) {
Log.e(TAG, "addToWhitelist: " + "urls is NULL");
return;
}
HashSet<String> urlSet = new HashSet<>(Arrays.asList(urls.trim().split(",")));
for (String url : urlSet) {
if (TextUtils.isEmpty(url)) {
continue;
}
deleteOtherAppWhitelist(pkg);
Log.e(TAG, "addToWhitelist: pkg:" + pkg + " url: " + url);
Intent intent25 = new Intent();
intent25.setAction("qch_app_setAddAppWhitWebUid");
intent25.putExtra("AddAppWhitWebUidPackage", pkg);
intent25.putExtra("AddAppWhitWebUid", url);
intent25.setPackage("com.android.settings");
mContext.sendBroadcast(intent25);
}
}
/**
* @param pkg
* @param urls 删除某个app 内某个白名单
*/
private void deleteWhitelistUrl(String pkg, String urls) {
if (TextUtils.isEmpty(urls)) {
Log.e(TAG, "addToWhitelist: " + "urls is NULL");
return;
}
HashSet<String> urlSet = new HashSet<>(Arrays.asList(urls.trim().split(",")));
for (String url : urlSet) {
if (TextUtils.isEmpty(url)) {
continue;
}
Log.e(TAG, "deleteWhitelistUrl: qch_app_setDelAppWhitWebUid" + "pkg: " + pkg + " url: " + url);
Intent intent25 = new Intent();
intent25.setAction("qch_app_setDelAppWhitWebUid");
intent25.putExtra("DelAppWhitWebUidPackage", pkg);
intent25.putExtra("DelAppWhitWebUid", url);
intent25.setPackage("com.android.settings");
mContext.sendBroadcast(intent25);
}
}
/**
* @param pkg 开启和关闭白名单管控都需要发送
*/
private void deleteOtherAppWhitelist(String pkg) {
Log.e(TAG, "disableAppWhitelist: " + pkg);
Intent intent24 = new Intent();
intent24.setAction("qch_app_setDelAppWhitUid");
intent24.putExtra("DelAppWhitUidPackage", pkg);
intent24.setPackage("com.android.settings");
mContext.sendBroadcast(intent24);
}
/**
* @param appgrounds 设置黑名单管控
*/
private void setBlackApp(List<TTAppground> appgrounds) {
Log.e(TAG, "setBlackApp: " + appgrounds);
StringBuilder blackList = new StringBuilder();
StringBuilder packageList = new StringBuilder();//单条管控名单
for (TTAppground appground : appgrounds) {
if (TextUtils.isEmpty(appground.getAddress())) {
if (packageList.length() > 0) {
packageList.append(",");
}
packageList.append(appground.getPackages());
} else {
if (blackList.length() > 0) {
blackList.append(";");
}
blackList.append(appground.toString());
}
}
//old
if (packageList.length() > 0) {
//app内所有的网页禁止
Log.e("setAppinsideWeb ", "packageList:" + packageList.toString());
Intent qch_app_website = new Intent("qch_app_website")
.setPackage("com.android.settings");
qch_app_website.putExtra("package_name", packageList.toString());
mContext.sendBroadcast(qch_app_website);
} else {
// sendAllweb(mContext);
}
if (blackList.length() > 0) {
//app内单个网页地址禁止打开
Log.e("setAppinsideWeb ", "blackList:" + blackList.toString());
Intent intent = new Intent("qch_app_inside_website")
.setPackage("com.android.settings");
intent.putExtra("websitelist", blackList.toString());
mContext.sendBroadcast(intent);
} else {
// sendwebUrl(mContext);
}
}
private static void sendAllweb(Context context) {
Log.e(TAG, "sendAllweb: ");
Intent intent = new Intent("qch_app_website")
.setPackage("com.android.settings");
intent.putExtra("package_name", "Invalid");
context.sendBroadcast(intent);
}
private static void sendwebUrl(Context context) {
Log.e(TAG, "sendwebUrl: ");
Intent intent = new Intent("qch_app_inside_website")
.setPackage("com.android.settings");
intent.putExtra("websitelist", "Invalid");
context.sendBroadcast(intent);
}
public void SettingSysData(String data) {
if (TextUtils.isEmpty(data)) {
Log.e(TAG, "SettingSysData: " + "data is empty");
int locked = Settings.System.getInt(crv, JGYActions.ACTION_QCH_UNLOCK_IPAD, JGYActions.FRAME_CODE_LOCKED);
if (locked == JGYActions.FRAME_CODE_LOCKED) {
SysSettingUtils.setDisableSetting(mContext);
}
SPUtils.put(mContext, JGYActions.ACTION_STATUSBAR_STATUS, "");
} else {
if (JgyUtils.getInstance().getAppPlatform().equals(JgyUtils.ZR6016Tag)) {
Log.e(TAG, "SettingSysData: ZR6016Tag");
SysSettingUtils.setBluetooth(mContext, 0);
}
SysSettingUtils.setSystemSetting(mContext, data);
}
}
HashSet<String> defaultPackages = new HashSet<String>() {{
this.add(BuildConfig.APPLICATION_ID);
this.add(PackageNames.DEVICE_INFO);
this.add(PackageNames.APPSTORE);
this.add("com.info.sn");
this.add("com.uiuios.jgy1");
this.add("com.uiuios.jgy2");
this.add("com.tt.ttutils");
this.add("com.aoleyun.browser");
this.add("com.uiui.browser");
this.add("com.android.uiuios");
this.add("com.aoleyun.os");
this.add("com.aoleyun.audos");
this.add("com.aoleyunos.dop");
this.add("com.aoleyunos.dop1");
this.add("com.aoleyunos.dop2");
this.add("com.aoleyunos.dop3");
this.add("com.aoleyunos.dop4");
this.add("com.aoleyunos.dop5");
this.add("com.aoleyunos.dop6");
this.add("com.aoleyunos.dop7");
this.add("com.aoleyunos.dop8");
this.add("com.aoleyunos.dop9");
this.add("com.aoleyunos.dop10");
this.add("com.schoolos.cmcc");
this.add("com.aoleyunos.natuer");
this.add("com.aoleyun.info");
this.add("com.calculator.uiui");
this.add("com.notepad.uiui");
this.add("com.calendar.uiui");
this.add("com.alarmclock.uiui");
// this.add("com.uiui.videoplayer");
this.add("com.ygyb.yischool");
this.add("com.books.wisdom");
this.add("com.qi.airoom");
this.add("com.qi.AiStudyRoom");
this.add("com.eusoft.eudic");
this.add("com.fenbi.android.solar");
this.add("com.eduyun.app.factory.ykt");
this.add("com.yaerxing.fkst");
this.add("com.jxw.usagedate");
}};
private Set<String> getWhitePkgList() {
HashSet<String> pkgSet = new HashSet<>(defaultPackages);
pkgSet.addAll(showAppList);
pkgSet.addAll(ApkUtils.desktopAPP);
pkgSet.addAll(ApkUtils.aoleyunAPP);
pkgSet.addAll(ApkUtils.mJxwApp);
if (G128T_TAG.equals(BuildConfig.platform)) {
pkgSet.add("com.dmjc.xinhuo");
}
if ("K101".equals(Build.MODEL) || "AS001".equals(Build.MODEL)) {
pkgSet.addAll(ApkUtils.aihuaApp);
pkgSet.addAll(aihuaAppList);
}
if ("D1".equals(Build.MODEL)) {
pkgSet.addAll(ApkUtils.dongwa);
}
if ("G23".equals(Build.MODEL)) {
pkgSet.addAll(ApkUtils.zhengwu);
}
if (JgyUtils.getInstance().checkAppPlatform() == JgyUtils.G11Platform) {
pkgSet.addAll(ApkUtils.G11Pkgs);
}
if (JgyUtils.getInstance().checkAppPlatform() == JgyUtils.YXPD1Platform) {
pkgSet.add("com.tencent.wemeet.app");
}
if (JgyUtils.getInstance().checkAppPlatform() == JgyUtils.G10PPlatform) {
pkgSet.add("com.gaomuxuexi34");
}
if (JgyUtils.C2Tag.equalsIgnoreCase(JgyUtils.getInstance().getAppPlatform())) {
pkgSet.remove("com.tencent.mm");
}
return pkgSet;
}
@SuppressLint("NewApi")
public void writeAppPackageList(List<String> pkgs) {
if (isUnlocked(mContext)) {
addAppInstallWhiteList(new ArrayList<>());
setAppRestriction(0);
return;
}
ApkUtils.addShortcut(mContext);
HashSet<String> pkgSet = new HashSet<>(defaultPackages);
if (BuildConfig.DEBUG) {
pkgSet.add("com.reqable.android");
pkgSet.add("com.ttstd.codetest1");
}
pkgSet.addAll(pkgs);
pkgSet.addAll(getWhitePkgList());
pkgSet.removeIf(TextUtils::isEmpty);
if (JgyUtils.isAllWinnerDevice()) {
AllwinnerCubeMdmManager.getInstance().setInstallPackageWhiteList(new ArrayList<>(pkgSet));
}
String aole_app_forbid = String.join(",", pkgSet);
Log.e(TAG, "writeAppPackageList: " + aole_app_forbid);
boolean b = Settings.System.putString(crv, CommonConfig.AOLE_ACTION_APP_FORBID, aole_app_forbid);
setAppRestriction(2);
addAppInstallWhiteList(new ArrayList<>(pkgSet));
Log.e("writeAppPackageList: ", "aole_app_forbid: " + b + " " + Settings.System.getString(crv, CommonConfig.AOLE_ACTION_APP_FORBID));
}
public void writeAppPackageList() {
if (isUnlocked(mContext)) {
addAppInstallWhiteList(new ArrayList<>());
setAppRestriction(0);
return;
}
HashSet<String> pkgSet = new HashSet<>(defaultPackages);
if (BuildConfig.DEBUG) {
pkgSet.add("com.reqable.android");
pkgSet.add("com.ttstd.codetest1");
}
pkgSet.addAll(getWhitePkgList());
pkgSet.removeIf(TextUtils::isEmpty);
if (JgyUtils.isAllWinnerDevice()) {
AllwinnerCubeMdmManager.getInstance().setInstallPackageWhiteList(new ArrayList<>(pkgSet));
}
String aole_app_forbid = String.join(",", pkgSet);
Log.e(TAG, "writeAppPackageList: " + aole_app_forbid);
Settings.System.putString(crv, CommonConfig.AOLE_ACTION_APP_FORBID, aole_app_forbid);
}
public void checkForceDownload() {
// String jsonString = cacheHelper.getAsString(UrlAddress.GET_FORCE_INSTALL_LIST);
// //为 "" 是已经请求成功的
// if (jsonString == null) {
// NetInterfaceManager.getInstance().getForceDownload();
// } else {
// Gson gson = new Gson();
// Type listType = new TypeToken<List<ForceDownloadData>>() {
// }.getType();
// List<ForceDownloadData> forceDownloadData = gson.fromJson(jsonString, listType);
// if (forceDownloadData != null) {
// JgyUtils.getInstance().forceDownload(forceDownloadData);
// }
// }
NetInterfaceManager.getInstance().getForceDownload();
}
public void forceDownload(List<ForceDownloadData> data) {
if (data == null || data.size() <= 0) {
return;
}
Log.e(TAG, "forceDownload: data size = " + data.size());
List<String> list = new ArrayList<>();
for (int i = 0; i < data.size(); i++) {
ForceDownloadData forceDownloadData = data.get(i);
String app_name = forceDownloadData.getApp_name();
String app_package = forceDownloadData.getApp_package();
String app_url = forceDownloadData.getApp_url();
String app_id = forceDownloadData.getApp_id();
String app_md5 = forceDownloadData.getApp_md5();
JsonObject jsonObject = new JsonObject();
jsonObject.addProperty("app_name", app_name);
jsonObject.addProperty("app_package", app_package);
jsonObject.addProperty("app_id", app_id);
jsonObject.addProperty("MD5", app_md5);
long app_version_code = forceDownloadData.getApp_version_code();
Log.e("forceDownload", "packageName=" + app_package + ",URL= " + app_url + ",app_version_code=" + app_version_code);
if (BuildConfig.APPLICATION_ID.equals(data.get(i).getApp_package())) {
continue;//为自身的跳过下载
}
if (!list.contains(app_package)) {
list.add(app_package);
}
PackageManager pm = mContext.getPackageManager();
PackageInfo packageInfo = null;
try {
packageInfo = pm.getPackageInfo(app_package, 0);
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
Log.e("forceDownload", "forceDownload=" + e.getMessage());
}
if (packageInfo != null) {
long appVersionCode;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
appVersionCode = packageInfo.getLongVersionCode();
} else {
appVersionCode = packageInfo.versionCode;
}
if (app_version_code > appVersionCode) {
Log.e("forceDownload ", "download URL " + app_url);
Utils.ariaDownload(mContext, app_url, jsonObject);
} else {
Log.e(TAG, "forceDownload: installed skip");
}
} else {
Log.e("forceDownload ", "download URL " + app_url);
Utils.ariaDownload(mContext, app_url, jsonObject);
}
startServices(mContext);
}
}
/**
* @param jsonObject 安装应用
*/
public void installAPK(JsonObject jsonObject) {
String url = jsonObject.get("url").getAsString();
int versionCode = jsonObject.get("version_code").getAsInt();
String packageName = jsonObject.get("package").getAsString();
String app_name = jsonObject.get("app_name").getAsString();
String app_md5 = jsonObject.get("app_md5").getAsString();
// String app_id = jsonObject.get("app_id").getAsString();
JsonObject object = new JsonObject();
object.addProperty("app_name", app_name);
object.addProperty("app_package", packageName);
object.addProperty("MD5", app_md5);
// object.put("app_id", app_id);
PackageManager pm = mContext.getPackageManager();
PackageInfo packageInfo = null;
try {
packageInfo = pm.getPackageInfo(packageName, 0);
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
if (packageInfo == null || packageInfo.versionCode < versionCode) {
Utils.ariaDownload(mContext, url, object);
} else {
Log.e("installAPK", app_name + ": 已是最新版本");
}
}
/**
* @param jsonObject
*/
public void installTestAPK(JsonObject jsonObject) {
String url = jsonObject.get("app_url").getAsString();
int versionCode = jsonObject.get("app_version_code").getAsInt();
String packageName = jsonObject.get("app_package").getAsString();
String app_name = jsonObject.get("app_name").getAsString();
// String app_id = jsonObject.get("app_id").getAsString();
JsonObject object = new JsonObject();
object.addProperty("app_name", app_name);
object.addProperty("app_package", packageName);
// object.put("app_id", app_id);
PackageManager pm = mContext.getPackageManager();
PackageInfo packageInfo = null;
try {
packageInfo = pm.getPackageInfo(packageName, 0);
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
if (packageInfo == null || packageInfo.versionCode < versionCode) {
Utils.ariaDownload(mContext, url, object);
} else {
Log.e("installTestAPK", "TestAPK: " + "无更新");
}
}
/**
* 安装灰度测试app
*
* @param dataList
*/
public void installTestAPK(List<ForceDownloadData> dataList) {
for (ForceDownloadData data : dataList) {
String url = data.getApp_url();
long versionCode = data.getApp_version_code();
String packageName = data.getApp_package();
String app_name = data.getApp_name();
String app_md5 = data.getApp_md5();
// String app_id = jsonObject.get("app_id").getAsString();
JsonObject object = new JsonObject();
object.addProperty("app_name", app_name);
object.addProperty("app_package", packageName);
object.addProperty("MD5", app_md5);
// object.put("app_id", app_id);
PackageManager pm = mContext.getPackageManager();
PackageInfo packageInfo = null;
try {
packageInfo = pm.getPackageInfo(packageName, 0);
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
if (packageInfo == null || packageInfo.versionCode < versionCode) {
Utils.ariaDownload(mContext, url, object);
} else {
Log.e("installTestAPK", "TestAPK: " + packageName + "\t无更新");
}
}
}
public void installDesktop(JsonObject jsonObject) {
try {
String app_name = jsonObject.get("app_name").getAsString();
String app_url = jsonObject.get("app_url").getAsString();
String app_package = jsonObject.get("app_package").getAsString();
int app_version_code = jsonObject.get("app_version_code").getAsInt();
mMMKV.encode(CommonConfig.DEFAULT_DESKTOP_PACKAGE, app_package);
Set<String> desktop = new HashSet<>(ApkUtils.desktopAPP);
desktop.remove(app_package);
for (String s : desktop) {
ApkUtils.UninstallAPP(mContext, s);
}
PackageInfo info = null;
PackageManager packageManager = mContext.getPackageManager();
if (null != packageManager) {
try {
info = packageManager.getPackageInfo(app_package, 0);
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
Log.e("fht", "installDesktop: " + e.getMessage());
}
if (null != info) {
packageManager.setApplicationEnabledSetting(app_package, PackageManager.COMPONENT_ENABLED_STATE_DEFAULT, 0);
long versionCode;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
versionCode = info.getLongVersionCode();
} else {
versionCode = info.versionCode;
}
if (app_version_code > versionCode) {
Utils.ariaDownload(mContext, app_url, jsonObject);
}
} else {
Utils.ariaDownload(mContext, app_url, jsonObject);
}
}
} catch (Exception e) {
Log.e(TAG, "installDesktop: " + e.getMessage());
}
}
//删除用户除了在应用市场的其他应用
public void deleteOtherApp() {
Log.e(TAG, "deleteOtherApp: " + Build.MODEL);
if ("K106".equalsIgnoreCase(Build.MODEL)
|| "G10".equalsIgnoreCase(Build.MODEL)
|| "G10P".equalsIgnoreCase(Build.MODEL)
|| "G10R".equalsIgnoreCase(Build.MODEL)
) {
return;
}
if (isUnlocked(mContext)) {
return;
}
int aihuaUnlock = Settings.System.getInt(crv, CommonConfig.AIHUA_UNLOCK, 0);
if (aihuaUnlock == 1) {
Log.e(TAG, "deleteOtherApp: aihuaUnlock");
return;
}
int is_app_install = Settings.System.getInt(crv, CommonConfig.AOLE_APP_ALLOW_INSTALL, 0);
if (is_app_install == 1) {
Log.e(TAG, "deleteOtherApp: is_app_install = 1");
return;
}
Log.e(TAG, "deleteOtherApp: " + "start");
Set<String> allAppWhiteSet = mMMKV.decodeStringSet(CommonConfig.AOLE_ALL_APP_WHITE_LIST_KEY, new HashSet<>());
Log.e("deleteOtherApp", "allAppWhiteSet:" + allAppWhiteSet);
List<String> resulWhitetList = new ArrayList<>(defaultPackages);
resulWhitetList.addAll(allAppWhiteSet);
//获取可以被安装的包名
String aole_app_forbid = Settings.System.getString(crv, CommonConfig.AOLE_ACTION_APP_FORBID);
Log.e("deleteOtherApp", "aole_app_forbid:" + aole_app_forbid);
if (!TextUtils.isEmpty(aole_app_forbid)) {
List<String> result_forbid = new ArrayList<>(Arrays.asList(aole_app_forbid.split(",")));
resulWhitetList.addAll(result_forbid);
}
List<String> installedPackageList = ApkUtils.queryFilterAppInfo(mContext);
Log.e("deleteOtherApp", "installedPackageList:" + installedPackageList.toString());
if (resulWhitetList.size() > 0) {
for (final String packageName : installedPackageList) {
if (ApkUtils.isSystemApp(mContext, packageName)) {
Log.e("deleteOtherApp", "is systemApp:" + packageName);
continue;
}
if (ApkUtils.desktopAPP.contains(packageName)) {
continue;
}
if (ApkUtils.aoleyunAPP.contains(packageName)) {
continue;
}
if (ApkUtils.canremove_systemapp.contains(packageName)) {
continue;
}
if (ApkUtils.aihuaApp.contains(packageName)) {
continue;
}
if (ApkUtils.mJxwApp.contains(packageName)) {
continue;
}
if (PackageNames.DEVICE_INFO.equals(packageName) || PackageNames.APPSTORE.equals(packageName)
) {
continue;
}
if (!resulWhitetList.contains(packageName)) {
ApkUtils.UninstallAPP(mContext, packageName);
Log.e("deleteOtherApp", "uninstall apkName:" + packageName);
}
}
}
Log.e(TAG, "deleteOtherApp: " + "end");
}
HashSet<String> showAppList = new HashSet<String>() {{
this.add("com.android.calendar");
this.add("com.android.calendar2");
this.add("com.android.contacts");
this.add("com.android.deskclock");
this.add("com.android.camera2");
this.add("com.android.camera");
this.add("com.mediatek.camera");
this.add("com.android.messaging");
this.add("com.android.music");
this.add("com.android.settings");
// this.add("org.chromium.browser");
this.add("com.android.calculator2");
this.add("com.android.dialer");
this.add("com.android.documentsui");
this.add("com.android.soundrecorder");
this.add("com.android.gallery3d");
this.add("com.sprd.sprdnote");
this.add("com.aoleyun.appstore");
this.add("com.aoleyun.info");
this.add("com.aoleyun.sn");
this.add("com.aoleyun.browser");
this.add("com.aoleyun.os");
this.add("com.aoleyunos.dop");
this.add("com.aoleyunos.dop1");
this.add("com.aoleyunos.dop2");
this.add("com.aoleyunos.dop3");
this.add("com.aoleyunos.dop4");
this.add("com.aoleyunos.dop5");
this.add("com.aoleyunos.dop6");
this.add("com.aoleyunos.dop7");
this.add("com.aoleyunos.dop8");
this.add("com.aoleyunos.dop9");
this.add("com.aoleyunos.dop10");
this.add("com.schoolos.cmcc");
this.add("com.aoleyunos.natuer");
}};
HashSet<String> aihuaAppList = new HashSet<String>() {{
//aihua
this.add("com.android.mms");
this.add("com.android.fmradio");
this.add("com.mediatek.filemanager");
this.add("com.teclast.update");
this.add("com.google.android.apps.nbu.files");
this.add("com.tencent.wework");
this.add("com.tencent.mm");
this.add("cn.wps.moffice_eng");
this.add("com.baidu.BaiduMap");
this.add("com.tongyi.aistudent");
}};
/**
* 隐藏系统所有应用
* 除了设置,图库、视频、设置、文件管理器、通话、短信、日历、时钟、计算器
*/
public void hideSystemAPP() {
PackageManager pm = mContext.getPackageManager();
try {
pm.setApplicationEnabledSetting("com.yxxmk.uiui", PackageManager.COMPONENT_ENABLED_STATE_DEFAULT, 0);
} catch (Exception e) {
Log.e(TAG, "hideSystemAPP: " + e.getMessage());
}
Intent filterIntent = new Intent(Intent.ACTION_MAIN, null);
//Intent.CATEGORY_LAUNCHER主要的过滤条件
filterIntent.addCategory(Intent.CATEGORY_LAUNCHER);
List<ResolveInfo> apps = pm.queryIntentActivities(filterIntent, 0);
for (ResolveInfo resolveInfo : apps) {
String pkg = resolveInfo.activityInfo.packageName;
Log.e(TAG, "hideSystemAPP: " + pkg);
if (ApkUtils.isSystemApp(mContext, pkg)) {
pm.setApplicationEnabledSetting(pkg, PackageManager.COMPONENT_ENABLED_STATE_DEFAULT, 0);
} else {
continue;
}
// if (!getWhitePkgList().contains(pkg)) {
// pm.setApplicationEnabledSetting(pkg, PackageManager.COMPONENT_ENABLED_STATE_DISABLED, 0);
// Log.e(TAG, "hideSystemAPP: " + "disable: " + pkg);
// } else {
// pm.setApplicationEnabledSetting(pkg, PackageManager.COMPONENT_ENABLED_STATE_DEFAULT, 0);
// Log.e(TAG, "hideSystemAPP: " + "enable: " + pkg);
// }
}
}
public void hideApp(String pkg) {
Log.e(TAG, "hideApp: " + pkg);
PackageManager pm = mContext.getPackageManager();
try {
pm.setApplicationEnabledSetting(pkg, PackageManager.COMPONENT_ENABLED_STATE_DISABLED, 0);
} catch (Exception e) {
Log.e(TAG, "hideApp: " + e.getMessage());
}
}
public void showApp(String pkg) {
Log.e(TAG, "showApp: " + pkg);
PackageManager pm = mContext.getPackageManager();
try {
pm.setApplicationEnabledSetting(pkg, PackageManager.COMPONENT_ENABLED_STATE_DEFAULT, 0);
} catch (Exception e) {
Log.e(TAG, "hideApp: " + e.getMessage());
}
}
/**
* 从Manifest中获取meta-data值
* https://blog.csdn.net/yue_233/article/details/91453451
*
* @return
*/
public String getStringMetaData() {
ApplicationInfo appInfo = null;
try {
appInfo = mContext.getPackageManager().getApplicationInfo(mContext.getPackageName(), PackageManager.GET_META_DATA);
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
String value = appInfo.metaData.getString("CHANNEL_VALUE");
return value;
}
public void checkBootFile(String url, String MD5) {
String urlFileName = Utils.getFileNamefromURL(url);
File bootFile = new File(JgyUtils.getInstance().getDownLoadPath() + urlFileName);
Log.e(TAG, "checkBootFile: bootFile file path=" + bootFile.getAbsolutePath());
Log.e(TAG, "checkBootFile: bootFile exists=" + bootFile.exists() + " isFile=" + bootFile.isFile());
if (bootFile.exists() && bootFile.isFile()) {
String oldMd5 = FileUtils.getFileMD5ToString(bootFile);
if (!TextUtils.isEmpty(oldMd5) && oldMd5.equalsIgnoreCase(MD5)) {
Log.e(TAG, "checkBootFile: Bootanimation file exists");
setBootanimationG10J(bootFile.getAbsolutePath());
} else {
JsonObject jsonObject = new JsonObject();
jsonObject.addProperty("MD5", MD5);
jsonObject.addProperty("app_name", "开机动画");
jsonObject.addProperty("app_package", "开机动画");
Utils.ariaDownload(mContext, url, jsonObject);
Log.e(TAG, "checkBootFile: " + "download file");
}
} else {
JsonObject jsonObject = new JsonObject();
jsonObject.addProperty("MD5", MD5);
jsonObject.addProperty("app_name", "开机动画");
jsonObject.addProperty("app_package", "开机动画");
Utils.ariaDownload(mContext, url, jsonObject);
}
}
// @Deprecated
// private static final String BOOTANIMATION_PATH = "/data/local/qchmedia/bootanimation.zip";
//
// @Deprecated
// public void setBootanimation(String filePath) {
// File systemFile = new File(BOOTANIMATION_PATH);
// if (!systemFile.exists()) {
// systemFile.getParentFile().mkdirs();
// File file = systemFile.getParentFile();
// Log.e(TAG, "setBootanimation: " + file.getAbsolutePath());
// try {
// systemFile.createNewFile();
// } catch (IOException e) {
// e.printStackTrace();
// Log.e("setBootanimation: ", "createNewFile: " + e.getMessage());
// }
// }
// File newFile = new File(filePath);
// if (systemFile.exists() && systemFile.isFile()) {
// String systemMD5 = FileUtils.getFileMD5ToString(systemFile);
// String newMD5 = FileUtils.getFileMD5ToString(newFile);
// if (systemMD5.equals(newMD5)) {
// Log.e(TAG, "setBootanimation: 文件一致");
// } else {
// Path path = Paths.get(newFile.getAbsolutePath());
// try {
// Files.copy(path, new FileOutputStream(systemFile));
// Log.e(TAG, "setBootanimation: 设置新开机动画");
// } catch (IOException e) {
// Log.e(TAG, "setBootanimation: IOException: " + e.getMessage());
// e.printStackTrace();
// }
// }
// } else {
// File file = new File(BOOTANIMATION_PATH);
// Log.e(TAG, "setBootanimation: " + file.getParentFile().getAbsolutePath());
// Log.e(TAG, "setBootanimation: " + "Is a directory = " + file.isDirectory());
// if (!file.getParentFile().delete()) {
// Log.e(TAG, "setBootanimation: " + "系统动画删除失败");
// }
// Path path = Paths.get(newFile.getAbsolutePath());
// try {
// Files.copy(path, new FileOutputStream(systemFile));
// copy(systemFile.getAbsolutePath(), newFile.getAbsolutePath());
// Log.e(TAG, "setBootanimation: 设置新开机动画");
// } catch (IOException e) {
// Log.e(TAG, "setBootanimation: IOException: " + e.getMessage());
// e.printStackTrace();
// }
// }
// }
private static final String BOOTANIMATION_PATH_G10J = "/storage/emulated/0/Download/bootanimation.zip";
public void setBootanimationG10J(String filePath) {
File newFile = new File(filePath);
if (!newFile.exists()) {
Log.e(TAG, "setBootanimationG10J: file not exists");
return;
}
File file = new File(BOOTANIMATION_PATH_G10J);
String oldMD5 = FileUtils.getFileMD5ToString(file);
String newMD5 = FileUtils.getFileMD5ToString(newFile);
if (oldMD5.equals(newMD5)) {
Log.e(TAG, "setBootanimationG10J: file md5 is the same");
} else {
if (file.exists() && !file.isDirectory()) {
if (file.delete()) {
Log.e(TAG, "setBootanimationG10J: delete old Bootanimation file successful");
} else {
Toaster.show("删除动画文件失败");
}
}
if (FileUtils.copy(newFile, file)) {
Toaster.show("设置开机动画成功");
Log.e(TAG, "setBootanimationG10J: set Bootanimation successful");
} else {
Log.e(TAG, "setBootanimationG10J: set Bootanimation failed");
}
}
Intent intent = new Intent("com.hra.setBootanimation");
mContext.sendBroadcast(intent);
}
public void removeBootanimation() {
File systemFile;
// if (JgyUtils.getInstance().checkAppPlatform() == JgyUtils.MT8768Platform) {
systemFile = new File(BOOTANIMATION_PATH_G10J);
// } else {
// systemFile = new File(BOOTANIMATION_PATH);
// }
if (systemFile.exists()) {
if (systemFile.delete()) {
Log.e(TAG, "removeBootanimation: delete: " + "ture");
} else {
Log.e(TAG, "removeBootanimation: delete: " + "false");
}
}
// if (JgyUtils.getInstance().checkAppPlatform() == JgyUtils.MT8768Platform) {
Intent intent = new Intent("com.hra.setBootanimation");
mContext.sendBroadcast(intent);
// }
}
public void copy(String oldPath, String newPath) {
try {
int bytesum = 0;
int byteread = 0;
File oldfile = new File(oldPath);
if (oldfile.exists()) { //文件存在时
InputStream inStream = new FileInputStream(oldPath); //读入原文件
FileOutputStream fs = new FileOutputStream(newPath);
byte[] buffer = new byte[1444];
int length;
while ((byteread = inStream.read(buffer)) != -1) {
bytesum += byteread; //字节数文件大小
System.out.println(bytesum);
fs.write(buffer, 0, byteread);
}
inStream.close();
}
} catch (Exception e) {
Log.e(TAG, "setBootanimation: " + e.getMessage());
e.printStackTrace();
}
}
/**
* @param state 1打开 0关闭
*/
public void setDeveloperOptions(int state) {
Log.e(TAG, "setDeveloperOptions: state = " + state);
int oldStatu = Settings.System.getInt(crv, CommonConfig.AOLE_ACTION_DEVELOPER_OPTIONS, 0);
if (oldStatu == (state ^ 1)) {
Log.e(TAG, "setDeveloperOptions: oldStatu = " + oldStatu + " no changed");
}
if (MT8768Tag.equalsIgnoreCase(BuildConfig.platform)
|| G128T_TAG.equalsIgnoreCase(BuildConfig.platform)
) {
Settings.System.putInt(crv, CommonConfig.AOLE_ACTION_DEVELOPER_OPTIONS, state);
} else {
//这个需要反着来
Settings.System.putInt(crv, CommonConfig.AOLE_ACTION_DEVELOPER_OPTIONS, state ^ 1);
}
Log.e(TAG, "setDeveloperOptions: DEVELOPMENT_SETTINGS_ENABLED = " + Settings.Global.getInt(crv, Settings.Global.DEVELOPMENT_SETTINGS_ENABLED, 0));
Log.e(TAG, "setDeveloperOptions: ADB_ENABLED = " + Settings.Global.getInt(crv, Settings.Global.ADB_ENABLED, 0));
// if (!BuildConfig.DEBUG) {
if (Settings.Global.getInt(crv, Settings.Global.DEVELOPMENT_SETTINGS_ENABLED, 0) != state) {
Settings.Global.putInt(crv, Settings.Global.DEVELOPMENT_SETTINGS_ENABLED, state);
}
if (Settings.Global.getInt(crv, Settings.Global.ADB_ENABLED, 0) != state) {
Settings.Global.putInt(crv, Settings.Global.ADB_ENABLED, state);
}
// }
if (JgyUtils.isAllWinnerDevice()) {
AllwinnerCubeMdmManager.getInstance().setDeveloperEnable(state == 1);
}
}
private String chromium_pkg = "org.chromium.browser";
public void hookWebView() {
int sdkInt = Build.VERSION.SDK_INT;
if (!ApkUtils.isAvailable(mContext, chromium_pkg)) {
return;
}
try {
Class<?> factoryClass = Class.forName("android.webkit.WebViewFactory");
Field field = factoryClass.getDeclaredField("sProviderInstance");
field.setAccessible(true);
Object sProviderInstance = field.get(null);
if (sProviderInstance != null) {
Log.i(TAG, "sProviderInstance isn't null");
return;
}
Method getProviderClassMethod;
if (sdkInt > 22) {
getProviderClassMethod = factoryClass.getDeclaredMethod("getProviderClass");
} else if (sdkInt == 22) {
getProviderClassMethod = factoryClass.getDeclaredMethod("getFactoryClass");
} else {
Log.i(TAG, "Don't need to Hook WebView");
return;
}
getProviderClassMethod.setAccessible(true);
Class<?> factoryProviderClass = (Class<?>) getProviderClassMethod.invoke(factoryClass);
Class<?> delegateClass = Class.forName("android.webkit.WebViewDelegate");
Constructor<?> delegateConstructor = delegateClass.getDeclaredConstructor();
delegateConstructor.setAccessible(true);
if (sdkInt < 26) {//低于Android O版本
Constructor<?> providerConstructor = factoryProviderClass.getConstructor(delegateClass);
if (providerConstructor != null) {
providerConstructor.setAccessible(true);
sProviderInstance = providerConstructor.newInstance(delegateConstructor.newInstance());
}
} else {
Field chromiumMethodName = factoryClass.getDeclaredField("CHROMIUM_WEBVIEW_FACTORY_METHOD");
chromiumMethodName.setAccessible(true);
String chromiumMethodNameStr = (String) chromiumMethodName.get(null);
if (chromiumMethodNameStr == null) {
chromiumMethodNameStr = "create";
}
Method staticFactory = factoryProviderClass.getMethod(chromiumMethodNameStr, delegateClass);
if (staticFactory != null) {
sProviderInstance = staticFactory.invoke(null, delegateConstructor.newInstance());
}
}
if (sProviderInstance != null) {
field.set("sProviderInstance", sProviderInstance);
Log.i(TAG, "Hook success!");
} else {
Log.i(TAG, "Hook failed!");
}
} catch (Throwable e) {
Log.w(TAG, "hookWebView: " + e.getMessage());
}
}
public void deleteScreenshots() {
Log.e("File", "deleteScreenshots");
String path = mContext.getExternalFilesDir("db").getAbsolutePath();
File file = new File(path);
File[] files = file.listFiles();
for (File f : files) {
if (f.isFile()) {
Log.e("File", f.getAbsolutePath());
f.delete();
}
}
}
public void killPackage(String pkg) {
Log.e(TAG, "killPackage: " + pkg);
ActivityManager manager = (ActivityManager) mContext.getSystemService(Context.ACTIVITY_SERVICE);
manager.killBackgroundProcesses(pkg);
CmdUtil.execute("am force-stop " + pkg);
}
public void KillOTA() {
ActivityManager manager = (ActivityManager) mContext.getSystemService(Context.ACTIVITY_SERVICE);
manager.killBackgroundProcesses("com.adups.fota");
CmdUtil.execute("am force-stop " + "com.adups.fota");
}
public void openOTA() {
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
/*知道要跳转应用的包命与目标Activity*/
ComponentName componentName = new ComponentName("com.adups.fota", "com.adups.fota.GoogleOtaClient");
intent.setComponent(componentName);
try {
mContext.startActivity(intent);
} catch (Exception e) {
Log.e(TAG, "openOTA: " + e.getMessage());
Toaster.show("打开失败");
}
}
public void openRomOta() {
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
/*知道要跳转应用的包命与目标Activity*/
switch (JgyUtils.getInstance().checkAppPlatform()) {
default:
case JgyUtils.YXPD1Platform:
intent.setComponent(new ComponentName("com.adups.fota", "com.adups.fota.GoogleOtaClient"));
break;
case JgyUtils.C2Platform:
intent.setComponent(new ComponentName("com.jintaiyi.update", "com.jintaiyi.update.activity.NoVersionActivity"));
break;
case JgyUtils.ZhanruiPlatform:
intent.setComponent(new ComponentName("com.cube.update", "com.cube.update.GoogleOtaClient"));
break;
case JgyUtils.MT6765Platform:
intent.setComponent(new ComponentName("com.waterworld.update", "com.waterworld.update.GoogleOtaClient"));
break;
}
try {
mContext.startActivity(intent);
} catch (Exception e) {
Log.e(TAG, "openRomOta: " + e.getMessage());
Toaster.show("打开失败");
}
}
public void openLauncher() {
Log.e(TAG, "openLauncher: ");
killPackage("com.android.launcher3");
Intent intent = new Intent();
// 为Intent设置Action、Category属性
intent.setAction(Intent.ACTION_MAIN);// "android.intent.action.MAIN"
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.addCategory(Intent.CATEGORY_HOME); //"android.intent.category.HOME"
mContext.startActivity(intent);
}
@Deprecated
public void cleanLauncherCache() {
Log.e(TAG, "cleanLauncherCache: Start");
int cleaned = (int) SPUtils.get(mContext, "fristcleanLauncherCache", 0);
if (cleaned == 0) {
try {
new CacheUtils().cleanApplicationUserData(mContext, "com.android.launcher3");
SPUtils.put(mContext, "fristcleanLauncherCache", 1);
Log.e(TAG, "cleanLauncherCache: end");
} catch (Exception e) {
e.printStackTrace();
Log.e(TAG, "cleanLauncherCache: " + e.getMessage());
}
}
}
@RequiresApi(api = Build.VERSION_CODES.M)
public void cleanBackgroundMemory() {
ActivityManager manager = (ActivityManager) mContext.getSystemService(Context.ACTIVITY_SERVICE);
for (ActivityManager.RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)) {
String pkg = service.service.getPackageName();
Log.i("cleanBackgroundMemory", pkg);
if (ApkUtils.isSystemApp(mContext, pkg)) continue;
if (ApkUtils.desktopAPP.contains(pkg) || ApkUtils.aoleyunAPP.contains(pkg)) {
continue;
}
manager.forceStopPackage(service.service.getPackageName());
Log.e("cleanBackgroundMemory", "kill :" + pkg);
}
}
public void killBackgroundProcesses(String processName) {
gotoLauncher();
// mIsScanning = true;
removeTask(processName);
ActivityManager activityManager = (ActivityManager) mContext.getSystemService(Context.ACTIVITY_SERVICE);
String packageName = null;
try {
if (processName.indexOf(":") == -1) {
packageName = processName;
} else {
packageName = processName.split(":")[0];
}
activityManager.killBackgroundProcesses(packageName);
//
Method forceStopPackage = activityManager.getClass()
.getDeclaredMethod("forceStopPackage", String.class);
forceStopPackage.setAccessible(true);
forceStopPackage.invoke(activityManager, packageName);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 清除所有最近记录
*/
// public void removeAllTask() {
// List<ActivityManager.RecentTaskInfo> list = getRecentTasks(ActivityManager.getMaxRecentTasksStatic(), getCurrentUserId());
//
// for (ActivityManager.RecentTaskInfo info : list) {
// if (info.realActivity != null) {
// Log.e(TAG, "removeAllTask: " + info.realActivity.getPackageName());
// //排除自身
// if (BuildConfig.APPLICATION_ID.equals(info.realActivity.getPackageName())) {
// continue;
// }
// }
// try {
// ActivityManagerNative.getDefault().removeTask(info.id);
// } catch (RemoteException e) {
// e.printStackTrace();
// Log.e(TAG, "removeAllTask: " + e.getMessage());
// }
// }
// }
public void removeAllTask() {
List<ActivityManager.RecentTaskInfo> list = getRecentTasks(ActivityManager.getMaxRecentTasksStatic(), getCurrentUserId());
for (ActivityManager.RecentTaskInfo info : list) {
try {
ActivityManagerNative.getDefault().removeTask(info.id);
Log.e(TAG, "removeAllTask: " + info.id);
} catch (RemoteException e) {
e.printStackTrace();
Log.e(TAG, "removeTask: " + e.getMessage());
} catch (NullPointerException e) {
Log.e(TAG, "removeTask: " + e.getMessage());
}
}
}
public void removeTask(String packageName) {
if (Build.VERSION.SDK_INT > Build.VERSION_CODES.P) {
List<ActivityManager.RecentTaskInfo> list = getRecentTasks(ActivityManager.getMaxRecentTasksStatic(), getCurrentUserId());
HashMap<String, Integer> taskMap = new HashMap<>();
for (ActivityManager.RecentTaskInfo info : list) {
taskMap.put(info.realActivity.getPackageName(), info.id);
}
try {
ActivityManagerNative.getDefault().removeTask(taskMap.get(packageName));
} catch (RemoteException e) {
e.printStackTrace();
Log.e(TAG, "removeTask: " + e.getMessage());
} catch (NullPointerException e) {
Log.e(TAG, "removeTask: " + e.getMessage());
}
} else {
ActivityManager activityManager = (ActivityManager) mContext.getSystemService(Context.ACTIVITY_SERVICE);
// TODO: 2022/10/25
}
}
/**
* 如果界面正在最近任务列表有些app可能不会被清理
*/
public void gotoLauncher() {
Intent i = new Intent(Intent.ACTION_MAIN);
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); //android123提示如果是服务里调用必须加入new task标识
i.addCategory(Intent.CATEGORY_HOME);
mContext.startActivity(i);
}
/**
* @return a list of the recents tasks.
* 获取近期任务列表
*/
public List<ActivityManager.RecentTaskInfo> getRecentTasks(int numTasks, int userId) {
try {
return ActivityTaskManager.getService().getRecentTasks(numTasks,
RECENT_IGNORE_UNAVAILABLE, userId).getList();
} catch (RemoteException e) {
Log.e(TAG, "Failed to get recent tasks " + e);
return new ArrayList<>();
}
}
/**
* @return the current user's id.
* 获取userId
*/
public int getCurrentUserId() {
UserInfo ui;
try {
ui = ActivityManager.getService().getCurrentUser();
return ui != null ? ui.id : 0;
} catch (RemoteException e) {
throw e.rethrowFromSystemServer();
}
}
public static String getPrefixHttpURL(String url) {
if (url.startsWith("http://")) {
return url;
} else if (url.startsWith("https://")) {
return url.replace("https://", "http://");
} else {
return "http://" + url;
}
}
public static String getPrefixHttpsURL(String url) {
if (url.startsWith("https://")) {
return url;
} else if (url.startsWith("http://")) {
return url.replace("http://", "https://");
} else {
return "https://" + url;
}
}
public Bitmap createQRImage(String content, int widthPix, int heightPix) {
try {
// if (content == null || "".equals(content)) {
// return false;
// }
//配置参数
Map<EncodeHintType, Object> hints = new HashMap<>();
hints.put(EncodeHintType.CHARACTER_SET, "utf-8");
//容错级别
hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H);
//设置空白边距的宽度
hints.put(EncodeHintType.MARGIN, 1); //default is 4
// 图像数据转换,使用了矩阵转换
BitMatrix bitMatrix = null;
try {
bitMatrix = new QRCodeWriter().encode(content, BarcodeFormat.QR_CODE, widthPix,
heightPix, hints);
} catch (WriterException e) {
e.printStackTrace();
}
int[] pixels = new int[widthPix * heightPix];
// 下面这里按照二维码的算法,逐个生成二维码的图片,
// 两个for循环是图片横列扫描的结果
for (int y = 0; y < heightPix; y++) {
for (int x = 0; x < widthPix; x++) {
if (bitMatrix.get(x, y)) {
pixels[y * widthPix + x] = 0xff000000;
} else {
pixels[y * widthPix + x] = 0xffffffff;
}
}
}
// 生成二维码图片的格式使用ARGB_8888
Bitmap bitmap = Bitmap.createBitmap(widthPix, heightPix, Bitmap.Config.ARGB_8888);
bitmap.setPixels(pixels, 0, widthPix, 0, 0, widthPix, heightPix);
//
// if (logoBm != null) {
// bitmap = addLogo(bitmap, logoBm);
// }
//必须使用compress方法将bitmap保存到文件中再进行读取。直接返回的bitmap是没有任何压缩的
// 内存消耗巨大!
return bitmap;
// return bitmap != null && bitmap.compress(Bitmap.CompressFormat.JPEG, 100);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
public String getIPAddress() {
ConnectivityManager mConnectivityManager = (ConnectivityManager) mContext.getSystemService(Context.CONNECTIVITY_SERVICE);//获取系统的连接服务
NetworkInfo info = mConnectivityManager.getActiveNetworkInfo();
if (info != null && info.isConnected()) {
if ((info.getType() == ConnectivityManager.TYPE_MOBILE) || (info.getType() == ConnectivityManager.TYPE_WIFI)) {//当前使用2G/3G/4G网络
try {
for (Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements(); ) {
NetworkInterface intf = en.nextElement();
for (Enumeration<InetAddress> enumIpAddr = intf.getInetAddresses(); enumIpAddr.hasMoreElements(); ) {
InetAddress inetAddress = enumIpAddr.nextElement();
if (!inetAddress.isLoopbackAddress() && inetAddress instanceof Inet4Address) {
return inetAddress.getHostAddress();
}
}
}
} catch (SocketException e) {
e.printStackTrace();
}
}
} else { //当前无网络连接,请在设置中打开网络
return "未连接到网络";
}
return "未获取到IP";
}
private static long lastTime;
public static void startServices(Context context) {
Log.e(TAG, "startServices: " + context.getClass().getSimpleName());
if (System.currentTimeMillis() - lastTime < 10 * 60 * 1000) {
Log.e(TAG, "startServices: " + "lastTime: " + lastTime);
} else {
lastTime = System.currentTimeMillis();
context.startService(new Intent(context, MainService.class));
context.startService(new Intent(context, StepService.class));
context.startService(new Intent(context, GuardService.class));
// context.startService(new Intent(context, LogcatService.class));
}
}
private String Launcher3 = "com.android.launcher3";
private String Launcher3Class = "com.android.launcher3.Launcher";
private String Launcher3QuickstepClass = "com.android.launcher3.uioverrides.QuickstepLauncher";
private String AoleyunOs = "com.aoleyun.os";
private String AoleyunOsClass = "com.aoleyun.os.Launcher";
private String AiUDuOs = "com.aoleyun.audos";
private String AiUDuOsClass = "com.aoleyun.audos.Launcher";
private String schoolosOs = "com.schoolos.cmcc";
private String schoolosClass = "com.schoolos.cmcc.activity.main.MainActivity";
private String AlyOs = "com.aly.os";
private String AlyOsClass = "com.aly.os.Launcher";
public void setDefaultLauncher(Context context, String defPackageName, String defClassName) {
try {
if (!TextUtils.isEmpty(defPackageName) && !TextUtils.isEmpty(defClassName)) {
IntentFilter filter = new IntentFilter();
filter.addAction("android.intent.action.MAIN");
filter.addCategory("android.intent.category.HOME");
filter.addCategory("android.intent.category.DEFAULT");
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
// 返回给定条件的所有ResolveInfo对象(本质上是Activity)
List<ResolveInfo> list = context.getPackageManager().queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY);
int bestMatch = 0;
final int size = list.size();
ComponentName[] set = new ComponentName[size];
for (int i = 0; i < size; i++) {
ResolveInfo ri = list.get(i);
set[i] = new ComponentName(ri.activityInfo.packageName, ri.activityInfo.name);
if (ri.match > bestMatch) {
bestMatch = ri.match;
}
}
ComponentName preActivity = new ComponentName(defPackageName, defClassName);
context.getPackageManager().addPreferredActivity(filter, bestMatch, set, preActivity);
}
} catch (java.lang.SecurityException e) {
e.printStackTrace();
Log.e(TAG, "setDefaultLauncher: " + e.getMessage());
}
}
public void setDefaultLauncher2(Context context, String pkg, String cls) {
PackageManager pm = context.getPackageManager();
ComponentName component = new ComponentName(pkg, cls);
// 创建 IntentFilter
IntentFilter filter = new IntentFilter(Intent.ACTION_MAIN);
filter.addCategory(Intent.CATEGORY_HOME);
filter.addCategory(Intent.CATEGORY_DEFAULT);
// 获取所有支持 HOME 的 Activity
List<ResolveInfo> homeApps = pm.queryIntentActivities(new Intent(Intent.ACTION_MAIN).addCategory(Intent.CATEGORY_HOME), 0);
ComponentName[] components = new ComponentName[homeApps.size()];
for (int i = 0; i < homeApps.size(); i++) {
ActivityInfo ai = homeApps.get(i).activityInfo;
components[i] = new ComponentName(ai.packageName, ai.name);
}
// 替换默认桌面
pm.replacePreferredActivity(filter, IntentFilter.MATCH_CATEGORY_EMPTY, components, component);
}
public void setRoleHolderAsUser(Context context, String packageName) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
String roleName = "android.app.role.HOME";
boolean add = true;
int flags = 0;
UserHandle user = Process.myUserHandle();
Log.i("setRoleHolderAsUser", (add ? "Adding" : "Removing") + " package as role holder, role: "
+ roleName + ", package: " + packageName);
if (JgyUtils.getInstance().checkAppPlatform() != JgyUtils.MTKPlatform) {
RoleManager roleManager = context.getSystemService(RoleManager.class);
Executor executor = context.getMainExecutor();
Consumer<Boolean> callback = successful -> {
if (successful) {
Log.d("setRoleHolderAsUser", "Package " + (add ? "added" : "removed")
+ " as role holder, role: " + roleName + ", package: " + packageName);
} else {
Log.d("setRoleHolderAsUser", "Failed to " + (add ? "add" : "remove")
+ " package as role holder, role: " + roleName + ", package: "
+ packageName);
}
};
roleManager.addRoleHolderAsUser(roleName, packageName, flags, user, executor, callback);
Log.i("setRoleHolderAsUser", "addRoleHolderAsUser done");
}
}
}
public void checkDefaultDesktop(String pkg) {
String desktopPkg = getDefaultDesktop();
// String desktopPkg = (String) SPUtils.get(mContext, "default_launcher", "");
Log.e(TAG, "checkDefaultDesktop: pkg = " + pkg);
Log.e(TAG, "checkDefaultDesktop: desktopPkg = " + desktopPkg);
if (TextUtils.isEmpty(pkg)) {
if (JgyUtils.getInstance().checkAppPlatform() == JgyUtils.YXPD1Platform) {
JgyUtils.getInstance().setDop7DefaultDesktop();
} else if (JgyUtils.getInstance().checkAppPlatform() == JgyUtils.G11Platform) {
JgyUtils.getInstance().setJXWDefaultDesktop();
// } else if (JgyUtils.getInstance().checkAppPlatform() == JgyUtils.ZhanruiPlatform) {
// JgyUtils.getInstance().setJXWDefaultDesktop();
} else if (JgyUtils.getInstance().checkAppPlatform() == JgyUtils.AUDG104Platform
|| JgyUtils.getInstance().checkAppPlatform() == JgyUtils.G11JPlatform
) {
JgyUtils.getInstance().setAiuduDefaultDesktop();
} else if (JgyUtils.getInstance().checkAppPlatform() == JgyUtils.MT6765Platform) {
setDefaultDesktop(AlyOs, AlyOsClass);
}
} else {
if (pkg.equalsIgnoreCase(desktopPkg)) {
setDefaultDesktop(pkg);
} else if (JgyUtils.getInstance().checkAppPlatform() == JgyUtils.MT6765Platform) {
setDefaultDesktop(AlyOs, AlyOsClass);
}
}
}
/**
* 获取默认的简易桌面,学习桌面或者默认应用桌面
*
* @return
*/
public String getDefaultDesktop() {
String defaultDesktop = mMMKV.decodeString(CommonConfig.DEFAULT_DESKTOP_PACKAGE_NAME, "");
String defaultLauncher = mMMKV.decodeString(CommonConfig.DEFAULT_LAUNCHER_PACKAGE_NAME, "");
Log.e(TAG, "getDefaultDesktop: defaultDesktop = " + defaultDesktop);
Log.e(TAG, "getDefaultDesktop: defaultLauncher = " + defaultLauncher);
if (TextUtils.isEmpty(defaultDesktop)) {
if (TextUtils.isEmpty(defaultLauncher)) {
return "";
} else {
return defaultLauncher;
}
} else {
return defaultDesktop;
}
}
/**
* 设置奥乐云桌面为默认
*/
public void setDefaultDesktop() {
Log.e(TAG, "setDefaultDesktop: ");
setDefaultDesktop(PackageNames.DESKTOP);
}
public void setYxpDefaultDesktop() {
Log.e(TAG, "setYxpDefaultDesktop: ");
setDefaultDesktop(PackageNames.YIXUEPAI_DESKTOP);
}
public void setDop7DefaultDesktop() {
Log.e(TAG, "setDop7DefaultDesktop: ");
setDefaultDesktop("com.aoleyunos.dop7");
}
public void setJXWDefaultDesktop() {
Log.e(TAG, "setJXWDefaultDesktop: ");
setDefaultDesktop("com.jxw.launcher");
}
public void setAiuduDefaultDesktop() {
Log.e(TAG, "setAiuduDefaultDesktop: ");
// setDefaultDesktop("com.aoleyun.audos");
// setLauncher3();
setDefaultDesktop(Launcher3, Launcher3QuickstepClass);
}
/**
* 设置默认桌面
*
* @param pkg
*/
public void setDefaultDesktop(String pkg) {
Log.e(TAG, "setDefaultDesktop: pkg = " + pkg);
if (TextUtils.isEmpty(pkg)) {
setLauncher3();
} else {
String className = getStartClassName(pkg);
Log.e(TAG, "setDefaultDesktop: className = " + className);
if (TextUtils.isEmpty(className)) {
setLauncher3();
} else {
setDefaultDesktop(pkg, className);
}
}
}
public void setJxwLauncher(String pkg) {
Log.e(TAG, "setDefaultDesktop: " + pkg);
String className = getStartClassName(pkg);
if (TextUtils.isEmpty(className)) {
Log.e(TAG, "setJxwLauncher: empty");
} else {
setDefaultDesktop(pkg, className);
}
}
public void setLauncher3() {
if (ApkUtils.isAvailable(mContext, AoleyunOs)
|| "C2".equals(Build.MODEL)) {
setDefaultDesktop(AoleyunOs, AoleyunOsClass);
} else if (JgyUtils.getInstance().isAiuduPlatform()) {
setDefaultDesktop(AiUDuOs, AiUDuOsClass);
} else if (JgyUtils.isAllWinnerDevice()) {
setDefaultDesktop(schoolosOs, schoolosClass);
} else if (JgyUtils.getInstance().checkAppPlatform() == JgyUtils.MT6765Platform) {
setDefaultDesktop(AlyOs, AlyOsClass);
} else {
if (Build.VERSION.SDK_INT > Build.VERSION_CODES.Q) {
setDefaultDesktop(Launcher3, Launcher3QuickstepClass);
} else {
setDefaultDesktop(Launcher3, Launcher3Class);
}
}
}
public void openLauncher3() {
if (ApkUtils.isAvailable(mContext, AoleyunOs)
|| "C2".equals(Build.MODEL)) {
ApkUtils.openPackage(mContext, AoleyunOs, AoleyunOsClass);
} else if (JgyUtils.getInstance().isAiuduPlatform()) {
ApkUtils.openPackage(mContext, AiUDuOs, AiUDuOsClass);
} else if (JgyUtils.isAllWinnerDevice()) {
ApkUtils.openPackage(mContext, schoolosOs, schoolosClass);
} else if (JgyUtils.getInstance().checkAppPlatform() == JgyUtils.MT6765Platform) {
ApkUtils.openPackage(mContext, AlyOs, AlyOsClass);
} else {
if (Build.VERSION.SDK_INT > Build.VERSION_CODES.Q) {
ApkUtils.openPackage(mContext, Launcher3, Launcher3QuickstepClass);
} else {
ApkUtils.openPackage(mContext, Launcher3, Launcher3Class);
}
}
}
public String getStartClassName(String pkg) {
PackageInfo packageInfo = null;
try {
packageInfo = mContext.getPackageManager().getPackageInfo(pkg, 0);
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
if (packageInfo == null) {
return "";
} else {
// 创建一个类别为CATEGORY_LAUNCHER的该包名的Intent
Intent resolveIntent = new Intent(Intent.ACTION_MAIN, null);
resolveIntent.addCategory(Intent.CATEGORY_LAUNCHER);
resolveIntent.setPackage(packageInfo.packageName);
// 通过getPackageManager()的queryIntentActivities方法遍历
List<ResolveInfo> resolveinfoList = mContext.getPackageManager()
.queryIntentActivities(resolveIntent, 0);
if (resolveinfoList == null || resolveinfoList.size() == 0) {
return "";
}
ResolveInfo resolveinfo = resolveinfoList.iterator().next();
if (resolveinfo != null) {
// packagename = 参数packname
String packageName = resolveinfo.activityInfo.packageName;
// 这个就是我们要找的该APP的LAUNCHER的Activity[组织形式packagename.mainActivityname]
String className = resolveinfo.activityInfo.name;
return className;
} else {
return "";
}
}
}
public void setDefaultDesktop(String pkg, String className) {
Log.e(TAG, "setDefaultDesktop: pkg=" + pkg + " className=" + className);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
setRoleHolderAsUser(mContext, pkg);
Log.e(TAG, "setDefaultDesktop: setRoleHolderAsUser");
} else if (Build.VERSION.SDK_INT >= 31) {
setDefaultLauncher(mContext, pkg, className);
} else {
//爱华设置,暂时屏蔽
// setDefaultLauncher(mContext, pkg, className);
Log.e(TAG, "setDefaultDesktop: setDefaultLauncher: pkg = " + pkg);
}
// String oldDesktop = (String) SPUtils.get(mContext, "default_launcher", "");
// if (Objects.equals(oldDesktop, pkg)) {
// Log.e(TAG, "setDefaultDesktop: " + "数据一致");
// return;
// }
Intent intent = new Intent("setDefaultLauncher");
intent.putExtra("package", pkg);
intent.putExtra("className", className);
// if (JgyUtils.getInstance().checkAppPlatform() == MTKPlatform) {
// Log.e(TAG, "setDefaultDesktop: MTK");
// //爱华定制
// intent.setComponent(new ComponentName("com.android.settings", "com.android.settings.AoleReceiver"));
// // TODO: 2022/7/6 MTK有问题
// setDefaultLauncher(mContext, "com.android.transfer", "com.android.transfer.MainActivity");
// SystemProperties.set("persist.sys.launcher.pkgname", pkg);
// SystemProperties.set("persist.sys.launcher.classname", className);
// }
intent.setPackage("com.android.settings");
mContext.sendBroadcast(intent);
if (JgyUtils.isAllWinnerDevice()) {
if (!ApkUtils.isAvailable(mContext, pkg)) {
Log.e(TAG, "cubeMdmManager setDefaultLauncher: " + pkg + " is not installed");
return;
}
AllwinnerCubeMdmManager.getInstance().setDefaultLauncher(pkg);
}
// ApkUtils.openPackage(mContext, pkg);
Log.e(TAG, "setDefaultDesktop: " + pkg + ":" + className);
Log.e(TAG, "setDefaultDesktop: " + "persist.sys.launcher.pkgname = " + SystemProperties.get("persist.sys.launcher.pkgname"));
Log.e(TAG, "setDefaultDesktop: " + "persist.sys.launcher.classname = " + SystemProperties.get("persist.sys.launcher.classname"));
Log.e(TAG, "setDefaultDesktop: getDefaultLaunchers = " + getDefaultLaunchers());
setDefaultLauncher(new ComponentName(pkg, className));
}
public Set<String> getDefaultLaunchers() {
Set<String> defaultLaunchers = new HashSet<String>();
PackageManager packageManager = mContext.getPackageManager();
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
// 查询所有已安装的桌面应用
List<ResolveInfo> launcherList = packageManager.queryIntentActivities(intent,
PackageManager.MATCH_DEFAULT_ONLY);
// 获取默认的桌面应用,没有指定默认桌面时返回"android"
ResolveInfo defaultLauncher = packageManager.resolveActivity(intent,
PackageManager.MATCH_DEFAULT_ONLY);
if (launcherList != null && defaultLauncher != null) {
String pkgName = defaultLauncher.activityInfo.packageName;
Log.e("getDefaultLaunchers", "default launcher is : " + pkgName);
// 没有指定默认桌面时返回的是"android",故这里过滤下防止"android"被添加到默认桌面列表中
for (ResolveInfo info : launcherList) {
Log.e("getDefaultLaunchers", "launcher : " + info.activityInfo.packageName);
if (info.activityInfo.packageName.equals(pkgName)) {
defaultLaunchers.add(pkgName);
}
}
}
// 有多个桌面应用,且目前没有指定默认桌面时,返回所有的桌面应用
if (defaultLaunchers.isEmpty() && launcherList != null) {
for (ResolveInfo resolveInfo : launcherList) {
defaultLaunchers.add(resolveInfo.activityInfo.packageName);
}
}
Log.e("getDefaultLaunchers", "defaultLaunchers : " + defaultLaunchers);
return defaultLaunchers;
}
public String getMacJson(Context context) {
JsonObject jsonObject = new JsonObject();
jsonObject.addProperty("sn", Utils.getSerial(context));
jsonObject.addProperty("mac", Utils.getAndroid10MAC(mContext));
jsonObject.addProperty("jpush_id", PushServiceFactory.getCloudPushService().getDeviceId());
jsonObject.addProperty("devices_version", Utils.getCustomVersion());
jsonObject.addProperty("appstore_version", BuildConfig.VERSION_NAME);
jsonObject.addProperty("store_version", Utils.getAPPVersionName(PackageNames.APPSTORE, mContext));
jsonObject.addProperty("desktop_version", Utils.getAPPVersionName("com.aoleyun.os", mContext));
jsonObject.addProperty("local_mac", Utils.getAndroid7MAC());
// jsonObject.addProperty("wifi_status", Utils.obtainWifiInfo(mContext));
jsonObject.addProperty("PN_ip", mMMKV.decodeString(NetInterfaceManager.PublicIP, ""));
jsonObject.addProperty("LAN_ip", Utils.getIPAddress(mContext));
jsonObject.addProperty("bluetooth", Utils.getBluetoothList(mContext));
jsonObject.addProperty("wifi_name", Utils.getWifiAlias(mContext));
jsonObject.addProperty("platform", JgyUtils.getInstance().getAppPlatform());
return jsonObject.toString();
}
public void shutdown() {
if (ActivityManagerNative.isSystemReady()) {
Intent intent = new Intent(Intent.ACTION_REQUEST_SHUTDOWN);
intent.putExtra(Intent.EXTRA_KEY_CONFIRM, false);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
mContext.startActivity(intent);
}
}
/**
* 判断网络连接状态
*
* @return true网络已链接 false网络已断开连接
*/
public boolean isNetworkConnected() {
if (mContext != null) {
ConnectivityManager mConnectivityManager = (ConnectivityManager) mContext
.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo mNetworkInfo = mConnectivityManager
.getActiveNetworkInfo();
if (mNetworkInfo != null) {
return mNetworkInfo.isAvailable();
}
}
return false;
}
public void cleanLauncher3Cache() {
try {
new CacheUtils().cleanApplicationUserData(mContext, "com.android.launcher3");
} catch (Exception e) {
Log.e(TAG, "onReceive: " + e.getMessage());
e.printStackTrace();
}
}
public void cleanAoleLauncher3Cache() {
try {
new CacheUtils().cleanApplicationUserData(mContext, "com.aoleyun.os");
} catch (Exception e) {
Log.e(TAG, "cleanAoleLauncher3Cache: " + e.getMessage());
e.printStackTrace();
}
}
public void cleanAoleAppCache() {
try {
new CacheUtils().cleanApplicationUserData(mContext, "com.aoleyun.os");
new CacheUtils().cleanApplicationUserData(mContext, "com.aoleyun.appstore");
new CacheUtils().cleanApplicationUserData(mContext, "com.aoleyun.info");
new CacheUtils().cleanApplicationUserData(mContext, "com.aoleyun.browser");
} catch (Exception e) {
Log.e(TAG, "cleanAoleAppCache: " + e.getMessage());
e.printStackTrace();
}
}
public List<String> getHidePackage() {
String jsonString = cacheHelper.getAsString(UrlAddress.GET_HIDE_DESKTOPICON);
//为 "" 是已经请求成功的
if (jsonString == null) {
return new ArrayList<>();
} else {
Gson gson = new Gson();
Type type = new TypeToken<List<String>>() {
}.getType();
List<String> list = gson.fromJson(jsonString, type);
if (list == null) {
return new ArrayList<>();
} else {
return list;
}
}
}
public List<String> getDisablePackage() {
List<String> list = new ArrayList<>();
if (Settings.System.getInt(crv, "qch_app_camera", 0) == 1) {
list.add("com.mediatek.camera");
list.add("com.android.camera");
list.add("com.android.camera2");
}
if (Settings.System.getInt(crv, "qch_call_forbid", 0) == 1) {
list.add("com.android.dialer");
}
if (Settings.System.getInt(crv, "qch_app_deskclock", 0) == 1) {
list.add("com.android.deskclock");
}
if (Settings.System.getInt(crv, "qch_app_soundrecorder", 0) == 1) {
list.add("com.android.soundrecorder");
}
if (Settings.System.getInt(crv, "qch_app_music", 0) == 1) {
list.add("com.android.music");
}
if (Settings.System.getInt(crv, "qch_app_gallery", 0) == 1) {
list.add("com.android.gallery3d");
}
if (Settings.System.getInt(crv, "qch_app_filemanager", 0) == 1) {
list.add("com.mediatek.filemanager");
list.add("com.android.documentsui");
}
if (Settings.System.getInt(crv, "qch_app_browser", 0) == 1) {
list.add("com.android.browser");
list.add("com.aoleyun.browser");
}
return list;
}
public boolean isForbid(String pkg) {
switch (pkg) {
case "com.mediatek.camera":
case "com.android.camera2":
if (Settings.System.getInt(crv, "qch_app_camera", 0) == 1) {
Toaster.show("摄像头已禁止使用");
return true;
}
break;
case "com.android.dialer":
if (Settings.System.getInt(crv, "qch_call_forbid", 0) == 1) {
Toaster.show("电话已禁止使用");
return true;
}
break;
case "com.android.gallery3d":
if (Settings.System.getInt(crv, "qch_app_gallery", 1) == 1) {
Toaster.show("图库已禁止使用");
return true;
}
break;
case "com.android.documentsui":
if (Settings.System.getInt(crv, "qch_app_filemanager", 1) == 1) {
Toaster.show("文件已禁止使用");
return true;
}
break;
case "com.android.deskclock":
if (Settings.System.getInt(crv, "qch_app_deskclock", 0) == 1) {
Toaster.show("时钟已禁止使用");
return true;
}
break;
case "com.android.music":
if (Settings.System.getInt(crv, "qch_app_music", 1) == 1) {
Toaster.show("音乐已禁止使用");
return true;
}
break;
case "com.android.soundrecorder":
if (Settings.System.getInt(crv, "qch_app_soundrecorder", 1) == 1) {
Toaster.show("录音机已禁止使用");
return true;
}
break;
case "com.aoleyun.browser":
case "com.android.browser":
if (Settings.System.getInt(crv, "qch_app_browser", 1) == 1) {
Toaster.show("浏览器已禁止使用");
return true;
}
break;
case "com.android.messaging":
case "com.android.mms":
if (Settings.System.getInt(crv, "qch_app_sms", 1) == 1) {
Toaster.show("短信已禁止使用");
return true;
}
break;
default:
return false;
}
return false;
}
public static final String PACKAGE_DEVICEINFO = "com.aoleyun.sn";
public static final String CLASS_DEVICEINFO = "com.aoleyun.sn.receiver.BootReceiver";
public void wakeUpDeviceInfo() {
Log.e(TAG, "wakeUpDeviceInfo: ");
//启动设备信息
Intent bootIntent = new Intent(BootReceiver.BOOT_COMPLETED);
bootIntent.setComponent(new ComponentName(PACKAGE_DEVICEINFO, CLASS_DEVICEINFO));
mContext.sendBroadcast(bootIntent);
}
public static final String PACKAGE_APPSTORE = "com.aoleyun.appstore";
public static final String CLASS_APPSTORE = "com.aoleyun.appstore.receiver.BootReceiver";
public void wakeUpAppstore() {
Log.e(TAG, "wakeUpAppstore: ");
//启动应用市场
Intent bootIntent = new Intent(BootReceiver.BOOT_COMPLETED);
bootIntent.setComponent(new ComponentName(PACKAGE_APPSTORE, CLASS_APPSTORE));
mContext.sendBroadcast(bootIntent);
}
public static final String PACKAGE_NOTIFY = "com.aoleyun.info";
public static final String CLASS_NOTIFY = "com.aoleyun.info.receiver.BootReceiver";
public void wakeUpNotify() {
Log.e(TAG, "wakeUpNotify: ");
//启动通知
Intent bootIntent = new Intent(BootReceiver.BOOT_COMPLETED);
bootIntent.setPackage("com.aoleyun.info");
bootIntent.setComponent(new ComponentName(PACKAGE_NOTIFY, CLASS_NOTIFY));
mContext.sendBroadcast(bootIntent);
// Intent intent = new Intent();
// intent.setComponent(new ComponentName("com.aoleyun.info", "com.aoleyun.info.service.main.MainService"));
// intent.setPackage("com.aoleyun.info");
//// intent.setClassName("com.aoleyun.info", "com.aoleyun.info.service.main.MainService");
// try {
// mContext.startService(intent);
// } catch (Exception e) {
// Log.e(TAG, "wakeUpNotify: " + e.getMessage());
// }
}
@Deprecated
public void wakeUpAoleyunAPP() {
wakeUpAppstore();
wakeUpNotify();
}
public static String getModel() {
Log.e(TAG, "MANUFACTURER=" + Build.MANUFACTURER);
Log.e(TAG, "BRAND=" + Build.BRAND);
Log.e(TAG, "MODEL=" + Build.MODEL);
Log.e(TAG, "VERSION.RELEASE=" + Build.VERSION.RELEASE);
Log.e(TAG, "VERSION.SDK_INT=" + Build.VERSION.SDK_INT);
Log.e(TAG, "DEVICE=" + Build.DEVICE);
Log.e(TAG, "HOST=" + Build.HOST);
Log.e(TAG, "ID=" + Build.ID);
Log.e(TAG, "TIME=" + Build.TIME);
Log.e(TAG, "TYPE=" + Build.TYPE);
Log.e(TAG, "PRODUCT=" + Build.PRODUCT);
Log.e(TAG, "BOARD=" + Build.BOARD);
Log.e(TAG, "DISPLAY=" + Build.DISPLAY);
Log.e(TAG, "FINGERPRINT=" + Build.FINGERPRINT);
Log.e(TAG, "HARDWARE=" + Build.HARDWARE);
Log.e(TAG, "BOOTLOADER=" + Build.BOOTLOADER);
Log.e(TAG, "TAGS=" + Build.TAGS);
Log.e(TAG, "UNKNOWN=" + Build.UNKNOWN);
Log.e(TAG, "USER=" + Build.USER);
return Build.MODEL;
}
private static String MTK_HARDWARE = "mtk";
private static String UNISOC_HARDWARE = "ums";
private static String AIHUA_BRAND = "AS";
private static String CUBE_BRAND = "ALLDOCUBE";
public static String getHardware() {
return Build.HARDWARE;
}
public boolean isAihuaFramework() {
return (Utils.getProperty("ro.build.display.id", "获取失败").contains("_aihua"));
}
public static boolean isAihuaDevice() {
return getHardware().startsWith(MTK_HARDWARE) && Build.BRAND.startsWith(AIHUA_BRAND);
}
public static boolean isCubeDevice() {
return getHardware().startsWith(UNISOC_HARDWARE) && Build.BRAND.equalsIgnoreCase(CUBE_BRAND);
}
public static boolean isAllWinnerDevice() {
return JgyUtils.getInstance().checkAppPlatform() == U1302Platform;
}
public boolean isScreenOn() {
PowerManager powerManager = (PowerManager) mContext.getSystemService(Context.POWER_SERVICE);
boolean isScreenOn;
// 使用新版本的 API更准确
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT_WATCH) {
isScreenOn = powerManager.isInteractive();
} else {
// 旧版本 API已过时但用于兼容低版本系统
isScreenOn = powerManager.isScreenOn();
}
Log.e(TAG, "isScreenOn: " + isScreenOn);
return isScreenOn;
//true为打开false为关闭
}
private static final String CONNECTED_TIME_KEY = "connectedTimeKey";
private List<Long> connectedTime;
private void initConnectedTimeCache() {
String jsonString = cacheHelper.getAsString(CONNECTED_TIME_KEY);
Gson gson = new Gson();
Type listType = new TypeToken<List<Long>>() {
}.getType();
try {
List<Long> longList = gson.fromJson(jsonString, listType);
if (longList == null) {
connectedTime = new ArrayList<>();
} else {
connectedTime = longList;
}
} catch (Exception e) {
Log.e(TAG, "initConnectedTimeCache: " + e.getMessage());
cacheHelper.remove(CONNECTED_TIME_KEY);
connectedTime = new ArrayList<>();
}
}
public List<Long> getNetworkConnectedTime() {
Log.e(TAG, "getNetworkConnectedTime: " + connectedTime);
return connectedTime;
}
public void addNetworkConnectedTime(Long time) {
Log.e(TAG, "addNetworkConnectedTime: " + time);
connectedTime.add(time);
cacheHelper.put(CONNECTED_TIME_KEY, GsonUtils.toJSONString(connectedTime));
}
public void removeNetworkConnectedTime(List<Long> time) {
if (time == null || time.size() == 0) {
return;
}
List<Long> copy = new ArrayList<>(time);
for (Long l : copy) {
connectedTime.remove(l);
}
cacheHelper.put(CONNECTED_TIME_KEY, GsonUtils.toJSONString(connectedTime));
}
public void installAdminApp(List<AdminAppInfo> adminAppInfos) {
for (AdminAppInfo adminAppInfo : adminAppInfos) {
String app_name = adminAppInfo.getApp_name();
String app_package = adminAppInfo.getApp_package();
String app_url = adminAppInfo.getApp_url();
String app_md5 = adminAppInfo.getApp_md5();
int app_id = adminAppInfo.getId();
long app_version_code = adminAppInfo.getApp_version_code();
JsonObject jsonObject = new JsonObject();
jsonObject.addProperty("app_name", app_name);
jsonObject.addProperty("app_package", app_package);
jsonObject.addProperty("app_id", app_id);
jsonObject.addProperty("MD5", app_md5);
PackageInfo packageInfo = null;
try {
packageInfo = mContext.getPackageManager().getPackageInfo(app_package, 0);
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
if (packageInfo == null) {
Log.e(TAG, "installAdminApp: " + app_package + " 未安装");
Utils.ariaDownload(mContext, app_url, jsonObject);
} else {
long appVersionCode;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
appVersionCode = packageInfo.getLongVersionCode();
} else {
appVersionCode = packageInfo.versionCode;
}
if (app_version_code > appVersionCode) {
Log.e(TAG, "installAdminApp: " + app_package + " 更新");
Utils.ariaDownload(mContext, app_url, jsonObject);
} else {
Log.e(TAG, "installAdminApp: " + app_package + "已安装最新版");
}
}
}
}
private static final String AOLE_DIR = "aoleapp";
public void checkLocalExternalFiles() {
int install = mMMKV.decodeInt(CommonConfig.INSTALL_SD_APKS, 0);
Log.e(TAG, "checkLocalExternalFiles: installed = " + install);
if (install == 1) {
Log.e(TAG, "checkLocalExternalFiles: install");
// return;
}
File[] externalFiles = mContext.getExternalFilesDirs(null);
Log.e(TAG, "checkLocalAppInstall: externalFiles = " + Arrays.toString(externalFiles));
String SdPath = Environment.getExternalStorageDirectory().getAbsolutePath();
Log.e(TAG, "checkLocalAppInstall: SdPath = " + SdPath);
String aolePath = SdPath + File.separator + AOLE_DIR;
File file = new File(aolePath);
if (!file.exists()) {
Log.e(TAG, "checkLocalExternalFiles: dir not exists");
return;
}
String[] apkName = file.list();
if (apkName == null || apkName.length == 0) {
Log.e(TAG, "checkLocalAppInstall: apkName is empty");
} else {
Observable.create(new ObservableOnSubscribe<HashMap<String, String>>() {
@Override
public void subscribe(@NonNull ObservableEmitter<HashMap<String, String>> emitter) throws Throwable {
HashMap<String, String> packageListMap = new HashMap<>();
for (String fileName : apkName) {
String apkPath = aolePath + File.separator + fileName;
Log.e(TAG, "subscribe: " + apkPath);
String pkg = ApkUtils.getPackageName(mContext, apkPath);
if (ApkUtils.mJxwApp.contains(pkg)) {
packageListMap.put(pkg, apkPath);
} else {
Log.e(TAG, "checkLocalAppInstall: skip: " + pkg + " fileName: " + fileName);
}
}
emitter.onNext(packageListMap);
emitter.onComplete();
}
}).subscribe(new Observer<HashMap<String, String>>() {
@Override
public void onSubscribe(@NonNull Disposable d) {
Log.e("checkLocalAppInstall", "onSubscribe: ");
}
@Override
public void onNext(@NonNull HashMap<String, String> stringStringHashMap) {
Log.e("checkLocalAppInstall", "onNext: " + stringStringHashMap);
stringStringHashMap.forEach(new BiConsumer<String, String>() {
@Override
public void accept(String key, String value) {
if (ApkUtils.isAvailable(mContext, key)) {
Log.e("checkLocalAppInstall", "accept: installed: " + key);
} else {
ApkUtils.installApp(mContext, value);
}
}
});
}
@Override
public void onError(@NonNull Throwable e) {
Log.e("checkLocalAppInstall", "onError: " + e.getMessage());
onComplete();
}
@Override
public void onComplete() {
Log.e("checkLocalAppInstall", "onComplete: ");
mMMKV.encode(CommonConfig.INSTALL_SD_APKS, 1);
}
});
}
}
public static boolean isUnlocked(Context context) {
int locked = Settings.System.getInt(context.getContentResolver(), JGYActions.ACTION_QCH_UNLOCK_IPAD, JGYActions.FRAME_CODE_LOCKED);
return locked == JGYActions.FRAME_CODE_UNLOCKED;
}
/**
* 启用/禁用MTP数据传输功能
*
* @param enable
*/
void setMtpEnable(boolean enable) {
if (C2Tag.equals(BuildConfig.platform)) {
Log.e("ITools", "setMtpEnable: " + enable);
try {
mITools.setMtpEnable(enable);
} catch (RemoteException e) {
e.printStackTrace();
}
}
}
/**
* 启用/禁用Camera功能
*
* @param enable
*/
void setCameraEnable(boolean enable) {
if (C2Tag.equals(BuildConfig.platform)) {
Log.e("ITools", "setCameraEnable: " + enable);
try {
mITools.setCameraEnable(enable);
} catch (RemoteException e) {
e.printStackTrace();
}
}
}
/**
* 启用/禁用蓝牙功能
*
* @param enable
*/
void setBluetoothEnable(boolean enable) {
if (C2Tag.equals(BuildConfig.platform)) {
Log.e("ITools", "setBluetoothEnable: " + enable);
try {
mITools.setBluetoothEnable(enable);
} catch (RemoteException e) {
e.printStackTrace();
}
}
}
/**
* No. 7
* 启用/禁用OTG T卡功能
*
* @param enable true 启用 ,false 禁用
**/
void setSDOTGEnable(boolean enable) {
if (C2Tag.equals(BuildConfig.platform)) {
Log.e("ITools", "setSDOTGEnable: " + enable);
try {
mITools.setSDOTGEnable(enable);
} catch (RemoteException e) {
e.printStackTrace();
}
}
}
/**
* No. 31
* 设置apk安装黑白名单模式不会清除黑白名单数据
*
* @param pattern 0:普通模式黑白名单都不生效1黑名单模式2白名单模式
**/
public void setAppRestriction(int pattern) {
if (C2Tag.equals(BuildConfig.platform)) {
Log.e("ITools", "setAppRestriction: " + pattern);
try {
mITools.setAppRestriction(pattern);
} catch (RemoteException e) {
e.printStackTrace();
}
}
}
/**
* No. 32
* 获取apk安装名单模式
* @return
* int 0:普通模式黑白名单都不生效1黑名单模式2白名单模式
**/
// int getAppRestrictionMode(){
//
// }
/**
* No. 33
* 设置apk安装白名单
* 在设置前需要先调用setAppRestriction用来设置apk安装模式
* 当设置了黑白名单模式但对应的黑白名单值为空时等同于设置为0普通模式黑白名单都不生效
*
* @param packageNameList 包名列表
**/
public void addAppInstallWhiteList(List<String> packageNameList) {
if (C2Tag.equals(BuildConfig.platform)) {
Log.e("ITools", "addAppInstallWhiteList: " + packageNameList);
try {
if (mITools != null) {
mITools.addAppInstallWhiteList(packageNameList);
}
} catch (RemoteException e) {
e.printStackTrace();
}
}
}
/**
* No. 34
* 删除安装白名单列表
*
* @param packageNameList 包名列表
**/
void delAppInstallWhiteList(List<String> packageNameList) {
if (C2Tag.equals(BuildConfig.platform)) {
try {
mITools.delAppInstallWhiteList(packageNameList);
} catch (RemoteException e) {
e.printStackTrace();
}
}
}
/**
* No. 35
* 清空安装白名单列表
**/
void clearAppInstallWhiteList() {
if (C2Tag.equals(BuildConfig.platform)) {
try {
mITools.clearAppInstallWhiteList();
} catch (RemoteException e) {
e.printStackTrace();
}
}
}
/**
* No. 54
* 设置默认Launcher
*
* @param packageName apk的包名
* @param className apk的组件类名
**/
void setDefaultLauncher(ComponentName cmpName) {
if (C2Tag.equals(BuildConfig.platform)) {
Log.e("ITools", "setDefaultLauncher: " + cmpName);
try {
mITools.setDefaultLauncher(cmpName);
} catch (Exception e) {
e.printStackTrace();
}
}
}
/**
* No. 55
* 设置默认浏览器
*
* @param packageName apk的包名
**/
public void setDefaultBrowser(String packageName) {
if (C2Tag.equals(BuildConfig.platform)) {
Log.e("ITools", "setDefaultBrowser: " + packageName);
try {
mITools.setDefaultBrowser(packageName);
} catch (RemoteException e) {
e.printStackTrace();
}
}
}
public void setTongyiAppTop() {
if (ApkUtils.isAvailable(mContext, "com.tongyi.aistudent")) {
ForegroundAppUtil.setTopAppClass(mContext, "com.tongyi.aistudent");
Settings.Global.putString(crv, ForegroundAppUtil.TOPAPP_KEY, "com.tongyi.aistudent");
ForegroundAppUtil.openTopApp(mContext);
}
}
public void refresh() {
String jsonString = mMMKV.decodeString(CommonConfig.CLOUD_LESSON_SETTINGS_KEY);
if (!TextUtils.isEmpty(jsonString)) {
Gson gson = new Gson();
Type type = new TypeToken<LessonJson>() {
}.getType();
LessonJson lessonJson = gson.fromJson(jsonString, type);
if (lessonJson != null) {
this.mLessonJson = lessonJson;
TimeUtils.ContralTime contralTime = TimeUtils.getContralTime(mContext, lessonJson.getStart_time(), lessonJson.getEnd_time());
if (contralTime != null) {
mContralTime = contralTime;
}
}
}
}
/**
* @param pkg
* @return true为能打开
*/
public boolean isCloudLessonMod(String pkg) {
if (JgyUtils.getInstance().isForbid(pkg)) {
return false;
}
if (ApkUtils.isSystemApp(mContext, pkg)) {
Log.e(TAG, "isCloudLessonMod: is system app");
return true;
}
if (ApkUtils.mJxwApp.contains(pkg)) {
return true;
}
if (mLessonJson == null)
return true;
if (mLessonJson.getIs_lesson() == 1) {
if (mContralTime == null) {
return false;
} else {
String pkgs = mLessonJson.getPkgs();
if (mContralTime.inControlTime()) {
return pkgs.contains(pkg);
} else {
Toaster.show("专注模式只允许使用指定应用");
return false;
}
}
} else {
return true;
}
}
public String getAppName(String pkg) {
PackageManager pm = mContext.getPackageManager();
PackageInfo info = null;
try {
info = pm.getPackageInfo(pkg, 0);
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
if (info == null) {
return "未知";
} else {
return info.applicationInfo.loadLabel(pm).toString();
}
}
/**
* @param pkg
* @return
*/
public boolean isHidedApp(String pkg) {
String appString = Settings.Global.getString(mContext.getContentResolver(), CommonConfig.AOLE_ACTION_DISABLE_APP);
if (TextUtils.isEmpty(appString)) {
return true;
} else {
List<String> pkgs = new ArrayList<>(Arrays.asList(appString.split(",")));
return pkgs.contains(pkg);
}
}
public void setWallpaper(String url) {
String oldUrl = mMMKV.decodeString(CommonConfig.WALLPAPER_URL_KEY, "");
if (oldUrl.equals(url)) {
Log.e(TAG, "setWallpaper: Already set");
return;
}
// Bitmap bitmap = BitmapFactory.decodeFile(path);
//利用WallpaparManager,添加权限set_wallpaper
WallpaperManager wallpaperManager = WallpaperManager.getInstance(mContext);
// // 获取当前壁纸(非缩略图)
// Drawable drawable = wallpaperManager.getDrawable();
// // 获取当前壁纸的缩略图
// Bitmap bitmap = wallpaperManager.getBitmap();
// // 获取当前壁纸的尺寸
// int width = wallpaperManager.getDesiredMinimumWidth();
// int height = wallpaperManager.getDesiredMinimumHeight();
Glide.with(mContext).asBitmap().load(url).into(new SimpleTarget<Bitmap>() {
@Override
public void onResourceReady(@androidx.annotation.NonNull Bitmap resource, @Nullable Transition<? super Bitmap> transition) {
try {
wallpaperManager.setBitmap(resource);
mMMKV.encode(CommonConfig.WALLPAPER_URL_KEY, url);
Log.e("setWallpaper", "onResourceReady: set wallpaper Successful");
} catch (IOException e) {
e.printStackTrace();
Log.e("setWallpaper", "onResourceReady: " + e.getMessage());
Log.e("setWallpaper", "onResourceReady: set wallpaper failed");
}
}
});
}
public boolean isAiuduPlatform() {
return checkAppPlatform() == G11JPlatform
|| "Aiud_A8_ag_1095".equals(Build.MODEL)
|| "G11J".equals(Build.MODEL);
}
public void checkAoleyunApp() {
boolean availableSn = ApkUtils.isAvailable(mContext, "com.aoleyun.sn");
if (availableSn) {
boolean disableSn = ApkUtils.isDisable(mContext, "com.aoleyun.sn");
Log.e(TAG, "checkAoleyunApp: sn isAvailable = " + availableSn);
if (disableSn) {
CmdUtil.Result installResult = CmdUtil.execute("cmd package install-existing com.aoleyun.sn");
Log.e(TAG, "checkAoleyunApp: sn install = " + installResult);
CmdUtil.Result enableResult = CmdUtil.execute("pm enable com.aoleyun.sn");
Log.e(TAG, "checkAoleyunApp: sn enable = " + enableResult);
}
} else {
CmdUtil.Result installResult = CmdUtil.execute("cmd package install-existing com.aoleyun.sn");
Log.e(TAG, "checkAoleyunApp: sn install = " + installResult);
CmdUtil.Result enableResult = CmdUtil.execute("pm enable com.aoleyun.sn");
Log.e(TAG, "checkAoleyunApp: sn enable = " + enableResult);
}
// boolean availableAudos = ApkUtils.isAvailable(mContext, "com.aoleyun.audos");
// if (availableAudos) {
// boolean disableAudos = ApkUtils.isDisable(mContext, "com.aoleyun.audos");
// Log.e(TAG, "checkAoleyunApp: audos isAvailable = " + availableAudos);
// if (disableAudos) {
// CmdUtil.Result installResult = CmdUtil.execute("cmd package install-existing com.aoleyun.audos");
// Log.e(TAG, "checkAoleyunApp: audos install = " + installResult);
// CmdUtil.Result enableResult = CmdUtil.execute("pm enable com.aoleyun.audos");
// Log.e(TAG, "checkAoleyunApp: audos enable = " + enableResult);
// }
// } else {
// CmdUtil.Result installResult = CmdUtil.execute("cmd package install-existing com.aoleyun.audos");
// Log.e(TAG, "checkAoleyunApp: audos install = " + installResult);
// CmdUtil.Result enableResult = CmdUtil.execute("pm enable com.aoleyun.audos");
// Log.e(TAG, "checkAoleyunApp: audos enable = " + enableResult);
// }
boolean availableOs = ApkUtils.isAvailable(mContext, "com.aoleyun.os");
if (availableOs) {
boolean disableOs = ApkUtils.isDisable(mContext, "com.aoleyun.os");
Log.e(TAG, "checkAoleyunApp: os isAvailable = " + availableOs);
if (disableOs) {
CmdUtil.Result installResult = CmdUtil.execute("cmd package install-existing com.aoleyun.os");
Log.e(TAG, "checkAoleyunApp: os install = " + installResult);
CmdUtil.Result enableResult = CmdUtil.execute("pm enable com.aoleyun.os");
Log.e(TAG, "checkAoleyunApp: os enable = " + enableResult);
}
} else {
CmdUtil.Result installResult = CmdUtil.execute("cmd package install-existing com.aoleyun.os");
Log.e(TAG, "checkAoleyunApp: os install = " + installResult);
CmdUtil.Result enableResult = CmdUtil.execute("pm enable com.aoleyun.os");
Log.e(TAG, "checkAoleyunApp: os enable = " + enableResult);
}
boolean availableAppstore = ApkUtils.isAvailable(mContext, "com.aoleyun.appstore");
if (availableAppstore) {
boolean disableAppstore = ApkUtils.isDisable(mContext, "com.aoleyun.appstore");
Log.e(TAG, "checkAoleyunApp: appstore isAvailable = " + availableAppstore);
if (disableAppstore) {
CmdUtil.Result installResult = CmdUtil.execute("cmd package install-existing com.aoleyun.appstore");
Log.e(TAG, "checkAoleyunApp: appstore install = " + installResult);
CmdUtil.Result enableResult = CmdUtil.execute("pm enable com.aoleyun.appstore");
Log.e(TAG, "checkAoleyunApp: appstore enable = " + enableResult);
}
} else {
CmdUtil.Result installResult = CmdUtil.execute("cmd package install-existing com.aoleyun.appstore");
Log.e(TAG, "checkAoleyunApp: appstore install = " + installResult);
CmdUtil.Result enableResult = CmdUtil.execute("pm enable com.aoleyun.appstore");
Log.e(TAG, "checkAoleyunApp: appstore enable = " + enableResult);
}
}
public void setAllwinnerDefaulInputMeth(String pkg) {
if (!ApkUtils.isAvailable(mContext, pkg)) {
Log.e(TAG, "cubeMdmManager setDefaultInputMethod: " + pkg + " is not installed");
return;
}
String componentName = JgyUtils.getInstance().getInputMethComponentName(pkg);
Log.e(TAG, "setDefaultInputMethod: " + componentName);
if (JgyUtils.isAllWinnerDevice()) {
AllwinnerCubeMdmManager.getInstance().setDefaultInputMethod(componentName);
}
}
public String getInputMethComponentName(String pkg) {
InputMethodManager imeManager = (InputMethodManager) mContext.getSystemService(Context.INPUT_METHOD_SERVICE);
List<InputMethodInfo> InputMethods = imeManager.getInputMethodList();
Optional<InputMethodInfo> inputMethodInfoOptional = InputMethods.stream().filter(new Predicate<InputMethodInfo>() {
@Override
public boolean test(InputMethodInfo inputMethodInfo) {
return pkg.equals(inputMethodInfo.getPackageName());
}
}).findAny();
if (inputMethodInfoOptional.isPresent()) {
InputMethodInfo inputMethodInfo = inputMethodInfoOptional.get();
return inputMethodInfo.getComponent().toString();
} else {
return "";
}
}
public String getDefaultIme() {
return mMMKV.decodeString(CommonConfig.DEFAULT_IME_PACKAGE_NAME_KEY, "");
}
public void setAllwinnerDefaulBrowser(String pkg) {
if (JgyUtils.isAllWinnerDevice()) {
if (!ApkUtils.isAvailable(mContext, pkg)) {
Log.e(TAG, "cubeMdmManager setAllwinnerDefaulBrowser: " + pkg + " is not installed");
return;
}
Log.e(TAG, "setAllwinnerDefaulBrowser: " + pkg);
if (JgyUtils.isAllWinnerDevice()) {
AllwinnerCubeMdmManager.getInstance().setDefaultBrowser(pkg);
}
}
}
public List<ProcessInfo> getAllRunningAppProcessInfo() {
ActivityManager am = (ActivityManager) mContext.getSystemService(Context.ACTIVITY_SERVICE);
PackageManager pm = mContext.getPackageManager();
List<ActivityManager.RunningAppProcessInfo> processes = am.getRunningAppProcesses();
List<ProcessInfo> processList = new ArrayList<>();
for (ActivityManager.RunningAppProcessInfo process : processes) {
String[] pkgList = process.pkgList;
for (String pkg : pkgList) {
try {
ApplicationInfo appInfo = pm.getApplicationInfo(pkg, 0);
processList.add(new ProcessInfo(
pkg,
appInfo.loadLabel(pm).toString(),
process.pid,
getProcessMemory(am, process.pid),
(appInfo.flags & ApplicationInfo.FLAG_SYSTEM) != 0
));
} catch (Exception ignored) {
}
}
}
String jsonString = GsonUtils.toJSONString(processList);
Log.e(TAG, "getAllRunningAppProcessInfo: " + jsonString);
return processList;
}
// 获取进程内存占用KB
private static long getProcessMemory(ActivityManager am, int pid) {
Debug.MemoryInfo[] memoryInfo = am.getProcessMemoryInfo(new int[]{pid});
return memoryInfo[0].getTotalPss();
}
public static class ProcessInfo {
public String packageName, appName;
public int pid;
public long memory;
public boolean isSystem;
public ProcessInfo(String pkg, String name, int pid, long memory, boolean isSystem) {
this.packageName = pkg;
this.appName = name;
this.pid = pid;
this.memory = memory;
this.isSystem = isSystem;
}
@androidx.annotation.NonNull
@Override
public String toString() {
return JsonParser.parseString(new Gson().toJson(this)).getAsJsonObject().toString();
}
}
// 获取所有正在运行的服务
public List<ServiceInfo> getAllRunningServices() {
ActivityManager am = (ActivityManager) mContext.getSystemService(Context.ACTIVITY_SERVICE);
List<ActivityManager.RunningServiceInfo> runningServices = am.getRunningServices(Integer.MAX_VALUE);
List<ServiceInfo> serviceList = new ArrayList<>();
for (ActivityManager.RunningServiceInfo service : runningServices) {
serviceList.add(new ServiceInfo(
service.service.getClassName(),
service.service.getPackageName(),
service.pid,
service.uid
));
}
String jsonString = GsonUtils.toJSONString(serviceList);
Log.e(TAG, "getAllRunningServices: " + jsonString);
return serviceList;
}
public static class ServiceInfo {
public String className, packageName;
public int pid, uid;
public ServiceInfo(String cls, String pkg, int pid, int uid) {
this.className = cls;
this.packageName = pkg;
this.pid = pid;
this.uid = uid;
}
@androidx.annotation.NonNull
@Override
public String toString() {
return JsonParser.parseString(new Gson().toJson(this)).getAsJsonObject().toString();
}
}
}