From e17935ad7605708e4b884fb9a857d4baee3f0d7b Mon Sep 17 00:00:00 2001 From: Administrator <981964879@qq.com> Date: Sat, 26 Dec 2020 18:18:38 +0800 Subject: [PATCH] =?UTF-8?q?update:2020.12.26=20fix:=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E5=BC=BA=E5=88=B6=E5=BA=94=E7=94=A8=E7=A6=81=E6=AD=A2=E5=88=A0?= =?UTF-8?q?=E9=99=A4=20add:?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/AndroidManifest.xml | 2 + .../com/info/sn/activity/MainActivity.java | 75 +-------- .../java/com/info/sn/jpush/MyReceiver.java | 11 +- .../com/info/sn/network/HTTPInterface.java | 157 +++++++++++++++--- .../com/info/sn/network/NetWorkManager.java | 16 +- .../java/com/info/sn/network/UrlAddress.java | 4 +- .../com/info/sn/network/api/QueryAllApp.java | 18 ++ .../com/info/sn/receiver/BootReceiver.java | 29 ++-- .../com/info/sn/service/InitJpushServer.java | 21 +++ .../main/java/com/info/sn/utils/ApkUtils.java | 67 ++++++++ .../main/java/com/info/sn/utils/Utils.java | 4 + 11 files changed, 285 insertions(+), 119 deletions(-) create mode 100644 app/src/main/java/com/info/sn/network/api/QueryAllApp.java diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 8d571bc..eaf0ced 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -86,6 +86,8 @@ + + >>() { - @Override - public void onSubscribe(@NonNull Disposable d) { - } - - @Override - public void onNext(@NonNull BaseResponse> listBaseResponse) { - int code = listBaseResponse.code; - if (code == 200) { - List appInfos = listBaseResponse.data; - if (null != appInfos && appInfos.size() != 0) { - getForceInstallState(context, appInfos); - } - } - } - - @Override - public void onError(@NonNull Throwable e) { - Log.e("getForceInstall", "onError: " + e.getMessage()); - } - - @Override - public void onComplete() { - - } - }); - } - - private void getForceInstallState(Context context, List list) { - if (null != list && list.size() != 0) { - PackageManager pm = context.getPackageManager(); - for (AppInfo appInfo : list) { - PackageInfo info = null; - try { - info = pm.getPackageInfo(appInfo.getApp_package(), 0); - } catch (PackageManager.NameNotFoundException e) { - e.printStackTrace(); - } - if (null != info) { - long appVersionCode; - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) { - appVersionCode = info.getLongVersionCode(); - } else { - appVersionCode = info.versionCode; - } - if (appVersionCode < appInfo.getApp_version_code()) { - JSONObject jsonObject = (JSONObject) JSON.toJSON(appInfo); - FileUtils.ariaDownload(context, appInfo.getApp_url(), jsonObject); - } - } else { - JSONObject jsonObject = (JSONObject) JSON.toJSON(appInfo); - FileUtils.ariaDownload(context, appInfo.getApp_url(), jsonObject); - } - } - } - } @Override diff --git a/app/src/main/java/com/info/sn/jpush/MyReceiver.java b/app/src/main/java/com/info/sn/jpush/MyReceiver.java index 0c464e9..38945ff 100644 --- a/app/src/main/java/com/info/sn/jpush/MyReceiver.java +++ b/app/src/main/java/com/info/sn/jpush/MyReceiver.java @@ -181,9 +181,8 @@ public class MyReceiver extends BroadcastReceiver { private static final String JIGUANG_SYSTEM_SETTING = "21"; //系统管控 private static final String JIGUANG_REBOOT_DEVICES = "22"; - //重启 - // + //send msg to MainActivity private void processCustomMessage(Context context, Bundle bundle) { // if (MainActivity.isForeground) { @@ -263,11 +262,7 @@ public class MyReceiver extends BroadcastReceiver { HTTPInterface.getAppJump(context); break; case JIGUANG_REBOOT_DEVICES: -// Intent intent = new Intent(MainActivity.REFRESHACTION); -// context.sendBroadcast(intent); - if (!BuildConfig.DEBUG) { - Utils.rebootDevices(context); - } + Utils.rebootDevices(context); break; case JIGUANG_APP_NET_AUTO: HTTPInterface.getAppStart(context); @@ -654,7 +649,7 @@ public class MyReceiver extends BroadcastReceiver { synchronized private void unintallApk(Context context, String json) { - int sn_id = (int) SPUtils.get(context, "sn_id", "-1"); + int sn_id = (int) SPUtils.get(context, "sn_id", -1); try { JSONObject object = new JSONObject(json); diff --git a/app/src/main/java/com/info/sn/network/HTTPInterface.java b/app/src/main/java/com/info/sn/network/HTTPInterface.java index 4d47674..fedd291 100644 --- a/app/src/main/java/com/info/sn/network/HTTPInterface.java +++ b/app/src/main/java/com/info/sn/network/HTTPInterface.java @@ -2,50 +2,41 @@ package com.info.sn.network; import android.content.Context; import android.content.Intent; -import android.icu.text.SimpleDateFormat; +import android.content.pm.PackageInfo; +import android.content.pm.PackageManager; import android.os.Build; -import android.os.Bundle; -import android.os.Handler; -import android.os.Message; import android.provider.Settings; import android.text.TextUtils; import android.util.Log; -import androidx.annotation.RequiresApi; - import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONException; import com.alibaba.fastjson.JSONObject; import com.google.gson.Gson; import com.google.gson.JsonObject; -import com.info.sn.activity.MainActivity; +import com.info.sn.bean.AppInfo; import com.info.sn.bean.AppJump; import com.info.sn.bean.AppStart; import com.info.sn.bean.BaseResponse; import com.info.sn.bean.BrowserBean; -import com.info.sn.bean.UserInfo; -import com.info.sn.network.UrlAddress; import com.info.sn.network.api.APPJump; import com.info.sn.network.api.AddAppInstall; import com.info.sn.network.api.Browser; +import com.info.sn.network.api.ForceInstall; import com.info.sn.network.api.Label; +import com.info.sn.network.api.QueryAllApp; import com.info.sn.network.api.QuerySnAppStart; import com.info.sn.network.api.UpdateAdminSn; -import com.info.sn.utils.LogUtils; +import com.info.sn.utils.ApkUtils; +import com.info.sn.utils.FileUtils; import com.info.sn.utils.SPUtils; -import com.info.sn.utils.ToastUtil; import com.info.sn.utils.Utils; -import org.w3c.dom.Text; - -import java.util.Date; import java.util.List; import io.reactivex.Observer; import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.annotations.NonNull; import io.reactivex.disposables.Disposable; -import io.reactivex.internal.schedulers.NewThreadWorker; import io.reactivex.schedulers.Schedulers; public class HTTPInterface { @@ -163,7 +154,7 @@ public class HTTPInterface { JsonObject label = jsonObject.getAsJsonArray("label").get(0).getAsJsonObject(); String home_page = label.get("home_page").getAsString(); String label_page = label.get("label_page").getAsString(); - Log.e("getBrowserLabel", "onNext: " + home_page); +// Log.e("getBrowserLabel", "onNext: " + home_page); //主页 Intent homepag = new Intent("qch_app_brower_homepage"); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { @@ -436,15 +427,15 @@ public class HTTPInterface { jsonObject.put("address", address); jsonObject.put("longitude", longitude); jsonObject.put("latitude", latitude); - String a = jsonObject.toString(); - String b = Utils.getMachine(context); - String c = Utils.getHardware(context); +// String a = jsonObject.toString(); +// String b = Utils.getMachine(context); +// String c = Utils.getHardware(context); UpdateAdminSn updateAdminSn = NetWorkManager.getUpdateAdminSnControl(); updateAdminSn.sendAdminSn(Utils.getSerial(), jsonObject.toJSONString(), Utils.getMachine(context), Utils.getHardware(context) - ).subscribeOn(Schedulers.io()) + ).subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Observer() { @Override @@ -469,6 +460,130 @@ public class HTTPInterface { }); } + public static void getAllappPackage(final Context context) { + QueryAllApp queryAllApp = NetWorkManager.getQueryAllAppControl(); + queryAllApp.getAllApp(Utils.getSerial()) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(new Observer>>() { + @Override + public void onSubscribe(@NonNull Disposable d) { + + } + + @Override + public void onNext(@NonNull BaseResponse> listBaseResponse) { + int code = listBaseResponse.code; + if (code == 200) { + Log.e("getAllappPackage", "onNext: " + listBaseResponse.msg); + List appInfoList = listBaseResponse.data; + if (null != appInfoList && appInfoList.size() != 0) { + String s = ""; + for (AppInfo appInfo : appInfoList) { + s += appInfo.getApp_package() + ","; + } + if (s.endsWith(",")) { + s = s.substring(0, s.length() - 1); + } + ApkUtils.writeAppPackageList(context, s); + } else { + ApkUtils.writeAppPackageList(context, "Invalid"); + } + } else { + ApkUtils.writeAppPackageList(context, "Invalid"); + + } + } + + @Override + public void onError(@NonNull Throwable e) { + Log.e("getAllappPackage", "onError: " + e.getMessage()); + } + + @Override + public void onComplete() { + + } + }); + } + + public static void getForceInstall(final Context context) { + ForceInstall forceInstall = NetWorkManager.getForceInstallControl(); + forceInstall.getForceInstall(Utils.getSerial()) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(new Observer>>() { + @Override + public void onSubscribe(@NonNull Disposable d) { + + } + + @Override + public void onNext(@NonNull BaseResponse> listBaseResponse) { + int code = listBaseResponse.code; + if (code == 200) { + List appInfos = listBaseResponse.data; + if (null != appInfos && appInfos.size() != 0) { + getForceInstallState(context, appInfos); + } + }else { + boolean qch_force_app = Settings.System.putString(context.getContentResolver(), "qch_force_app", "invalid"); + Log.e("fht", "qch_force_app:" + qch_force_app + ":" + "invalid"); + } + } + + @Override + public void onError(@NonNull Throwable e) { + Log.e("getForceInstall", "onError: " + e.getMessage()); + } + + @Override + public void onComplete() { + + } + }); + } + + private static void getForceInstallState(Context context, List list) { + if (null != list && list.size() != 0) { + String packageList = ""; + PackageManager pm = context.getPackageManager(); + for (AppInfo appInfo : list) { + packageList += appInfo.getApp_package() + ","; + PackageInfo info = null; + try { + info = pm.getPackageInfo(appInfo.getApp_package(), 0); + } catch (PackageManager.NameNotFoundException e) { + e.printStackTrace(); + } + if (null != info) { + long appVersionCode; + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) { + appVersionCode = info.getLongVersionCode(); + } else { + appVersionCode = info.versionCode; + } + if (appVersionCode < appInfo.getApp_version_code()) { + JSONObject jsonObject = (JSONObject) JSON.toJSON(appInfo); + FileUtils.ariaDownload(context, appInfo.getApp_url(), jsonObject); + } + } else { + JSONObject jsonObject = (JSONObject) JSON.toJSON(appInfo); + FileUtils.ariaDownload(context, appInfo.getApp_url(), jsonObject); + } + } + if (packageList.endsWith(",")) { + packageList = packageList.substring(0, packageList.length() - 1); + boolean qch_force_app = Settings.System.putString(context.getContentResolver(), "qch_force_app", packageList); + Log.e("fht", "qch_force_app:" + qch_force_app + ":" + packageList); + } + } else { + boolean qch_force_app = Settings.System.putString(context.getContentResolver(), "qch_force_app", "invalid"); + Log.e("fht", "qch_force_app:" + qch_force_app + ":" + "invalid"); + } + } + + //获取设备信息接口 // public static synchronized void checkDevicesInfo(final Handler handler) { // OkGo.get(UrlAddress.SNINFO) diff --git a/app/src/main/java/com/info/sn/network/NetWorkManager.java b/app/src/main/java/com/info/sn/network/NetWorkManager.java index 4dcf77d..58f8de8 100644 --- a/app/src/main/java/com/info/sn/network/NetWorkManager.java +++ b/app/src/main/java/com/info/sn/network/NetWorkManager.java @@ -9,6 +9,7 @@ import com.info.sn.network.api.BindDevices; import com.info.sn.network.api.Browser; import com.info.sn.network.api.ForceInstall; import com.info.sn.network.api.Label; +import com.info.sn.network.api.QueryAllApp; import com.info.sn.network.api.QuerySnAppStart; import com.info.sn.network.api.SNInfo; import com.info.sn.network.api.Setting; @@ -59,6 +60,8 @@ public class NetWorkManager { private static QuerySnAppStart appStartControl; private static APPJump appJumpControl; private static UpdateAdminSn updateAdminSnControl; + private static QueryAllApp queryAllAppControl; + public static SNInfo getsnInfoControl() { if (null == snInfoControl) { @@ -190,6 +193,17 @@ public class NetWorkManager { } return updateAdminSnControl; } - + public static QueryAllApp getQueryAllAppControl() { + if (null == queryAllAppControl) { + Retrofit retrofit = new Retrofit.Builder() + .client(client) + .baseUrl(ROOT_URL) + .addConverterFactory(gsonConverterFactory) + .addCallAdapterFactory(rxJavaCallAdapterFactory) + .build(); + queryAllAppControl = retrofit.create(QueryAllApp.class); + } + return queryAllAppControl; + } } diff --git a/app/src/main/java/com/info/sn/network/UrlAddress.java b/app/src/main/java/com/info/sn/network/UrlAddress.java index dd12577..9687d7b 100644 --- a/app/src/main/java/com/info/sn/network/UrlAddress.java +++ b/app/src/main/java/com/info/sn/network/UrlAddress.java @@ -13,8 +13,8 @@ public class UrlAddress { //获取当前最顶层应用和电量 public final static String SEND_DRIVE_STATE = ROOT_URL + "Online/online"; - public final static String GET_ALL_PACKAGENAME = ROOT_URL + "App/allPackageSn"; - //获取所有应用包名 + public final static String GET_ALL_PACKAGE = ROOT_URL + "app/queryAllApp"; + //获取所有应用 public final static String BIND_DEVICES = ROOT_URL + "sn/bindSn"; //绑定设备消息 public final static String GET_SETTINGS = ROOT_URL + "control/getSetting"; diff --git a/app/src/main/java/com/info/sn/network/api/QueryAllApp.java b/app/src/main/java/com/info/sn/network/api/QueryAllApp.java new file mode 100644 index 0000000..07a4ec6 --- /dev/null +++ b/app/src/main/java/com/info/sn/network/api/QueryAllApp.java @@ -0,0 +1,18 @@ +package com.info.sn.network.api; + +import com.info.sn.bean.AppInfo; +import com.info.sn.bean.BaseResponse; +import com.info.sn.network.UrlAddress; + +import java.util.List; + +import io.reactivex.Observable; +import retrofit2.http.GET; +import retrofit2.http.Query; + +public interface QueryAllApp { + @GET(UrlAddress.GET_ALL_PACKAGE) + Observable>> getAllApp( + @Query("sn") String sn + ); +} diff --git a/app/src/main/java/com/info/sn/receiver/BootReceiver.java b/app/src/main/java/com/info/sn/receiver/BootReceiver.java index 991aaa2..0624518 100644 --- a/app/src/main/java/com/info/sn/receiver/BootReceiver.java +++ b/app/src/main/java/com/info/sn/receiver/BootReceiver.java @@ -16,19 +16,21 @@ public class BootReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { - Log.e("SNBootReceiver", intent.getAction()); - if (intent.getAction().equals("android.intent.action.BOOT_COMPLETED") - || intent.getAction().equals("android.intent.action.BATTERY_CHANGED") - || intent.getAction().equals("android.intent.action.BATTERY_LEVEL_CHANGED") - || intent.getAction().equals("android.intent.action.BATTERY_LOW") - || intent.getAction().equals("android.intent.action.BATTERY_OKAY") - || intent.getAction().equals("android.intent.action.ACTION_POWER_CONNECTED") - || intent.getAction().equals("android.intent.action.ACTION_POWER_DISCONNECTED") - || intent.getAction().equals("android.intent.action.DATE_CHANGED") - || intent.getAction().equals("android.intent.action.TIME_TICK") - || intent.getAction().equals("android.intent.action.USER_PRESENT") - || intent.getAction().equals("android.intent.action.ACTION_SCREEN_ON") - || intent.getAction().equals("android.intent.action.ACTION_SCREEN_OFF")) { + String action = intent.getAction(); + Log.e("SNBootReceiver", action); + if (action.equals(Intent.ACTION_BOOT_COMPLETED) + || action.equals(Intent.ACTION_BATTERY_CHANGED) + || action.equals(Intent.ACTION_BATTERY_LOW) + || action.equals(Intent.ACTION_BATTERY_OKAY) + || action.equals(Intent.ACTION_POWER_CONNECTED) + || action.equals(Intent.ACTION_POWER_DISCONNECTED) + || action.equals(Intent.ACTION_DATE_CHANGED) + || action.equals(Intent.ACTION_TIME_TICK) + || action.equals(Intent.ACTION_USER_PRESENT) + || action.equals(Intent.ACTION_SCREEN_ON) + || action.equals(Intent.ACTION_SCREEN_OFF) + || action.equals("android.intent.action.BATTERY_LEVEL_CHANGED") + ) { // Intent i = new Intent(context, InitJpushServer.class); // context.startService(i); context.startService(new Intent(context, GuardService.class)); @@ -36,6 +38,5 @@ public class BootReceiver extends BroadcastReceiver { context.startService(new Intent(context, InitJpushServer.class)); context.startService(new Intent(context, MyDownloadService.class)); } - } } diff --git a/app/src/main/java/com/info/sn/service/InitJpushServer.java b/app/src/main/java/com/info/sn/service/InitJpushServer.java index c6df8c1..c08533a 100644 --- a/app/src/main/java/com/info/sn/service/InitJpushServer.java +++ b/app/src/main/java/com/info/sn/service/InitJpushServer.java @@ -1,10 +1,27 @@ package com.info.sn.service; import android.app.Service; +import android.content.Context; import android.content.Intent; import android.os.IBinder; +import android.util.Log; import com.info.sn.KeepAliveConnection; +import com.info.sn.activity.MainActivity; +import com.info.sn.bean.AppInfo; +import com.info.sn.bean.BaseResponse; +import com.info.sn.network.HTTPInterface; +import com.info.sn.network.NetWorkManager; +import com.info.sn.network.api.ForceInstall; +import com.info.sn.utils.Utils; + +import java.util.List; + +import io.reactivex.Observer; +import io.reactivex.android.schedulers.AndroidSchedulers; +import io.reactivex.annotations.NonNull; +import io.reactivex.disposables.Disposable; +import io.reactivex.schedulers.Schedulers; public class InitJpushServer extends Service { public InitJpushServer() { @@ -28,6 +45,10 @@ public class InitJpushServer extends Service { @Override public int onStartCommand(Intent intent, int flags, int startId) { // HTTPInterface.checkDevicesInfo(InitJpushServer.this); + HTTPInterface.getAllappPackage(InitJpushServer.this); + HTTPInterface.getForceInstall(InitJpushServer.this); return START_STICKY; } + + } diff --git a/app/src/main/java/com/info/sn/utils/ApkUtils.java b/app/src/main/java/com/info/sn/utils/ApkUtils.java index 923110c..05077b2 100644 --- a/app/src/main/java/com/info/sn/utils/ApkUtils.java +++ b/app/src/main/java/com/info/sn/utils/ApkUtils.java @@ -12,6 +12,7 @@ import android.net.Uri; import android.os.Binder; import android.os.Build; import android.provider.Settings; +import android.text.TextUtils; import android.util.Log; import android.view.View; @@ -33,6 +34,7 @@ import java.io.OutputStream; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.util.ArrayList; +import java.util.Arrays; import java.util.Enumeration; import java.util.List; import java.util.zip.ZipEntry; @@ -659,4 +661,69 @@ public class ApkUtils { } } + public static void addShortcut(Context context, String packageList) { + if (TextUtils.isEmpty(packageList)) { + return; + } + String[] stringList = packageList.split(","); + List packages = new ArrayList<>(Arrays.asList(stringList)); + String installedList = ""; + for (String s : packages) { + if (s.equals("com.jiaoguanyi.store") || s.equals("com.jiaoguanyi.appstore")) { + continue; + } + if (!ApkUtils.isAvailable(context, s)) { + continue; + } +// ApkUtils.getStartActivityName(context, s); + installedList += s + ","; + Log.e("addShortcut", s); + } + if (installedList.length() != 0) { + installedList = installedList.substring(0, installedList.length() - 1); + } else { + Log.e("addShortcut", installedList); + } + boolean qch_force_app = Settings.System.putString(context.getContentResolver(), "qch_launcher_icon_app", installedList); +// String old = Settings.System.getString(context.getContentResolver(), "qch_launcher_icon_app"); +// Log.e("addShortcut", old); + Log.e("addShortcut", "putstring:" + qch_force_app); + } + + + public static void writeAppPackageList(Context context, String result) { + ApkUtils.addShortcut(context, result);//开机之后添加图标到桌面 + String appstore = "com.jiaoguanyi.appstore"; + String store = "com.jiaoguanyi.store"; + String infosn = "com.info.sn"; + String appstoreuiui = "com.appstore.uiui"; + String jgy1 = "com.uiuios.jgy1"; + String jgy2 = "com.uiuios.jgy2"; + if (!TextUtils.isEmpty(result)) { + if (!result.contains(appstore)) { + result = result + "," + appstore; + } + if (!result.contains(store)) { + result = result + "," + store; + } + if (!result.contains(jgy1)) { + result = result + "," + jgy1; + } + if (!result.contains(jgy2)) { + result = result + "," + jgy2; + } + if (!result.contains(infosn)) { + result = result + "," + infosn; + } + if (!result.contains(appstoreuiui)) { + result = result + "," + appstoreuiui; + } + boolean qch_app_forbid = Settings.System.putString(context.getContentResolver(), "qch_app_forbid", result); + Log.e("fht", "qch_app_forbid :" + result + ":" + qch_app_forbid); + } else { + Log.e("fht", "writeAppPackageList is null:"); + } + } + + } diff --git a/app/src/main/java/com/info/sn/utils/Utils.java b/app/src/main/java/com/info/sn/utils/Utils.java index fbd62a4..327eba6 100644 --- a/app/src/main/java/com/info/sn/utils/Utils.java +++ b/app/src/main/java/com/info/sn/utils/Utils.java @@ -1371,6 +1371,10 @@ public class Utils { } public static void rebootDevices(Context context) { + if (BuildConfig.DEBUG) { + ToastUtil.show("收到重启设备推送消息"); + return; + } Intent iReboot = new Intent(Intent.ACTION_REBOOT); iReboot.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(iReboot);