From ad3d6745b1268b7ff1ae1b32dfe5fcef6c648359 Mon Sep 17 00:00:00 2001 From: Administrator <981964879@qq.com> Date: Fri, 4 Dec 2020 18:36:54 +0800 Subject: [PATCH] =?UTF-8?q?version:=20update:2020.12.04=20fix:=E4=BF=AE?= =?UTF-8?q?=E5=A4=8D=E5=BC=BA=E5=88=B6=E5=AE=89=E8=A3=85=E5=BE=97=E5=BA=94?= =?UTF-8?q?=E7=94=A8=E5=8F=AF=E4=BB=A5=E5=88=A0=E9=99=A4bug=EF=BC=8C?= =?UTF-8?q?=E4=B8=8A=E4=BC=A0=E5=88=97=E8=A1=A8=E4=B8=8D=E6=98=BE=E7=A4=BA?= =?UTF-8?q?=E7=B3=BB=E7=BB=9F=E5=BA=94=E7=94=A8=EF=BC=8C=E5=8A=A0=E5=85=A5?= =?UTF-8?q?=E8=BF=9C=E7=A8=8B=E7=BB=93=E6=9D=9Fapp=20add:?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/build.gradle | 10 +- app/src/main/AndroidManifest.xml | 125 ++-- .../com/mjsheng/myappstore/MyApplication.java | 2 +- .../myappstore/activity/MainActivity.java | 585 ++++++++-------- .../myappstore/activity/TopActivity.java | 31 + .../myappstore/bean/UploadAppInfo.java | 9 + .../myappstore/network/HTTPInterface.java | 10 +- .../myappstore/receiver/MyJPushReceiver.java | 525 +++++++------- .../myappstore/receiver/NewAppReceiver.java | 124 ++-- .../myappstore/server/GuardService.java | 41 ++ .../myappstore/server/InitJpushServer.java | 639 +++++++++++------- .../mjsheng/myappstore/utils/ApkUtils.java | 94 +++ .../mjsheng/myappstore/utils/Configure.java | 3 + .../myappstore/utils/ServiceAliveUtils.java | 6 +- .../myappstore/utils/SysSettingUtils.java | 532 +++++++++++++++ app/src/main/res/drawable-hdpi/logo.png | Bin 0 -> 37763 bytes app/src/main/res/layout-land/activity_top.xml | 21 + app/src/main/res/layout-port/activity_top.xml | 21 + app/src/main/res/values/colors.xml | 6 +- jiaoguanyiInfo.iml | 5 +- 20 files changed, 1902 insertions(+), 887 deletions(-) create mode 100644 app/src/main/java/com/mjsheng/myappstore/activity/TopActivity.java create mode 100644 app/src/main/java/com/mjsheng/myappstore/utils/SysSettingUtils.java create mode 100644 app/src/main/res/drawable-hdpi/logo.png create mode 100644 app/src/main/res/layout-land/activity_top.xml create mode 100644 app/src/main/res/layout-port/activity_top.xml diff --git a/app/build.gradle b/app/build.gradle index 9566ddd..03221e3 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -38,8 +38,8 @@ android { productFlavors { official { flavorDimensions "default" - versionCode 1026 - versionName "2.0.2.6"// 正式jiaoguanyi.com 双数正式 单数测试 + versionCode 1027 + versionName "2.0.2.7"// 正式jiaoguanyi.com 双数正式 单数测试 /*********************************极光推送************************************/ manifestPlaceholders = [ JPUSH_PKGNAME: "com.jiaoguanyi.appstore", @@ -89,9 +89,9 @@ android { } newl { flavorDimensions "default" - versionCode 157 -// versionCode 1028 - versionName "1.1.7" + versionCode 159 +// versionCode 1029 + versionName "1.1.9" /*********************************极光推送************************************/ manifestPlaceholders = [ JPUSH_PKGNAME: "com.jiaoguanyi.appstore", diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 1b5acc3..4dcef92 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -4,6 +4,9 @@ package="com.mjsheng.myappstore" android:sharedUserId="android.uid.system"> + + + @@ -12,31 +15,28 @@ + + - - - - + + + - + tools:ignore="ProtectedPermissions" /> - - + tools:ignore="ProtectedPermissions" /> - + android:protectionLevel="signature" /> @@ -47,36 +47,31 @@ - - - - - - - - - - - - - - - - - - - - - - - + android:maxSdkVersion="23" /> + + + + + + + + + + + + + + + + + + + + - @@ -147,34 +143,32 @@ - - - - - - - - - - - - - + + + + + + + + + + + + + - - - - - - - - - - - - - + + + + + + + + + + + @@ -337,14 +331,11 @@ android:value="developer-default" /> - - + android:value="${JPUSH_APPKEY}" /> - + android:value="5b68c8ee39800ff700a3762b6e028b78" /> diff --git a/app/src/main/java/com/mjsheng/myappstore/MyApplication.java b/app/src/main/java/com/mjsheng/myappstore/MyApplication.java index 24b4056..b022a61 100644 --- a/app/src/main/java/com/mjsheng/myappstore/MyApplication.java +++ b/app/src/main/java/com/mjsheng/myappstore/MyApplication.java @@ -593,7 +593,7 @@ public class MyApplication extends MultiDexApplication { } } - public static void setJpushAlias() { + synchronized public static void setJpushAlias() { Log.e("jiguangInterface", "10s后重新设置alias"); Observable.timer(10000, TimeUnit.MILLISECONDS) .observeOn(rx.android.schedulers.AndroidSchedulers.mainThread()) diff --git a/app/src/main/java/com/mjsheng/myappstore/activity/MainActivity.java b/app/src/main/java/com/mjsheng/myappstore/activity/MainActivity.java index 0f8e873..c5efb83 100644 --- a/app/src/main/java/com/mjsheng/myappstore/activity/MainActivity.java +++ b/app/src/main/java/com/mjsheng/myappstore/activity/MainActivity.java @@ -91,6 +91,7 @@ import com.mjsheng.myappstore.utils.ExampleUtil; import com.mjsheng.myappstore.utils.MySQLData; import com.mjsheng.myappstore.utils.SPUtils; import com.mjsheng.myappstore.utils.SaveListUtils; +import com.mjsheng.myappstore.utils.SysSettingUtils; import com.mjsheng.myappstore.utils.ToastUtil; import com.mjsheng.myappstore.utils.Utils; import com.mjsheng.myappstore.utils.update.AllDialogShowStrategy; @@ -383,6 +384,10 @@ public class MainActivity extends AppCompatActivity implements AMapLocationListe private void initData() { Log.e("mjhsneg", "gagagag--------------------------" + Utils.getSerial()); + int first = (int) SPUtils.get(MainActivity.this, "first_connect", 0); + if (first == 0) { + SysSettingUtils.setDefaultSetting(MainActivity.this);//设置系统管控 + } getLockedState(mHandler); // MyApplication.getInstance().getWhitePackageList(); @@ -579,7 +584,8 @@ public class MainActivity extends AppCompatActivity implements AMapLocationListe HTTPInterface.setHideDesktopIcon(MainActivity.this);//设置桌面图标隐藏 getDeselectID();//ID管控 getAppLimitApi();//写入可被安装的包名 - getAppInfo();//上传APP信息 +// getAppInfo();//上传APP信息 + ApkUtils.getAppInfo(MainActivity.this);//上传APP信息 getSystemSetting();//设置系统管控 getNetAndLaunchSetting();//联网管控 // Aria.download(this).removeAllTask(true); @@ -624,6 +630,7 @@ public class MainActivity extends AppCompatActivity implements AMapLocationListe break; case 2: StudentsInfo info = com.alibaba.fastjson.JSONObject.parseObject(String.valueOf(msg.obj), StudentsInfo.class); + SPUtils.put(MainActivity.this, "admin_id", info.getAdmin_id()); if (null != info) { if (info.getBatch().equals("")) { tv_batch.setVisibility(View.GONE); @@ -909,65 +916,68 @@ public class MainActivity extends AppCompatActivity implements AMapLocationListe super.finish(); } - private void getAppInfo() { - ArrayList appList = new ArrayList<>(); //用来存储获取的应用信息数据 - List packages = getPackageManager().getInstalledPackages(0); - - for (int i = 0; i < packages.size(); i++) { - PackageInfo packageInfo = packages.get(i); - UploadAppInfo uploadAppInfo = new UploadAppInfo(); - uploadAppInfo.setApp_name(packageInfo.applicationInfo.loadLabel(getPackageManager()).toString()); - uploadAppInfo.setPackage_name(packageInfo.packageName); - uploadAppInfo.setId(i); - String firstInstallTime = Utils.transferLongToDate(packageInfo.firstInstallTime); - uploadAppInfo.setInstall_time(firstInstallTime); - uploadAppInfo.setVersionCode(String.valueOf(packageInfo.versionCode)); - // Log.e("mjsheng", "------------------" + uploadAppInfo); - if ((packageInfo.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) == 1) { - } else { - //非系统应用 - appList.add(uploadAppInfo); - } - - - } - - // Log.e("mjsheng", "UploadAppInfo========" + appList.toString()); - - Gson gson = new Gson(); - String jsonString = gson.toJson(appList); - Log.e("mjsheng", "json========" + jsonString); - - UploadAppInfoApi uploadAppInfoApi = Network.getUploadAppInfoApi(); - uploadAppInfoApi.getUploadAppInfoApi(Configure.HTTP_KEY, Utils.getSerial(), jsonString) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(new Observer() { - @Override - public void onSubscribe(Disposable d) { - - } - - @Override - public void onNext(ResponseBody responseBody) { - try { - Log.e("mjhseng", "上传的结果" + responseBody.string()); - } catch (IOException e) { - e.printStackTrace(); - } - } - - @Override - public void onError(Throwable e) { - Log.e("mjsheng", "UploadAppInfoApi=onError:"); - } - - @Override - public void onComplete() { - - } - }); - } +// private void getAppInfo() { +// ArrayList appList = new ArrayList<>(); //用来存储获取的应用信息数据 +// List packages = getPackageManager().getInstalledPackages(0); +// +// for (int i = 0; i < packages.size(); i++) { +// PackageInfo packageInfo = packages.get(i); +// if (ApkUtils.systemapp.contains(packageInfo.packageName)) { +// continue; +// } +// UploadAppInfo uploadAppInfo = new UploadAppInfo(); +// uploadAppInfo.setApp_name(packageInfo.applicationInfo.loadLabel(getPackageManager()).toString()); +// uploadAppInfo.setPackage_name(packageInfo.packageName); +// uploadAppInfo.setId(i); +// String firstInstallTime = Utils.transferLongToDate(packageInfo.firstInstallTime); +// uploadAppInfo.setInstall_time(firstInstallTime); +// uploadAppInfo.setVersionCode(String.valueOf(packageInfo.versionCode)); +// // Log.e("mjsheng", "------------------" + uploadAppInfo); +// if ((packageInfo.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) == 1) { +// } else { +// //非系统应用 +// appList.add(uploadAppInfo); +// } +// +// +// } +// +// // Log.e("mjsheng", "UploadAppInfo========" + appList.toString()); +// +// Gson gson = new Gson(); +// String jsonString = gson.toJson(appList); +// Log.e("mjsheng", "json========" + jsonString); +// +// UploadAppInfoApi uploadAppInfoApi = Network.getUploadAppInfoApi(); +// uploadAppInfoApi.getUploadAppInfoApi(Configure.HTTP_KEY, Utils.getSerial(), jsonString) +// .subscribeOn(Schedulers.io()) +// .observeOn(AndroidSchedulers.mainThread()) +// .subscribe(new Observer() { +// @Override +// public void onSubscribe(Disposable d) { +// +// } +// +// @Override +// public void onNext(ResponseBody responseBody) { +// try { +// Log.e("mjhseng", "上传的结果" + responseBody.string()); +// } catch (IOException e) { +// e.printStackTrace(); +// } +// } +// +// @Override +// public void onError(Throwable e) { +// Log.e("mjsheng", "UploadAppInfoApi=onError:"); +// } +// +// @Override +// public void onComplete() { +// +// } +// }); +// } private void initJpush() { @@ -1307,12 +1317,14 @@ public class MainActivity extends AppCompatActivity implements AMapLocationListe } else { Aria.download(this).resumeAllTask(); } + break; case -200: boolean qch_force_app = Settings.System.putString(MainActivity.this.getContentResolver(), "qch_force_app", "invalid"); Log.e("fht", "qch_force_app:" + qch_force_app); break; default: LogUtils.e("getForceDownload is error:" + forceDownloadBean.getMsg()); + break; } } @@ -1636,241 +1648,244 @@ public class MainActivity extends AppCompatActivity implements AMapLocationListe private BluetoothAdapter mBluetoothAdapter; private void SettingSysData(JSONObject data) { -// try { - int setting_call = changeNum(data.optInt("setting_call")); - boolean qch_call_forbid = Settings.System.putInt(getContentResolver(), "qch_call_forbid", setting_call); - Log.e("SystemSetting", "qch_call_forbid---------" + qch_call_forbid); + SPUtils.put(MainActivity.this, "first_connect", 1); + SysSettingUtils.setSystemSetting(MainActivity.this, data.toString()); - int setting_phone = changeNum(data.optInt("setting_phone")); - boolean qch_white_list_on = Settings.System.putInt(getContentResolver(), "qch_white_list_on", setting_phone); - Log.e("SystemSetting", "qch_white_list_on---------" + qch_white_list_on); - - String setting_phones = data.optString("setting_phones"); - boolean qch_white_list_Array = Settings.System.putString(getContentResolver(), "qch_white_list_Array", setting_phones); - // ToastTool.show("qch_call_forbid::"+setting_call+"----setting_phones::"+setting_phones+"----"+qch_white_list_Array+"---"+qch_call_forbid); - Log.e("SystemSetting", "qch_white_list_Array---------" + qch_white_list_Array + "---" + setting_phones); - - int setting_memory = changeNum(data.optInt("setting_memory")); - boolean qch_sdcard_forbid_on = Settings.System.putInt(getContentResolver(), "qch_sdcard_forbid_on", setting_memory); - Log.e("SystemSetting", "qch_sdcard_forbid_on---------" + qch_sdcard_forbid_on); - - - //USB数据功能管控 - //仅充电:usb_charge - //MTP模式:usb_mtp - //Midi模式:usb_midi - String setting_usb = data.optString("setting_usb"); - if (!BuildConfig.DEBUG) { - boolean qch_usb_choose = Settings.System.putString(getContentResolver(), "qch_usb_choose", setting_usb); - Log.e("SystemSetting", "qch_usb_choose---------" + qch_usb_choose); - String usbStatus = ""; - switch (setting_usb) { - case "usb_charge": - usbStatus = "qch_action_usb_usb_charge"; - break; - case "usb_mtp": - usbStatus = "qch_action_usb_usb_mtp"; - break; - case "usb_midi": - usbStatus = "qch_action_usb_usb_midi"; - break; - - } - Intent usbIntent = new Intent(usbStatus).setPackage("com.android.settings"); - sendBroadcast(usbIntent); - } - - - //otg开关 -// int setting_otg = changeNum(data.optInt("setting_otg")); -// Log.e("SystemSetting", "setting_otg---------" + setting_otg); -// String otgStatus = ""; -// switch (setting_otg) { +//// try { +// int setting_call = changeNum(data.optInt("setting_call")); +// boolean qch_call_forbid = Settings.System.putInt(getContentResolver(), "qch_call_forbid", setting_call); +// Log.e("SystemSetting", "qch_call_forbid---------" + qch_call_forbid); +// +// int setting_phone = changeNum(data.optInt("setting_phone")); +// boolean qch_white_list_on = Settings.System.putInt(getContentResolver(), "qch_white_list_on", setting_phone); +// Log.e("SystemSetting", "qch_white_list_on---------" + qch_white_list_on); +// +// String setting_phones = data.optString("setting_phones"); +// boolean qch_white_list_Array = Settings.System.putString(getContentResolver(), "qch_white_list_Array", setting_phones); +// // ToastTool.show("qch_call_forbid::"+setting_call+"----setting_phones::"+setting_phones+"----"+qch_white_list_Array+"---"+qch_call_forbid); +// Log.e("SystemSetting", "qch_white_list_Array---------" + qch_white_list_Array + "---" + setting_phones); +// +// int setting_memory = changeNum(data.optInt("setting_memory")); +// boolean qch_sdcard_forbid_on = Settings.System.putInt(getContentResolver(), "qch_sdcard_forbid_on", setting_memory); +// Log.e("SystemSetting", "qch_sdcard_forbid_on---------" + qch_sdcard_forbid_on); +// +// +// //USB数据功能管控 +// //仅充电:usb_charge +// //MTP模式:usb_mtp +// //Midi模式:usb_midi +// String setting_usb = data.optString("setting_usb"); +// if (!BuildConfig.DEBUG) { +// boolean qch_usb_choose = Settings.System.putString(getContentResolver(), "qch_usb_choose", setting_usb); +// Log.e("SystemSetting", "qch_usb_choose---------" + qch_usb_choose); +// String usbStatus = ""; +// switch (setting_usb) { +// case "usb_charge": +// usbStatus = "qch_action_usb_usb_charge"; +// break; +// case "usb_mtp": +// usbStatus = "qch_action_usb_usb_mtp"; +// break; +// case "usb_midi": +// usbStatus = "qch_action_usb_usb_midi"; +// break; +// +// } +// Intent usbIntent = new Intent(usbStatus).setPackage("com.android.settings"); +// sendBroadcast(usbIntent); +// } +// +// +// //otg开关 +//// int setting_otg = changeNum(data.optInt("setting_otg")); +//// Log.e("SystemSetting", "setting_otg---------" + setting_otg); +//// String otgStatus = ""; +//// switch (setting_otg) { +//// case 0: +//// otgStatus = "qch_otg_open"; +//// break; +//// case 1: +//// otgStatus = "qch_otg_forbid"; +//// break; +//// } +//// Intent otgIntent = new Intent(otgStatus); +//// sendBroadcast(otgIntent); +// +// //蓝牙开关 +// int setting_bht = changeNum(data.optInt("setting_bht"));//总开关 +// int setting_bhtvideo = changeNum(data.optInt("setting_bhtvideo"));//蓝牙音频开关 +// int setting_bluetooth = changeNum(data.optInt("setting_bluetooth"));//蓝牙传输开关 +// +// boolean qch_bht_forbid_on = Settings.System.putInt(getContentResolver(), "qch_bht_forbid_on", setting_bht);//写入系统数据库 +// Log.e("SystemSetting", "qch_bht_forbid_on:" + qch_bht_forbid_on); +// if (qch_bht_forbid_on) {//成功 +// if (null == mBluetoothAdapter) { +// mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();//获取默认蓝牙适配器 +// } +// if (setting_bht == 0) {//蓝牙总开关开启 +// String setting_context = data.optString("setting_context");// +// if (setting_bhtvideo == 0) { +// if (null != setting_context && !setting_context.equals("") && !setting_context.equals(" ") && !setting_context.equals("null")) { +// Log.e("SystemSetting", "setting_context:" + setting_context); +// Settings.System.putString(getContentResolver(), "qch_bhtvideo_forbid_on", setting_context); +// } else { +// Settings.System.putString(getContentResolver(), "qch_bhtvideo_forbid_on", "Empty"); +// } +// } else if (setting_bhtvideo == 1) { +// Settings.System.putString(getContentResolver(), "qch_bhtvideo_forbid_on", "Empty"); +// } +// Settings.System.putInt(getContentResolver(), "qch_bt_forbid_on", setting_bluetooth); +// } else { +// mBluetoothAdapter.disable();//设置关闭时关闭蓝牙 +// } +// +// } +// +// //热点 +//// ConnectivityManager mConnectivityManager =(ConnectivityManager) getApplicationContext().getSystemService(Context.CONNECTIVITY_SERVICE); +//// mConnectivityManager.stopTethering(ConnectivityManager.TETHERING_WIFI); +//// try { +//// Method method = mConnectivityManager.getClass().getMethod("stopTethering", Integer.TYPE); +//// method.invoke(mConnectivityManager, 0); +//// } catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e) { +//// e.printStackTrace(); +//// } +// +//// ConnectivityManager connManager = (ConnectivityManager) getApplicationContext().getSystemService(Context.CONNECTIVITY_SERVICE); +//// +//// Field iConnMgrField = null; +//// try { +//// iConnMgrField = connManager.getClass().getDeclaredField("mService"); +//// iConnMgrField.setAccessible(true); +//// Object iConnMgr = iConnMgrField.get(connManager); +//// Class iConnMgrClass = Class.forName(iConnMgr.getClass().getName()); +//// +////// if(isEnable){ +////// Method startTethering = iConnMgrClass.getMethod("startTethering", int.class, ResultReceiver.class, boolean.class,String.class); +////// startTethering.invoke(iConnMgr, 0, null, true,context.getPackageName()); +////// }else{ +//// Method startTethering = iConnMgrClass.getMethod("stopTethering", int.class, String.class); +//// startTethering.invoke(iConnMgr, 0, getPackageName()); +////// } +//// +//// } catch (NoSuchFieldException e) { +//// e.printStackTrace(); +//// } catch (NoSuchMethodException e) { +//// e.printStackTrace(); +//// } catch (IllegalAccessException e) { +//// e.printStackTrace(); +//// } catch (InvocationTargetException e) { +//// e.printStackTrace(); +//// } catch (ClassNotFoundException e) { +//// e.printStackTrace(); +//// } +// +// int setting_hotspot = changeNum(data.optInt("setting_hotspot")); +// if (setting_hotspot == 1) { +// Intent intent = new Intent(); +// intent.setAction("qch_hotspot_close"); +// intent.setPackage("com.android.settings"); +// sendStickyBroadcast(intent); +// } +// boolean qch_hotspot_forbid_on = Settings.System.putInt(getContentResolver(), "qch_hotspot_forbid_on", setting_hotspot);//写入系统数据库 +// Log.e("SystemSetting", "qch_hotspot_forbid_on---------" + setting_hotspot); +// Log.e("SystemSetting", "qch_hotspot_forbid_on---------" + qch_hotspot_forbid_on); +// +// //系统导航条显示开关 +// int setting_navigation = changeNum(data.optInt("setting_navigation")); +// boolean qch_hide_navigationBar = Settings.System.putInt(getContentResolver(), "qch_hide_NavigationBar", setting_navigation); +// Log.e("SystemSetting", "qch_hide_navigationBar---------" + qch_hide_navigationBar); +// +// String navigationStatus = ""; +// switch (setting_navigation) { +// case 0: +// navigationStatus = "qch_show_NavigationBar"; +// break; +// case 1: +// navigationStatus = "qch_hide_NavigationBar"; +// break; +// +// } +// Intent navIntent = new Intent(navigationStatus).setPackage("com.android.systemui"); +// sendBroadcast(navIntent); +// +// +// //状态栏显示开关 +// int setting_statusbar = changeNum(data.optInt("setting_statusbar")); +// int oldNum = Settings.System.getInt(MainActivity.this.getContentResolver(), "qch_hide_statusBar", 0); +// if (oldNum != setting_statusbar) { +// boolean qch_hide_statusBar = Settings.System.putInt(MainActivity.this.getContentResolver(), "qch_hide_statusBar", setting_statusbar); +// Log.e("SystemSetting", "qch_hide_statusBar---------" + qch_hide_statusBar); +// String statusbarStatus = ""; +// switch (setting_statusbar) { // case 0: -// otgStatus = "qch_otg_open"; +// statusbarStatus = "qch_show_statusBar"; // break; // case 1: -// otgStatus = "qch_otg_forbid"; +// statusbarStatus = "qch_hide_statusBar"; // break; // } -// Intent otgIntent = new Intent(otgStatus); -// sendBroadcast(otgIntent); - - //蓝牙开关 - int setting_bht = changeNum(data.optInt("setting_bht"));//总开关 - int setting_bhtvideo = changeNum(data.optInt("setting_bhtvideo"));//蓝牙音频开关 - int setting_bluetooth = changeNum(data.optInt("setting_bluetooth"));//蓝牙传输开关 - - boolean qch_bht_forbid_on = Settings.System.putInt(getContentResolver(), "qch_bht_forbid_on", setting_bht);//写入系统数据库 - Log.e("SystemSetting", "qch_bht_forbid_on:" + qch_bht_forbid_on); - if (qch_bht_forbid_on) {//成功 - if (null == mBluetoothAdapter) { - mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();//获取默认蓝牙适配器 - } - if (setting_bht == 0) {//蓝牙总开关开启 - String setting_context = data.optString("setting_context");// - if (setting_bhtvideo == 0) { - if (null != setting_context && !setting_context.equals("") && !setting_context.equals(" ") && !setting_context.equals("null")) { - Log.e("SystemSetting", "setting_context:" + setting_context); - Settings.System.putString(getContentResolver(), "qch_bhtvideo_forbid_on", setting_context); - } else { - Settings.System.putString(getContentResolver(), "qch_bhtvideo_forbid_on", "Empty"); - } - } else if (setting_bhtvideo == 1) { - Settings.System.putString(getContentResolver(), "qch_bhtvideo_forbid_on", "Empty"); - } - Settings.System.putInt(getContentResolver(), "qch_bt_forbid_on", setting_bluetooth); - } else { - mBluetoothAdapter.disable();//设置关闭时关闭蓝牙 - } - - } - - //热点 -// ConnectivityManager mConnectivityManager =(ConnectivityManager) getApplicationContext().getSystemService(Context.CONNECTIVITY_SERVICE); -// mConnectivityManager.stopTethering(ConnectivityManager.TETHERING_WIFI); -// try { -// Method method = mConnectivityManager.getClass().getMethod("stopTethering", Integer.TYPE); -// method.invoke(mConnectivityManager, 0); -// } catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e) { -// e.printStackTrace(); +// Intent statusIntent = new Intent(statusbarStatus).setPackage("com.android.systemui"); +// MainActivity.this.sendBroadcast(statusIntent); // } - -// ConnectivityManager connManager = (ConnectivityManager) getApplicationContext().getSystemService(Context.CONNECTIVITY_SERVICE); // -// Field iConnMgrField = null; -// try { -// iConnMgrField = connManager.getClass().getDeclaredField("mService"); -// iConnMgrField.setAccessible(true); -// Object iConnMgr = iConnMgrField.get(connManager); -// Class iConnMgrClass = Class.forName(iConnMgr.getClass().getName()); -// -//// if(isEnable){ -//// Method startTethering = iConnMgrClass.getMethod("startTethering", int.class, ResultReceiver.class, boolean.class,String.class); -//// startTethering.invoke(iConnMgr, 0, null, true,context.getPackageName()); -//// }else{ -// Method startTethering = iConnMgrClass.getMethod("stopTethering", int.class, String.class); -// startTethering.invoke(iConnMgr, 0, getPackageName()); -//// } -// -// } catch (NoSuchFieldException e) { -// e.printStackTrace(); -// } catch (NoSuchMethodException e) { -// e.printStackTrace(); -// } catch (IllegalAccessException e) { -// e.printStackTrace(); -// } catch (InvocationTargetException e) { -// e.printStackTrace(); -// } catch (ClassNotFoundException e) { -// e.printStackTrace(); +// //摄像头开关 +// int setting_camera = changeNum(data.optInt("setting_camera")); +// Settings.System.putInt(MainActivity.this.getContentResolver(), "qch_app_camera", setting_camera); +//// ApkUtils.hideSystemSettingAPP(MainActivity.this, "com.mediatek.camera"); +// Log.e("SystemSetting", "setting_camera---------" + setting_camera); +// String cameraStatus = ""; +// switch (setting_camera) { +// case 0: +// cameraStatus = "qch_camera_open"; +// break; +// case 1: +// cameraStatus = "qch_camera_forbid"; +// break; // } - - int setting_hotspot = changeNum(data.optInt("setting_hotspot")); - if (setting_hotspot == 1) { - Intent intent = new Intent(); - intent.setAction("qch_hotspot_close"); - intent.setPackage("com.android.settings"); - sendStickyBroadcast(intent); - } - boolean qch_hotspot_forbid_on = Settings.System.putInt(getContentResolver(), "qch_hotspot_forbid_on", setting_hotspot);//写入系统数据库 - Log.e("SystemSetting", "qch_hotspot_forbid_on---------" + setting_hotspot); - Log.e("SystemSetting", "qch_hotspot_forbid_on---------" + qch_hotspot_forbid_on); - - //系统导航条显示开关 - int setting_navigation = changeNum(data.optInt("setting_navigation")); - boolean qch_hide_navigationBar = Settings.System.putInt(getContentResolver(), "qch_hide_NavigationBar", setting_navigation); - Log.e("SystemSetting", "qch_hide_navigationBar---------" + qch_hide_navigationBar); - - String navigationStatus = ""; - switch (setting_navigation) { - case 0: - navigationStatus = "qch_show_NavigationBar"; - break; - case 1: - navigationStatus = "qch_hide_NavigationBar"; - break; - - } - Intent navIntent = new Intent(navigationStatus).setPackage("com.android.systemui"); - sendBroadcast(navIntent); - - - //状态栏显示开关 - int setting_statusbar = changeNum(data.optInt("setting_statusbar")); - int oldNum = Settings.System.getInt(MainActivity.this.getContentResolver(), "qch_hide_statusBar", 0); - if (oldNum != setting_statusbar) { - boolean qch_hide_statusBar = Settings.System.putInt(MainActivity.this.getContentResolver(), "qch_hide_statusBar", setting_statusbar); - Log.e("SystemSetting", "qch_hide_statusBar---------" + qch_hide_statusBar); - String statusbarStatus = ""; - switch (setting_statusbar) { - case 0: - statusbarStatus = "qch_show_statusBar"; - break; - case 1: - statusbarStatus = "qch_hide_statusBar"; - break; - } - Intent statusIntent = new Intent(statusbarStatus).setPackage("com.android.systemui"); - MainActivity.this.sendBroadcast(statusIntent); - } - - //摄像头开关 - int setting_camera = changeNum(data.optInt("setting_camera")); - Settings.System.putInt(MainActivity.this.getContentResolver(), "qch_app_camera", setting_camera); -// ApkUtils.hideSystemSettingAPP(MainActivity.this, "com.mediatek.camera"); - Log.e("SystemSetting", "setting_camera---------" + setting_camera); - String cameraStatus = ""; - switch (setting_camera) { - case 0: - cameraStatus = "qch_camera_open"; - break; - case 1: - cameraStatus = "qch_camera_forbid"; - break; - } - Intent cameraIntent = new Intent(cameraStatus).setPackage("com.android.settings"); - sendBroadcast(cameraIntent); - - //added:2019.12.6 - //设置5个app的开关 - //时钟 - int deskclock = changeNum(data.optInt("setting_clock")); - Settings.System.putInt(MainActivity.this.getContentResolver(), "qch_app_deskclock", deskclock); - ApkUtils.hideSystemSettingAPP(MainActivity.this, "com.android.deskclock"); - Log.e("SystemSetting", "qch_app_deskclock" + deskclock); - //录音机 - int soundrecorder = changeNum(data.optInt("setting_recording")); - Settings.System.putInt(MainActivity.this.getContentResolver(), "qch_app_soundrecorder", soundrecorder); - ApkUtils.hideSystemSettingAPP(MainActivity.this, "com.android.soundrecorder"); - Log.e("SystemSetting", "qch_app_soundrecorder" + soundrecorder); - //音乐 - int music = changeNum(data.optInt("setting_music")); - Settings.System.putInt(MainActivity.this.getContentResolver(), "qch_app_music", music); - ApkUtils.hideSystemSettingAPP(MainActivity.this, "com.android.music"); - Log.e("SystemSetting", "qch_app_music" + music); - //图库 - int gallery = changeNum(data.optInt("setting_picture")); - Settings.System.putInt(MainActivity.this.getContentResolver(), "qch_app_gallery", gallery); - ApkUtils.hideSystemSettingAPP(MainActivity.this, "com.android.gallery3d"); - Log.e("SystemSetting", "qch_app_gallery" + gallery); - //壁纸 - int wallpaper = changeNum(data.optInt("setting_wallpaper")); - Settings.System.putInt(MainActivity.this.getContentResolver(), "qch_app_wallpaper", wallpaper); - Log.e("SystemSetting", "qch_app_wallpaper" + wallpaper); - //文件管理器 - int filemanager = changeNum(data.optInt("setting_file")); - Settings.System.putInt(MainActivity.this.getContentResolver(), "qch_app_filemanager", filemanager); - if (Build.VERSION.SDK_INT < Build.VERSION_CODES.O) { - ApkUtils.hideSystemSettingAPP(MainActivity.this, "com.mediatek.filemanager"); - } else { - ApkUtils.hideSystemSettingAPP(MainActivity.this, "com.android.documentsui"); - } - Log.e("SystemSetting", "qch_app_filemanager" + filemanager); - -// } catch (Exception e) { -// e.printStackTrace(); -// Log.e("mjhseng", "SettingSysData---2error::" + e.getMessage()); +// Intent cameraIntent = new Intent(cameraStatus).setPackage("com.android.settings"); +// sendBroadcast(cameraIntent); +// +// //added:2019.12.6 +// //设置5个app的开关 +// //时钟 +// int deskclock = changeNum(data.optInt("setting_clock")); +// Settings.System.putInt(MainActivity.this.getContentResolver(), "qch_app_deskclock", deskclock); +// ApkUtils.hideSystemSettingAPP(MainActivity.this, "com.android.deskclock"); +// Log.e("SystemSetting", "qch_app_deskclock" + deskclock); +// //录音机 +// int soundrecorder = changeNum(data.optInt("setting_recording")); +// Settings.System.putInt(MainActivity.this.getContentResolver(), "qch_app_soundrecorder", soundrecorder); +// ApkUtils.hideSystemSettingAPP(MainActivity.this, "com.android.soundrecorder"); +// Log.e("SystemSetting", "qch_app_soundrecorder" + soundrecorder); +// //音乐 +// int music = changeNum(data.optInt("setting_music")); +// Settings.System.putInt(MainActivity.this.getContentResolver(), "qch_app_music", music); +// ApkUtils.hideSystemSettingAPP(MainActivity.this, "com.android.music"); +// Log.e("SystemSetting", "qch_app_music" + music); +// //图库 +// int gallery = changeNum(data.optInt("setting_picture")); +// Settings.System.putInt(MainActivity.this.getContentResolver(), "qch_app_gallery", gallery); +// ApkUtils.hideSystemSettingAPP(MainActivity.this, "com.android.gallery3d"); +// Log.e("SystemSetting", "qch_app_gallery" + gallery); +// //壁纸 +// int wallpaper = changeNum(data.optInt("setting_wallpaper")); +// Settings.System.putInt(MainActivity.this.getContentResolver(), "qch_app_wallpaper", wallpaper); +// Log.e("SystemSetting", "qch_app_wallpaper" + wallpaper); +// //文件管理器 +// int filemanager = changeNum(data.optInt("setting_file")); +// Settings.System.putInt(MainActivity.this.getContentResolver(), "qch_app_filemanager", filemanager); +// if (Build.VERSION.SDK_INT < Build.VERSION_CODES.O) { +// ApkUtils.hideSystemSettingAPP(MainActivity.this, "com.mediatek.filemanager"); +// } else { +// ApkUtils.hideSystemSettingAPP(MainActivity.this, "com.android.documentsui"); // } +// Log.e("SystemSetting", "qch_app_filemanager" + filemanager); +// +//// } catch (Exception e) { +//// e.printStackTrace(); +//// Log.e("mjhseng", "SettingSysData---2error::" + e.getMessage()); +//// } } private int changeNum(int status) { diff --git a/app/src/main/java/com/mjsheng/myappstore/activity/TopActivity.java b/app/src/main/java/com/mjsheng/myappstore/activity/TopActivity.java new file mode 100644 index 0000000..6e944b5 --- /dev/null +++ b/app/src/main/java/com/mjsheng/myappstore/activity/TopActivity.java @@ -0,0 +1,31 @@ +package com.mjsheng.myappstore.activity; + +import android.content.Intent; +import android.support.v7.app.AppCompatActivity; +import android.os.Bundle; +import android.view.KeyEvent; + +import com.mjsheng.myappstore.R; + +public class TopActivity extends AppCompatActivity { + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_top); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + startActivity(new Intent(this, this.getClass())); + } + + @Override + public boolean onKeyDown(int keyCode, KeyEvent event) { + if (keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_DOWN) { + return false; + } + return super.onKeyDown(keyCode, event); + } +} diff --git a/app/src/main/java/com/mjsheng/myappstore/bean/UploadAppInfo.java b/app/src/main/java/com/mjsheng/myappstore/bean/UploadAppInfo.java index 5bd9d2e..4a78186 100644 --- a/app/src/main/java/com/mjsheng/myappstore/bean/UploadAppInfo.java +++ b/app/src/main/java/com/mjsheng/myappstore/bean/UploadAppInfo.java @@ -12,6 +12,7 @@ public class UploadAppInfo { private String app_name; private String install_time; private String versionCode; + private int state; private int id; public String getPackage_name() { @@ -54,6 +55,14 @@ public class UploadAppInfo { this.versionCode = versionCode; } + public int getState() { + return state; + } + + public void setState(int state) { + this.state = state; + } + @Override public String toString() { return "UploadAppInfo{" + diff --git a/app/src/main/java/com/mjsheng/myappstore/network/HTTPInterface.java b/app/src/main/java/com/mjsheng/myappstore/network/HTTPInterface.java index 5f33d61..24e80f4 100644 --- a/app/src/main/java/com/mjsheng/myappstore/network/HTTPInterface.java +++ b/app/src/main/java/com/mjsheng/myappstore/network/HTTPInterface.java @@ -530,14 +530,14 @@ public class HTTPInterface { String white = data.getString("white"); if (white != null && !white.equals("")) { boolean whiteList = Settings.System.putString(context.getContentResolver(), "DeselectBrowserArray", white); - Log.e("SystemSetting", "setBrowserList---------" + whiteList + ":" + white); + Log.e("SystemSetting", "setBrowserList----white-----" + whiteList + ":" + white); } else { Settings.System.putString(context.getContentResolver(), "DeselectBrowserArray", " "); } String black = data.getString("black"); if (black != null && !black.equals("")) { boolean blackList = Settings.System.putString(context.getContentResolver(), "qch_webblack_url", black); - Log.e("SystemSetting", "setBrowserList---------" + blackList + ":" + black); + Log.e("SystemSetting", "setBrowserList----black-----" + blackList + ":" + black); } else { Settings.System.putString(context.getContentResolver(), "qch_webblack_url", " "); } @@ -570,8 +570,8 @@ public class HTTPInterface { int code = jsonObject.getInteger("code"); String msg = jsonObject.getString("msg"); String data = jsonObject.getString("data"); - Log.e("setHideDesktopIcon", data); ApkUtils.showAllAPP(context); + Log.e("setHideDesktopIcon", "data" + data); if (code == 200) { if (data != null && !"".equals(data)) { List newList = Arrays.asList(data.split(","));//新的list @@ -780,7 +780,7 @@ public class HTTPInterface { @Override public void onError(Throwable e) { - Log.e("updateDeviceInfo",e.getMessage()); + Log.e("updateDeviceInfo", e.getMessage()); } @Override @@ -788,6 +788,6 @@ public class HTTPInterface { } }); + ApkUtils.getAppInfo(context); } - } \ No newline at end of file diff --git a/app/src/main/java/com/mjsheng/myappstore/receiver/MyJPushReceiver.java b/app/src/main/java/com/mjsheng/myappstore/receiver/MyJPushReceiver.java index 111ccab..d157575 100644 --- a/app/src/main/java/com/mjsheng/myappstore/receiver/MyJPushReceiver.java +++ b/app/src/main/java/com/mjsheng/myappstore/receiver/MyJPushReceiver.java @@ -1,5 +1,6 @@ package com.mjsheng.myappstore.receiver; +import android.app.ActivityManager; import android.bluetooth.BluetoothAdapter; import android.content.BroadcastReceiver; import android.content.Context; @@ -41,6 +42,8 @@ import com.mjsheng.myappstore.utils.CmdUtil; import com.mjsheng.myappstore.utils.Configure; import com.mjsheng.myappstore.utils.MySQLData; import com.mjsheng.myappstore.utils.SaveListUtils; +import com.mjsheng.myappstore.utils.ServiceAliveUtils; +import com.mjsheng.myappstore.utils.SysSettingUtils; import com.mjsheng.myappstore.utils.ToastUtil; import com.mjsheng.myappstore.utils.Utils; @@ -49,9 +52,11 @@ import org.json.JSONException; import org.json.JSONObject; import java.io.File; +import java.lang.reflect.Method; import java.util.ArrayList; import java.util.Iterator; import java.util.List; +import java.util.concurrent.locks.Lock; import cn.jpush.android.api.JPushInterface; import io.reactivex.Observable; @@ -114,6 +119,11 @@ public class MyJPushReceiver extends BroadcastReceiver { private final String GET_DEVICES_INFO = "23";//获取设备详细信息 + private final String LOCK_SCREEN = "24";//霸屏 + + private final String UNLOCK_SCREEN = "25";//取消霸屏 + + private final String KILL_SERVER = "26";//结束进程 private Context mContext; @@ -291,245 +301,306 @@ public class MyJPushReceiver extends BroadcastReceiver { case GET_DEVICES_INFO: HTTPInterface.updateDeviceInfo(mContext); break; + case LOCK_SCREEN: + try { + JSONObject jSONObject = new JSONObject(extras); + String name = jSONObject.getString("name"); + setLock_screen(1,context,name); + } catch (JSONException e) { + e.printStackTrace(); + } + break; + case UNLOCK_SCREEN: + setLock_screen(0,context,""); + break; + case KILL_SERVER: + try { + JSONObject jSONObject = new JSONObject(extras); + String packages = jSONObject.getString("package_name"); + killBackgroundProcesses(context, packages); + } catch (JSONException e) { + e.printStackTrace(); + } + break; } } + private void setLock_screen(int state, Context context, String name) { + if (ServiceAliveUtils.isServiceAlice()) { + context.startService(new Intent(context, InitJpushServer.class)); + } + Intent intent = new Intent(); + intent.putExtra("name", name); + if (state == 1) { + intent.setAction(InitJpushServer.LockScreenReceiver.action_lock); + } else if (state == 0) { + intent.setAction(InitJpushServer.LockScreenReceiver.action_unlock); + } + context.sendBroadcast(intent); + } + + public void killBackgroundProcesses(Context context, String processName) { + // mIsScanning = true; + ActivityManager activityManager = (ActivityManager) context.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(); + } + + } + + private BluetoothAdapter mBluetoothAdapter; private void SettingSysData(String extras) { - try { - JSONObject data = new JSONObject(extras); - int setting_call = changeNum(data.optInt("setting_call")); - boolean qch_call_forbid = Settings.System.putInt(mContext.getContentResolver(), "qch_call_forbid", setting_call); - Log.e("SystemSetting", "qch_call_forbid---------" + setting_call); - Log.e("SystemSetting", "qch_call_forbid---------" + qch_call_forbid); - - int setting_phone = changeNum(data.optInt("setting_phone")); - boolean qch_white_list_on = Settings.System.putInt(mContext.getContentResolver(), "qch_white_list_on", setting_phone); - Log.e("SystemSetting", "qch_call_forbid---------" + setting_phone); - Log.e("SystemSetting", "qch_white_list_on---------" + qch_white_list_on); - - String setting_phones = data.optString("setting_phones"); - boolean qch_white_list_Array = Settings.System.putString(mContext.getContentResolver(), "qch_white_list_Array", setting_phones); - Log.e("SystemSetting", "qch_call_forbid---------" + setting_phones); - // ToastTool.show("qch_call_forbid::"+setting_call+"----setting_phones::"+setting_phones+"----"+qch_white_list_Array+"---"+qch_call_forbid); - Log.e("SystemSetting", "qch_white_list_Array---------" + qch_white_list_Array + "---" + setting_phones); - - int setting_memory = changeNum(data.optInt("setting_memory")); - boolean qch_sdcard_forbid_on = Settings.System.putInt(mContext.getContentResolver(), "qch_sdcard_forbid_on", setting_memory); - Log.e("SystemSetting", "qch_sdcard_forbid_on---------" + setting_memory); - Log.e("SystemSetting", "qch_sdcard_forbid_on---------" + qch_sdcard_forbid_on); - - - //USB数据功能管控 - //仅充电:usb_charge - //MTP模式:usb_mtp - //Midi模式:usb_midi - String setting_usb = data.optString("setting_usb"); - if (!BuildConfig.DEBUG) { - boolean qch_usb_choose = Settings.System.putString(mContext.getContentResolver(), "qch_usb_choose", setting_usb); - Log.e("SystemSetting", "qch_usb_choose---------" + setting_usb); - Log.e("SystemSetting", "qch_usb_choose---------" + qch_usb_choose); - String usbStatus = ""; - switch (setting_usb) { - case "usb_charge": - usbStatus = "qch_action_usb_usb_charge"; - break; - case "usb_mtp": - usbStatus = "qch_action_usb_usb_mtp"; - break; - case "usb_midi": - usbStatus = "qch_action_usb_usb_midi"; - break; - } - Intent usbIntent = new Intent(usbStatus).setPackage("com.android.settings"); - mContext.sendBroadcast(usbIntent); - } - - //otg开关 -// int setting_otg = changeNum(data.optInt("setting_otg")); -// Log.e("SystemSetting", "setting_otg---------" + setting_otg); -// String otgStatus = ""; -// switch (setting_otg) { + SysSettingUtils.setSystemSetting(mContext,extras); +// try { +// JSONObject data = new JSONObject(extras); +// int setting_call = changeNum(data.optInt("setting_call")); +// boolean qch_call_forbid = Settings.System.putInt(mContext.getContentResolver(), "qch_call_forbid", setting_call); +// Log.e("SystemSetting", "qch_call_forbid---------" + setting_call); +// Log.e("SystemSetting", "qch_call_forbid---------" + qch_call_forbid); +// +// int setting_phone = changeNum(data.optInt("setting_phone")); +// boolean qch_white_list_on = Settings.System.putInt(mContext.getContentResolver(), "qch_white_list_on", setting_phone); +// Log.e("SystemSetting", "qch_call_forbid---------" + setting_phone); +// Log.e("SystemSetting", "qch_white_list_on---------" + qch_white_list_on); +// +// String setting_phones = data.optString("setting_phones"); +// boolean qch_white_list_Array = Settings.System.putString(mContext.getContentResolver(), "qch_white_list_Array", setting_phones); +// Log.e("SystemSetting", "qch_call_forbid---------" + setting_phones); +// // ToastTool.show("qch_call_forbid::"+setting_call+"----setting_phones::"+setting_phones+"----"+qch_white_list_Array+"---"+qch_call_forbid); +// Log.e("SystemSetting", "qch_white_list_Array---------" + qch_white_list_Array + "---" + setting_phones); +// +// int setting_memory = changeNum(data.optInt("setting_memory")); +// boolean qch_sdcard_forbid_on = Settings.System.putInt(mContext.getContentResolver(), "qch_sdcard_forbid_on", setting_memory); +// Log.e("SystemSetting", "qch_sdcard_forbid_on---------" + setting_memory); +// Log.e("SystemSetting", "qch_sdcard_forbid_on---------" + qch_sdcard_forbid_on); +// +// +// //USB数据功能管控 +// //仅充电:usb_charge +// //MTP模式:usb_mtp +// //Midi模式:usb_midi +// String setting_usb = data.optString("setting_usb"); +// if (!BuildConfig.DEBUG) { +// boolean qch_usb_choose = Settings.System.putString(mContext.getContentResolver(), "qch_usb_choose", setting_usb); +// Log.e("SystemSetting", "qch_usb_choose---------" + setting_usb); +// Log.e("SystemSetting", "qch_usb_choose---------" + qch_usb_choose); +// String usbStatus = ""; +// switch (setting_usb) { +// case "usb_charge": +// usbStatus = "qch_action_usb_usb_charge"; +// break; +// case "usb_mtp": +// usbStatus = "qch_action_usb_usb_mtp"; +// break; +// case "usb_midi": +// usbStatus = "qch_action_usb_usb_midi"; +// break; +// } +// Intent usbIntent = new Intent(usbStatus).setPackage("com.android.settings"); +// mContext.sendBroadcast(usbIntent); +// } +// +// //otg开关 +//// int setting_otg = changeNum(data.optInt("setting_otg")); +//// Log.e("SystemSetting", "setting_otg---------" + setting_otg); +//// String otgStatus = ""; +//// switch (setting_otg) { +//// case 0: +//// otgStatus = "qch_otg_open"; +//// break; +//// case 1: +//// otgStatus = "qch_otg_forbid"; +//// break; +//// } +//// Intent otgIntent = new Intent(otgStatus); +//// mContext.sendBroadcast(otgIntent); +// +// //蓝牙开关 +// int setting_bht = changeNum(data.optInt("setting_bht"));//总开关 +// int setting_bhtvideo = changeNum(data.optInt("setting_bhtvideo"));//蓝牙音频开关 +// int setting_bluetooth = changeNum(data.optInt("setting_bluetooth"));//蓝牙传输开关 +// +// boolean qch_bht_forbid_on = Settings.System.putInt(this.mContext.getContentResolver(), "qch_bht_forbid_on", setting_bht);//写入系统数据库 +// Log.e("SystemSetting", "qch_bht_forbid_on:" + qch_bht_forbid_on); +// if (qch_bht_forbid_on) {//成功 +// if (null == mBluetoothAdapter) { +// mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();//获取默认蓝牙适配器 +// } +// if (setting_bht == 0) {//蓝牙总开关开启 +// String setting_context = data.optString("setting_context");// +// if (setting_bhtvideo == 0) { +// if (null != setting_context && !setting_context.equals("") && !setting_context.equals(" ") && !setting_context.equals("null")) { +// Log.e("SystemSetting", "setting_context:" + setting_context); +// Settings.System.putString(this.mContext.getContentResolver(), "qch_bhtvideo_forbid_on", setting_context); +// } else { +// Settings.System.putString(this.mContext.getContentResolver(), "qch_bhtvideo_forbid_on", "Empty"); +// } +// } else if (setting_bhtvideo == 1) { +// Settings.System.putString(this.mContext.getContentResolver(), "qch_bhtvideo_forbid_on", "Empty"); +// } +// Settings.System.putInt(this.mContext.getContentResolver(), "qch_bt_forbid_on", setting_bluetooth); +// } else { +// mBluetoothAdapter.disable();//设置关闭时关闭蓝牙 +// } +// +// } +// +// int setting_hotspot = changeNum(data.optInt("setting_hotspot"));//热点 +// if (setting_hotspot == 1) { +// Intent intent = new Intent(); +// intent.setAction("qch_hotspot_close"); +// intent.setPackage("com.android.settings"); +// this.mContext.sendStickyBroadcast(intent); +// } +// boolean qch_hotspot_forbid_on = Settings.System.putInt(this.mContext.getContentResolver(), "qch_hotspot_forbid_on", setting_hotspot);//写入系统数据库 +// Log.e("SystemSetting", "qch_hotspot_forbid_on---------" + setting_hotspot); +// Log.e("SystemSetting", "qch_hotspot_forbid_on---------" + qch_hotspot_forbid_on); +// +// +// //系统导航条显示开关 +// int setting_navigation = changeNum(data.optInt("setting_navigation")); +// boolean qch_hide_navigationBar = Settings.System.putInt(mContext.getContentResolver(), "qch_hide_NavigationBar", setting_navigation); +// Log.e("SystemSetting", "qch_hide_navigationBar---------" + setting_navigation); +// Log.e("SystemSetting", "qch_hide_navigationBar---------" + qch_hide_navigationBar); +// +// String navigationStatus = ""; +// switch (setting_navigation) { // case 0: -// otgStatus = "qch_otg_open"; +// navigationStatus = "qch_show_NavigationBar"; // break; // case 1: -// otgStatus = "qch_otg_forbid"; +// navigationStatus = "qch_hide_NavigationBar"; +// break; +// +// } +// Intent navIntent = new Intent(navigationStatus).setPackage("com.android.systemui"); +// mContext.sendBroadcast(navIntent); +// +// +// //状态栏显示开关 +// int setting_statusbar = changeNum(data.optInt("setting_statusbar")); +// int oldNum = Settings.System.getInt(mContext.getContentResolver(), "qch_hide_statusBar", 0); +// if (oldNum != setting_statusbar) { +// boolean qch_hide_statusBar = Settings.System.putInt(mContext.getContentResolver(), "qch_hide_statusBar", setting_statusbar); +// Log.e("SystemSetting", "qch_hide_statusBar---------" + qch_hide_statusBar); +// String statusbarStatus = ""; +// switch (setting_statusbar) { +// case 0: +// statusbarStatus = "qch_show_statusBar"; +// break; +// case 1: +// statusbarStatus = "qch_hide_statusBar"; +// break; +// } +// Intent statusIntent = new Intent(statusbarStatus).setPackage("com.android.systemui"); +// mContext.sendBroadcast(statusIntent); +// } +// +// //摄像头开关 +// int setting_camera = changeNum(data.optInt("setting_camera")); +// Settings.System.putInt(this.mContext.getContentResolver(), "qch_app_camera", setting_camera); +//// ApkUtils.hideSystemSettingAPP(this.mContext, "com.mediatek.camera"); +// Log.e("SystemSetting", "setting_camera---------" + setting_camera); +// String cameraStatus = ""; +// switch (setting_camera) { +// case 0: +// cameraStatus = "qch_camera_open"; +// break; +// case 1: +// cameraStatus = "qch_camera_forbid"; // break; // } -// Intent otgIntent = new Intent(otgStatus); -// mContext.sendBroadcast(otgIntent); - - //蓝牙开关 - int setting_bht = changeNum(data.optInt("setting_bht"));//总开关 - int setting_bhtvideo = changeNum(data.optInt("setting_bhtvideo"));//蓝牙音频开关 - int setting_bluetooth = changeNum(data.optInt("setting_bluetooth"));//蓝牙传输开关 - - boolean qch_bht_forbid_on = Settings.System.putInt(this.mContext.getContentResolver(), "qch_bht_forbid_on", setting_bht);//写入系统数据库 - Log.e("SystemSetting", "qch_bht_forbid_on:" + qch_bht_forbid_on); - if (qch_bht_forbid_on) {//成功 - if (null == mBluetoothAdapter) { - mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();//获取默认蓝牙适配器 - } - if (setting_bht == 0) {//蓝牙总开关开启 - String setting_context = data.optString("setting_context");// - if (setting_bhtvideo == 0) { - if (null != setting_context && !setting_context.equals("") && !setting_context.equals(" ")&& !setting_context.equals("null")) { - Log.e("SystemSetting", "setting_context:" + setting_context); - Settings.System.putString(this.mContext.getContentResolver(), "qch_bhtvideo_forbid_on", setting_context); - } else { - Settings.System.putString(this.mContext.getContentResolver(), "qch_bhtvideo_forbid_on", "Empty"); - } - } else if (setting_bhtvideo == 1) { - Settings.System.putString(this.mContext.getContentResolver(), "qch_bhtvideo_forbid_on", "Empty"); - } - Settings.System.putInt(this.mContext.getContentResolver(), "qch_bt_forbid_on", setting_bluetooth); - } else { - mBluetoothAdapter.disable();//设置关闭时关闭蓝牙 - } - - } - - int setting_hotspot = changeNum(data.optInt("setting_hotspot"));//热点 - if (setting_hotspot == 1) { - Intent intent = new Intent(); - intent.setAction("qch_hotspot_close"); - intent.setPackage("com.android.settings"); - this.mContext.sendStickyBroadcast(intent); - } - boolean qch_hotspot_forbid_on = Settings.System.putInt(this.mContext.getContentResolver(), "qch_hotspot_forbid_on", setting_hotspot);//写入系统数据库 - Log.e("SystemSetting", "qch_hotspot_forbid_on---------" + setting_hotspot); - Log.e("SystemSetting", "qch_hotspot_forbid_on---------" + qch_hotspot_forbid_on); - - - //系统导航条显示开关 - int setting_navigation = changeNum(data.optInt("setting_navigation")); - boolean qch_hide_navigationBar = Settings.System.putInt(mContext.getContentResolver(), "qch_hide_NavigationBar", setting_navigation); - Log.e("SystemSetting", "qch_hide_navigationBar---------" + setting_navigation); - Log.e("SystemSetting", "qch_hide_navigationBar---------" + qch_hide_navigationBar); - - String navigationStatus = ""; - switch (setting_navigation) { - case 0: - navigationStatus = "qch_show_NavigationBar"; - break; - case 1: - navigationStatus = "qch_hide_NavigationBar"; - break; - - } - Intent navIntent = new Intent(navigationStatus).setPackage("com.android.systemui"); - mContext.sendBroadcast(navIntent); - - - //状态栏显示开关 - int setting_statusbar = changeNum(data.optInt("setting_statusbar")); - int oldNum = Settings.System.getInt(mContext.getContentResolver(), "qch_hide_statusBar", 0); - if (oldNum != setting_statusbar) { - boolean qch_hide_statusBar = Settings.System.putInt(mContext.getContentResolver(), "qch_hide_statusBar", setting_statusbar); - Log.e("SystemSetting", "qch_hide_statusBar---------" + qch_hide_statusBar); - String statusbarStatus = ""; - switch (setting_statusbar) { - case 0: - statusbarStatus = "qch_show_statusBar"; - break; - case 1: - statusbarStatus = "qch_hide_statusBar"; - break; - } - Intent statusIntent = new Intent(statusbarStatus).setPackage("com.android.systemui"); - mContext.sendBroadcast(statusIntent); - } - - //摄像头开关 - int setting_camera = changeNum(data.optInt("setting_camera")); - Settings.System.putInt(this.mContext.getContentResolver(), "qch_app_camera", setting_camera); -// ApkUtils.hideSystemSettingAPP(this.mContext, "com.mediatek.camera"); - Log.e("SystemSetting", "setting_camera---------" + setting_camera); - String cameraStatus = ""; - switch (setting_camera) { - case 0: - cameraStatus = "qch_camera_open"; - break; - case 1: - cameraStatus = "qch_camera_forbid"; - break; - } - Intent cameraIntent = new Intent(cameraStatus).setPackage("com.android.settings"); - mContext.sendBroadcast(cameraIntent); - - //影音管控开关 - int setting_tfmedia = changeNum(data.optInt("setting_tfmedia")); - Settings.System.putInt(this.mContext.getContentResolver(), "qch_tfmedia_forbid", setting_tfmedia); - Log.e("SystemSetting", "qch_tfmedia_forbid---------" + setting_tfmedia); - - if (setting_tfmedia == 1) { - JSONArray jSONArray = null; - try { - jSONArray = data.getJSONArray("setting_tfmedia_format"); - - int i = 0; - StringBuffer stringBuffer = new StringBuffer(); - while (!jSONArray.isNull(i)) { - stringBuffer.append(jSONArray.getString(i)); - stringBuffer.append(","); - i++; - } - stringBuffer.deleteCharAt(stringBuffer.length() - 1); - String s = Settings.System.getString(this.mContext.getContentResolver(), "qch_tfmedia_filetypes");//影音管控 - Log.e("SystemSetting", "qch_tfmedia_filetypes old" + s); - boolean b = Settings.System.putString(this.mContext.getContentResolver(), "qch_tfmedia_filetypes", stringBuffer.toString());//影音管控 - Log.e("SystemSetting", "qch_tfmedia_filetypes---------" + b + ":" + stringBuffer.toString()); - - } catch (JSONException e) { - Log.e("SystemSetting", "qch_tfmedia_filetypes---------" + e.getMessage()); - - } - } else { - Settings.System.putInt(this.mContext.getContentResolver(), "qch_tfmedia_forbid", 0); - } - //added:2019.12.6 - //设置5个app的开关 - //时钟 - int deskclock = changeNum(data.optInt("setting_clock")); - Settings.System.putInt(this.mContext.getContentResolver(), "qch_app_deskclock", deskclock); - ApkUtils.hideSystemSettingAPP(this.mContext, "com.android.deskclock"); - Log.e("SystemSetting", "qch_app_deskclock" + deskclock); - //录音机 - int soundrecorder = changeNum(data.optInt("setting_recording")); - Settings.System.putInt(this.mContext.getContentResolver(), "qch_app_soundrecorder", soundrecorder); - ApkUtils.hideSystemSettingAPP(this.mContext, "com.android.soundrecorder"); - Log.e("SystemSetting", "qch_app_soundrecorder" + soundrecorder); - //音乐 - int music = changeNum(data.optInt("setting_music")); - Settings.System.putInt(this.mContext.getContentResolver(), "qch_app_music", music); - ApkUtils.hideSystemSettingAPP(this.mContext, "com.android.music"); - Log.e("SystemSetting", "qch_app_music" + music); - //图库 - int gallery = changeNum(data.optInt("setting_picture")); - Settings.System.putInt(this.mContext.getContentResolver(), "qch_app_gallery", gallery); - ApkUtils.hideSystemSettingAPP(this.mContext, "com.android.gallery3d"); - Log.e("SystemSetting", "qch_app_gallery" + gallery); - //壁纸 - int wallpaper = changeNum(data.optInt("setting_wallpaper")); - Settings.System.putInt(this.mContext.getContentResolver(), "qch_app_wallpaper", wallpaper); - Log.e("SystemSetting", "qch_app_wallpaper" + wallpaper); - //文件管理器 - int filemanager = changeNum(data.optInt("setting_file")); - Settings.System.putInt(this.mContext.getContentResolver(), "qch_app_filemanager", filemanager); - if (Build.VERSION.SDK_INT < Build.VERSION_CODES.O) { - ApkUtils.hideSystemSettingAPP(this.mContext, "com.mediatek.filemanager"); - } else { - ApkUtils.hideSystemSettingAPP(this.mContext, "com.android.documentsui"); - } - Log.e("SystemSetting", "qch_app_filemanager" + filemanager); - - } catch (Exception e) { - e.printStackTrace(); - Log.e("mjhseng", "SettingSysData---3error::" + e.getMessage()); - } +// Intent cameraIntent = new Intent(cameraStatus).setPackage("com.android.settings"); +// mContext.sendBroadcast(cameraIntent); +// +// //影音管控开关 +// int setting_tfmedia = changeNum(data.optInt("setting_tfmedia")); +// Settings.System.putInt(this.mContext.getContentResolver(), "qch_tfmedia_forbid", setting_tfmedia); +// Log.e("SystemSetting", "qch_tfmedia_forbid---------" + setting_tfmedia); +// +// if (setting_tfmedia == 1) { +// JSONArray jSONArray = null; +// try { +// jSONArray = data.getJSONArray("setting_tfmedia_format"); +// +// int i = 0; +// StringBuffer stringBuffer = new StringBuffer(); +// while (!jSONArray.isNull(i)) { +// stringBuffer.append(jSONArray.getString(i)); +// stringBuffer.append(","); +// i++; +// } +// stringBuffer.deleteCharAt(stringBuffer.length() - 1); +// String s = Settings.System.getString(this.mContext.getContentResolver(), "qch_tfmedia_filetypes");//影音管控 +// Log.e("SystemSetting", "qch_tfmedia_filetypes old" + s); +// boolean b = Settings.System.putString(this.mContext.getContentResolver(), "qch_tfmedia_filetypes", stringBuffer.toString());//影音管控 +// Log.e("SystemSetting", "qch_tfmedia_filetypes---------" + b + ":" + stringBuffer.toString()); +// +// } catch (JSONException e) { +// Log.e("SystemSetting", "qch_tfmedia_filetypes---------" + e.getMessage()); +// +// } +// } else { +// Settings.System.putInt(this.mContext.getContentResolver(), "qch_tfmedia_forbid", 0); +// } +// //added:2019.12.6 +// //设置5个app的开关 +// //时钟 +// int deskclock = changeNum(data.optInt("setting_clock")); +// Settings.System.putInt(this.mContext.getContentResolver(), "qch_app_deskclock", deskclock); +// ApkUtils.hideSystemSettingAPP(this.mContext, "com.android.deskclock"); +// Log.e("SystemSetting", "qch_app_deskclock" + deskclock); +// //录音机 +// int soundrecorder = changeNum(data.optInt("setting_recording")); +// Settings.System.putInt(this.mContext.getContentResolver(), "qch_app_soundrecorder", soundrecorder); +// ApkUtils.hideSystemSettingAPP(this.mContext, "com.android.soundrecorder"); +// Log.e("SystemSetting", "qch_app_soundrecorder" + soundrecorder); +// //音乐 +// int music = changeNum(data.optInt("setting_music")); +// Settings.System.putInt(this.mContext.getContentResolver(), "qch_app_music", music); +// ApkUtils.hideSystemSettingAPP(this.mContext, "com.android.music"); +// Log.e("SystemSetting", "qch_app_music" + music); +// //图库 +// int gallery = changeNum(data.optInt("setting_picture")); +// Settings.System.putInt(this.mContext.getContentResolver(), "qch_app_gallery", gallery); +// ApkUtils.hideSystemSettingAPP(this.mContext, "com.android.gallery3d"); +// Log.e("SystemSetting", "qch_app_gallery" + gallery); +// //壁纸 +// int wallpaper = changeNum(data.optInt("setting_wallpaper")); +// Settings.System.putInt(this.mContext.getContentResolver(), "qch_app_wallpaper", wallpaper); +// Log.e("SystemSetting", "qch_app_wallpaper" + wallpaper); +// //文件管理器 +// int filemanager = changeNum(data.optInt("setting_file")); +// Settings.System.putInt(this.mContext.getContentResolver(), "qch_app_filemanager", filemanager); +// if (Build.VERSION.SDK_INT < Build.VERSION_CODES.O) { +// ApkUtils.hideSystemSettingAPP(this.mContext, "com.mediatek.filemanager"); +// } else { +// ApkUtils.hideSystemSettingAPP(this.mContext, "com.android.documentsui"); +// } +// Log.e("SystemSetting", "qch_app_filemanager" + filemanager); +// +// } catch (Exception e) { +// e.printStackTrace(); +// Log.e("mjhseng", "SettingSysData---3error::" + e.getMessage()); +// } } private void doDownloadAndInstall(String s) { diff --git a/app/src/main/java/com/mjsheng/myappstore/receiver/NewAppReceiver.java b/app/src/main/java/com/mjsheng/myappstore/receiver/NewAppReceiver.java index 655cdc3..82db70d 100644 --- a/app/src/main/java/com/mjsheng/myappstore/receiver/NewAppReceiver.java +++ b/app/src/main/java/com/mjsheng/myappstore/receiver/NewAppReceiver.java @@ -96,7 +96,7 @@ public class NewAppReceiver extends BroadcastReceiver { } intent1.putExtra("packageName", packageName); context.sendBroadcast(intent1); - getAppInfo(context); + ApkUtils.getAppInfo(context); } //接收卸载广播 if (action.equals(Intent.ACTION_PACKAGE_REMOVED)) { @@ -121,7 +121,7 @@ public class NewAppReceiver extends BroadcastReceiver { intent1.setAction(Utils.ACTION_PACKAGE_REMOVED); intent1.putExtra("packageName", packageName); context.sendBroadcast(intent1); - getAppInfo(context); + ApkUtils.getAppInfo(context); } // MyApplication.getInstance().getWhitePackageList(); HTTPInterface.getNetAndLaunchSetting(context); @@ -154,63 +154,67 @@ public class NewAppReceiver extends BroadcastReceiver { } } - private void getAppInfo(Context context) { - ArrayList appList = new ArrayList(); //用来存储获取的应用信息数据 - List packages = context.getPackageManager().getInstalledPackages(0); - - for (int i = 0; i < packages.size(); i++) { - PackageInfo packageInfo = packages.get(i); - UploadAppInfo uploadAppInfo = new UploadAppInfo(); - uploadAppInfo.setApp_name(packageInfo.applicationInfo.loadLabel(context.getPackageManager()).toString()); - uploadAppInfo.setPackage_name(packageInfo.packageName); - uploadAppInfo.setId(i); - String firstInstallTime = Utils.transferLongToDate(packageInfo.firstInstallTime); - uploadAppInfo.setInstall_time(firstInstallTime); - uploadAppInfo.setVersionCode(String.valueOf(packageInfo.versionCode)); - - if ((packageInfo.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) == 1) { - } else { - appList.add(uploadAppInfo); - } - - - } - -// Log.e("mjsheng", "UploadAppInfo========" + appList.toString()); - - Gson gson = new Gson(); - String jsonString = gson.toJson(appList); -// Log.e("mjsheng", "json========" + jsonString); - - UploadAppInfoApi uploadAppInfoApi = Network.getUploadAppInfoApi(); - uploadAppInfoApi.getUploadAppInfoApi(Configure.HTTP_KEY, Utils.getSerial(), jsonString) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(new Observer() { - @Override - public void onSubscribe(Disposable d) { - - } - - @Override - public void onNext(ResponseBody responseBody) { - try { - Log.e("mjhseng", "上传的结果" + responseBody.string()); - } catch (IOException e) { - e.printStackTrace(); - } - } - - @Override - public void onError(Throwable e) { - Log.e("mjsheng", "UploadAppInfoApi=onError:"); - } - - @Override - public void onComplete() { - - } - }); - } +// private void getAppInfo(Context context) { +// ArrayList appList = new ArrayList(); //用来存储获取的应用信息数据 +// List packages = context.getPackageManager().getInstalledPackages(0); +// +// for (int i = 0; i < packages.size(); i++) { +// PackageInfo packageInfo = packages.get(i); +// if (ApkUtils.systemapp.contains(packageInfo.packageName)) { +// continue; +// } +// +// UploadAppInfo uploadAppInfo = new UploadAppInfo(); +// uploadAppInfo.setApp_name(packageInfo.applicationInfo.loadLabel(context.getPackageManager()).toString()); +// uploadAppInfo.setPackage_name(packageInfo.packageName); +// uploadAppInfo.setId(i); +// String firstInstallTime = Utils.transferLongToDate(packageInfo.firstInstallTime); +// uploadAppInfo.setInstall_time(firstInstallTime); +// uploadAppInfo.setVersionCode(String.valueOf(packageInfo.versionCode)); +// +// if ((packageInfo.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) == 1) { +// } else { +// appList.add(uploadAppInfo); +// } +// +// +// } +// +//// Log.e("mjsheng", "UploadAppInfo========" + appList.toString()); +// +// Gson gson = new Gson(); +// String jsonString = gson.toJson(appList); +//// Log.e("mjsheng", "json========" + jsonString); +// +// UploadAppInfoApi uploadAppInfoApi = Network.getUploadAppInfoApi(); +// uploadAppInfoApi.getUploadAppInfoApi(Configure.HTTP_KEY, Utils.getSerial(), jsonString) +// .subscribeOn(Schedulers.io()) +// .observeOn(AndroidSchedulers.mainThread()) +// .subscribe(new Observer() { +// @Override +// public void onSubscribe(Disposable d) { +// +// } +// +// @Override +// public void onNext(ResponseBody responseBody) { +// try { +// Log.e("mjhseng", "上传的结果" + responseBody.string()); +// } catch (IOException e) { +// e.printStackTrace(); +// } +// } +// +// @Override +// public void onError(Throwable e) { +// Log.e("mjsheng", "UploadAppInfoApi=onError:"); +// } +// +// @Override +// public void onComplete() { +// +// } +// }); +// } } diff --git a/app/src/main/java/com/mjsheng/myappstore/server/GuardService.java b/app/src/main/java/com/mjsheng/myappstore/server/GuardService.java index 181d3de..e19aa56 100644 --- a/app/src/main/java/com/mjsheng/myappstore/server/GuardService.java +++ b/app/src/main/java/com/mjsheng/myappstore/server/GuardService.java @@ -32,15 +32,24 @@ import com.arialyy.aria.core.Aria; import com.arialyy.aria.core.download.DownloadEntity; import com.arialyy.aria.core.task.DownloadTask; import com.blankj.utilcode.util.LogUtils; +import com.lzy.okgo.OkGo; +import com.lzy.okgo.callback.StringCallback; import com.mjsheng.myappstore.BuildConfig; import com.mjsheng.myappstore.KeepAliveConnection; import com.mjsheng.myappstore.MyApplication; +import com.mjsheng.myappstore.activity.MainActivity; import com.mjsheng.myappstore.utils.ApkUtils; +import com.mjsheng.myappstore.utils.Configure; +import com.mjsheng.myappstore.utils.SPUtils; import com.mjsheng.myappstore.utils.ServiceAliveUtils; import com.mjsheng.myappstore.utils.ToastUtil; +import com.mjsheng.myappstore.utils.Utils; import java.util.List; +import okhttp3.Call; +import okhttp3.Response; + /** * 守护进程 双进程通讯 @@ -217,6 +226,38 @@ public class GuardService extends Service { String app_name = jsonObject.getString("app_name"); String app_package = jsonObject.getString("app_package"); ToastUtil.show(app_name + "\t:下载完成"); + OkGo.post(Configure.HTTP_TAG_DOWNLOAD_URL) + .params("key", Configure.HTTP_KEY) + .params("sn", Utils.getSerial()) + .params("package", packageName) + .tag(this) + .execute(new StringCallback() { + @Override + public void onSuccess(String s, Call call, okhttp3.Response response) { + Log.e("taskComplete",s); + } + + @Override + public void onError(Call call, Response response, Exception e) { + super.onError(call, response, e); + Log.e("taskComplete",":"+e.getMessage()); + } + }); + int userId= (int) SPUtils.get(GuardService.this,"admin_id",0); + long app_size = task.getFileSize(); + OkGo.post(Configure.SEND_DOWNLOAD_FILE_INFO) + .params("key", Configure.HTTP_KEY) + .params("sn", Utils.getSerial()) + .params("userId", userId) + .params("package_name", packageName) + .params("app_size", app_size) + .tag(this) + .execute(new StringCallback() { + @Override + public void onSuccess(String s, Call call, okhttp3.Response response) { + + } + }); // ApkUtils.installApp(filepath); new Thread(new Runnable() { @Override diff --git a/app/src/main/java/com/mjsheng/myappstore/server/InitJpushServer.java b/app/src/main/java/com/mjsheng/myappstore/server/InitJpushServer.java index b2ca152..f9587b8 100644 --- a/app/src/main/java/com/mjsheng/myappstore/server/InitJpushServer.java +++ b/app/src/main/java/com/mjsheng/myappstore/server/InitJpushServer.java @@ -2,11 +2,16 @@ package com.mjsheng.myappstore.server; import android.app.Service; import android.bluetooth.BluetoothAdapter; +import android.content.BroadcastReceiver; +import android.content.Context; import android.content.ContextWrapper; import android.content.Intent; import android.content.IntentFilter; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; +import android.graphics.Color; +import android.graphics.PixelFormat; +import android.net.wifi.WifiManager; import android.os.BatteryManager; import android.os.Build; import android.os.Handler; @@ -14,7 +19,13 @@ import android.os.IBinder; import android.os.Message; import android.provider.Settings; import android.text.TextUtils; +import android.util.DisplayMetrics; import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.WindowManager; +import android.widget.Button; +import android.widget.TextView; import com.alibaba.fastjson.JSON; import com.arialyy.aria.core.Aria; @@ -23,6 +34,9 @@ import com.lzy.okgo.OkGo; import com.lzy.okgo.callback.StringCallback; import com.mjsheng.myappstore.BuildConfig; import com.mjsheng.myappstore.MyApplication; +import com.mjsheng.myappstore.R; +import com.mjsheng.myappstore.activity.MainActivity; +import com.mjsheng.myappstore.activity.TopActivity; import com.mjsheng.myappstore.bean.Batch; import com.mjsheng.myappstore.bean.ForceDownloadBean; import com.mjsheng.myappstore.bean.ForceDownloadData; @@ -33,6 +47,7 @@ import com.mjsheng.myappstore.comm.CommonDatas; import com.mjsheng.myappstore.jpush.TagAliasOperatorHelper; import com.mjsheng.myappstore.network.HTTPInterface; import com.mjsheng.myappstore.network.Network; +import com.mjsheng.myappstore.network.UrlPath; import com.mjsheng.myappstore.network.api.AppLimitApi; import com.mjsheng.myappstore.network.api.DeselectBrowserIDApi; import com.mjsheng.myappstore.network.api.DeselectIDApi; @@ -43,7 +58,9 @@ import com.mjsheng.myappstore.network.api.newapi.GetBatchApi; import com.mjsheng.myappstore.utils.ApkUtils; import com.mjsheng.myappstore.utils.Configure; import com.mjsheng.myappstore.utils.MySQLData; +import com.mjsheng.myappstore.utils.SPUtils; import com.mjsheng.myappstore.utils.SaveListUtils; +import com.mjsheng.myappstore.utils.SysSettingUtils; import com.mjsheng.myappstore.utils.Utils; import org.json.JSONArray; @@ -92,7 +109,7 @@ public class InitJpushServer extends Service { public void onCreate() { Log.e("InitJpushServer", "onCreate"); super.onCreate(); - + registReceiver(); // android.os.Debug.waitForDebugger(); } @@ -104,15 +121,158 @@ public class InitJpushServer extends Service { // String result = Settings.System.getString(getContentResolver(), "qch_app_forbid"); // addShortcut(this, result);//开机之后添加图标到桌面 // } + getScreenLockState(); getAppLimitApi();//获取可以写入的app包名 HTTPInterface.getNetAndLaunchSetting(this); + int first = (int) SPUtils.get(InitJpushServer.this, "first_connect", 0); + if (first == 0) { + SysSettingUtils.setDefaultSetting(InitJpushServer.this);//设置系统管控 + } timerImitate(); // getNetworkState(); Log.e("InitJpushServer", "onStartCommand"); // return super.onStartCommand(intent, flags, startId); +// mHandler.postDelayed(mRunnable, 10 * 1000); return START_STICKY; } + + private void getScreenLockState() { + OkGo.get(Configure.GET_LOCK_SCREEN_STATE) + .params("sn", Utils.getSerial()) + .execute(new StringCallback() { + @Override + public void onSuccess(String s, Call call, Response response) { + com.alibaba.fastjson.JSONObject jsonObject = com.alibaba.fastjson.JSONObject.parseObject(s); + int code = jsonObject.getInteger("code"); + if (code == 200) { + com.alibaba.fastjson.JSONObject data = com.alibaba.fastjson.JSONObject.parseObject(jsonObject.getString("data")); + int lockScreen = data.getInteger("is_screen_lock"); + String name = data.getString("name"); + if (lockScreen == 1) { + showFloatingWindow(name); + } else { + hideFloatingWindow(); + } + } + } + + @Override + public void onError(Call call, Response response, Exception e) { + super.onError(call, response, e); + } + }); + } + + Runnable mRunnable = new Runnable() { + @Override + public void run() { + showTopAcivity(); +// showFloatingWindow(); +// mHandler.postDelayed(this, 10 * 1000); + } + }; + + private static WindowManager windowManager; + private static View topView; + + + private void showFloatingWindow(String name) { + if (Settings.canDrawOverlays(this)) { + // 获取WindowManager服务 + if (null == windowManager) { + windowManager = (WindowManager) getSystemService(WINDOW_SERVICE); + } + DisplayMetrics dm = new DisplayMetrics(); + windowManager.getDefaultDisplay().getRealMetrics(dm); + int width = dm.widthPixels; // 屏幕宽度(像素) + int height = dm.heightPixels; // 屏幕高度(像素) + // 新建悬浮窗控件 + final Button button = new Button(getApplicationContext()); + button.setText("霸屏测试"); + button.setAlpha(0.9f); + button.setBackgroundColor(Color.WHITE); + button.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { +// windowManager.removeView(button); + } + }); + if (null == topView) { + topView = LayoutInflater.from(getApplicationContext()).inflate(R.layout.activity_top, null); + } else { + if (topView.getTag().equals("added")) { + return; + } + } +// topView.setAlpha(0.8f); + TextView textView = topView.findViewById(R.id.textView); + textView.setText(name); + // 设置LayoutParam + WindowManager.LayoutParams layoutParams = new WindowManager.LayoutParams(); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + layoutParams.type = WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY; + } else { + layoutParams.type = WindowManager.LayoutParams.TYPE_PHONE; + } + layoutParams.flags = WindowManager.LayoutParams.FLAG_BLUR_BEHIND; + layoutParams.format = PixelFormat.RGBA_8888; + layoutParams.width = WindowManager.LayoutParams.MATCH_PARENT; + layoutParams.height = WindowManager.LayoutParams.MATCH_PARENT; + layoutParams.x = 0; + layoutParams.y = 0; + + // 将悬浮窗控件添加到WindowManager + windowManager.addView(topView, layoutParams); + topView.setTag("added"); + } + } + + private void hideFloatingWindow() { + if (null == windowManager) { + return; + } + if (null != topView) { + windowManager.removeView(topView); + topView = null; + } + } + + + private LockScreenReceiver lockScreenReceiver; + + private void registReceiver() { + if (null == lockScreenReceiver) { + lockScreenReceiver = new LockScreenReceiver(); + IntentFilter filter = new IntentFilter(); + filter.setPriority(IntentFilter.SYSTEM_HIGH_PRIORITY); + filter.addAction(LockScreenReceiver.action_lock); + filter.addAction(LockScreenReceiver.action_unlock); + registerReceiver(lockScreenReceiver, filter); + } + + } + + + public class LockScreenReceiver extends BroadcastReceiver { + public static final String action_lock = "LockScreenReceiver_lockscreen"; + public static final String action_unlock = "LockScreenReceiver_unlockscreen"; + + @Override + public void onReceive(Context context, Intent intent) { + String action = intent.getAction(); + if (TextUtils.isEmpty(action)) { + return; + } + if (action.equals(action_lock)) { + String name = intent.getStringExtra("name"); + showFloatingWindow(name); + } else if (action.equals(action_unlock)) { + hideFloatingWindow(); + } + } + } + private void initJpush() { TagAliasOperatorHelper.TagAliasBean tagAliasBean = new TagAliasOperatorHelper.TagAliasBean(); tagAliasBean.action = ACTION_SET; @@ -480,6 +640,7 @@ public class InitJpushServer extends Service { break; default: LogUtils.e("getForceDownload is error:" + forceDownloadBean.getMsg()); + break; } } @@ -685,6 +846,7 @@ public class InitJpushServer extends Service { Settings.System.putString(getContentResolver(), "qch_jgy_network_allow", net_ok); Log.e("fht", "not::" + net_ok); } + //app联网管控需要桌面launcher的支持,如果更换第三方launcher功能失效 // Intent intent2 = new Intent("qch_camera_forbid"); @@ -913,241 +1075,244 @@ public class InitJpushServer extends Service { private BluetoothAdapter mBluetoothAdapter; private void SettingSysData(JSONObject data) { - try { - int setting_call = changeNum(data.optInt("setting_call")); - boolean qch_call_forbid = Settings.System.putInt(InitJpushServer.this.getContentResolver(), "qch_call_forbid", setting_call); - Log.e("SystemSetting", "qch_call_forbid---------" + qch_call_forbid); + SPUtils.put(InitJpushServer.this, "first_connect", 1); + SysSettingUtils.setSystemSetting(InitJpushServer.this,data.toString()); - int setting_phone = changeNum(data.optInt("setting_phone")); - boolean qch_white_list_on = Settings.System.putInt(InitJpushServer.this.getContentResolver(), "qch_white_list_on", setting_phone); - Log.e("SystemSetting", "qch_white_list_on---------" + qch_white_list_on); - - String setting_phones = data.optString("setting_phones"); - boolean qch_white_list_Array = Settings.System.putString(InitJpushServer.this.getContentResolver(), "qch_white_list_Array", setting_phones); - // ToastTool.show("qch_call_forbid::"+setting_call+"----setting_phones::"+setting_phones+"----"+qch_white_list_Array+"---"+qch_call_forbid); - Log.e("SystemSetting", "qch_white_list_Array---------" + qch_white_list_Array + "---" + setting_phones); - - int setting_memory = changeNum(data.optInt("setting_memory")); - boolean qch_sdcard_forbid_on = Settings.System.putInt(InitJpushServer.this.getContentResolver(), "qch_sdcard_forbid_on", setting_memory); - Log.e("SystemSetting", "qch_sdcard_forbid_on---------" + qch_sdcard_forbid_on); - - - //USB数据功能管控 - //仅充电:usb_charge - //MTP模式:usb_mtp - //Midi模式:usb_midi - String setting_usb = data.optString("setting_usb"); - if (!BuildConfig.DEBUG) { - boolean qch_usb_choose = Settings.System.putString(InitJpushServer.this.getContentResolver(), "qch_usb_choose", setting_usb); - Log.e("SystemSetting", "qch_usb_choose---------" + qch_usb_choose); - String usbStatus = ""; - switch (setting_usb) { - case "usb_charge": - usbStatus = "qch_action_usb_usb_charge"; - break; - case "usb_mtp": - usbStatus = "qch_action_usb_usb_mtp"; - break; - case "usb_midi": - usbStatus = "qch_action_usb_usb_midi"; - break; - - } - Intent usbIntent = new Intent(usbStatus).setPackage("com.android.settings"); - sendBroadcast(usbIntent); - } - - //otg开关 -// int setting_otg = changeNum(data.optInt("setting_otg")); -// Log.e("SystemSetting", "setting_otg---------" + setting_otg); -// String otgStatus = ""; -// switch (setting_otg) { +// try { +// int setting_call = changeNum(data.optInt("setting_call")); +// boolean qch_call_forbid = Settings.System.putInt(InitJpushServer.this.getContentResolver(), "qch_call_forbid", setting_call); +// Log.e("SystemSetting", "qch_call_forbid---------" + qch_call_forbid); +// +// int setting_phone = changeNum(data.optInt("setting_phone")); +// boolean qch_white_list_on = Settings.System.putInt(InitJpushServer.this.getContentResolver(), "qch_white_list_on", setting_phone); +// Log.e("SystemSetting", "qch_white_list_on---------" + qch_white_list_on); +// +// String setting_phones = data.optString("setting_phones"); +// boolean qch_white_list_Array = Settings.System.putString(InitJpushServer.this.getContentResolver(), "qch_white_list_Array", setting_phones); +// // ToastTool.show("qch_call_forbid::"+setting_call+"----setting_phones::"+setting_phones+"----"+qch_white_list_Array+"---"+qch_call_forbid); +// Log.e("SystemSetting", "qch_white_list_Array---------" + qch_white_list_Array + "---" + setting_phones); +// +// int setting_memory = changeNum(data.optInt("setting_memory")); +// boolean qch_sdcard_forbid_on = Settings.System.putInt(InitJpushServer.this.getContentResolver(), "qch_sdcard_forbid_on", setting_memory); +// Log.e("SystemSetting", "qch_sdcard_forbid_on---------" + qch_sdcard_forbid_on); +// +// +// //USB数据功能管控 +// //仅充电:usb_charge +// //MTP模式:usb_mtp +// //Midi模式:usb_midi +// String setting_usb = data.optString("setting_usb"); +// if (!BuildConfig.DEBUG) { +// boolean qch_usb_choose = Settings.System.putString(InitJpushServer.this.getContentResolver(), "qch_usb_choose", setting_usb); +// Log.e("SystemSetting", "qch_usb_choose---------" + qch_usb_choose); +// String usbStatus = ""; +// switch (setting_usb) { +// case "usb_charge": +// usbStatus = "qch_action_usb_usb_charge"; +// break; +// case "usb_mtp": +// usbStatus = "qch_action_usb_usb_mtp"; +// break; +// case "usb_midi": +// usbStatus = "qch_action_usb_usb_midi"; +// break; +// +// } +// Intent usbIntent = new Intent(usbStatus).setPackage("com.android.settings"); +// sendBroadcast(usbIntent); +// } +// +// //otg开关 +//// int setting_otg = changeNum(data.optInt("setting_otg")); +//// Log.e("SystemSetting", "setting_otg---------" + setting_otg); +//// String otgStatus = ""; +//// switch (setting_otg) { +//// case 0: +//// otgStatus = "qch_otg_open"; +//// break; +//// case 1: +//// otgStatus = "qch_otg_forbid"; +//// break; +//// } +//// Intent otgIntent = new Intent(otgStatus); +//// sendBroadcast(otgIntent); +// +// //蓝牙开关 +// int setting_bht = changeNum(data.optInt("setting_bht"));//总开关 +// int setting_bhtvideo = changeNum(data.optInt("setting_bhtvideo"));//蓝牙音频开关 +// int setting_bluetooth = changeNum(data.optInt("setting_bluetooth"));//蓝牙传输开关 +// +// boolean qch_bht_forbid_on = Settings.System.putInt(InitJpushServer.this.getContentResolver(), "qch_bht_forbid_on", setting_bht);//写入系统数据库 +// Log.e("SystemSetting", "qch_bht_forbid_on:" + qch_bht_forbid_on); +// if (qch_bht_forbid_on) {//成功 +// if (null == mBluetoothAdapter) { +// mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();//获取默认蓝牙适配器 +// } +// if (setting_bht == 0) {//蓝牙总开关开启 +// String setting_context = data.optString("setting_context");// +// if (setting_bhtvideo == 0) { +// if (null != setting_context && !setting_context.equals("") && !setting_context.equals(" ") && !setting_context.equals("null")) { +// Log.e("SystemSetting", "setting_context:" + setting_context); +// Settings.System.putString(InitJpushServer.this.getContentResolver(), "qch_bhtvideo_forbid_on", setting_context); +// } else { +// Settings.System.putString(InitJpushServer.this.getContentResolver(), "qch_bhtvideo_forbid_on", "Empty"); +// } +// } else if (setting_bhtvideo == 1) { +// Settings.System.putString(InitJpushServer.this.getContentResolver(), "qch_bhtvideo_forbid_on", "Empty"); +// } +// Settings.System.putInt(InitJpushServer.this.getContentResolver(), "qch_bt_forbid_on", setting_bluetooth); +// } else { +// mBluetoothAdapter.disable();//设置关闭时关闭蓝牙 +// } +// +// } +// +// int setting_hotspot = changeNum(data.optInt("setting_hotspot"));//热点 +// if (setting_hotspot == 1) { +// Intent intent = new Intent(); +// intent.setAction("qch_hotspot_close"); +// intent.setPackage("com.android.settings"); +// this.sendStickyBroadcast(intent); +// } +// boolean qch_hotspot_forbid_on = Settings.System.putInt(this.getContentResolver(), "qch_hotspot_forbid_on", setting_hotspot);//写入系统数据库 +// Log.e("SystemSetting", "qch_hotspot_forbid_on---------" + setting_hotspot); +// Log.e("SystemSetting", "qch_hotspot_forbid_on---------" + qch_hotspot_forbid_on); +// +// //系统导航条显示开关 +// int setting_navigation = changeNum(data.optInt("setting_navigation")); +// boolean qch_hide_navigationBar = Settings.System.putInt(InitJpushServer.this.getContentResolver(), "qch_hide_NavigationBar", setting_navigation); +// Log.e("SystemSetting", "qch_hide_navigationBar---------" + qch_hide_navigationBar); +// +// String navigationStatus = ""; +// switch (setting_navigation) { // case 0: -// otgStatus = "qch_otg_open"; +// navigationStatus = "qch_show_NavigationBar"; // break; // case 1: -// otgStatus = "qch_otg_forbid"; +// navigationStatus = "qch_hide_NavigationBar"; +// break; +// +// } +// Intent navIntent = new Intent(navigationStatus).setPackage("com.android.systemui"); +// sendBroadcast(navIntent); +// +// +// //状态栏显示开关 +// int setting_statusbar = changeNum(data.optInt("setting_statusbar")); +// int oldNum = Settings.System.getInt(getContentResolver(), "qch_hide_statusBar", 0); +// if (oldNum != setting_statusbar) { +// boolean qch_hide_statusBar = Settings.System.putInt(getContentResolver(), "qch_hide_statusBar", setting_statusbar); +// Log.e("SystemSetting", "qch_hide_statusBar---------" + qch_hide_statusBar); +// String statusbarStatus = ""; +// switch (setting_statusbar) { +// case 0: +// statusbarStatus = "qch_show_statusBar"; +// break; +// case 1: +// statusbarStatus = "qch_hide_statusBar"; +// break; +// } +// Intent statusIntent = new Intent(statusbarStatus).setPackage("com.android.systemui"); +// sendBroadcast(statusIntent); +// } +// +// +// //摄像头开关 +// int setting_camera = changeNum(data.optInt("setting_camera")); +// Settings.System.putInt(InitJpushServer.this.getContentResolver(), "qch_app_camera", setting_camera); +//// ApkUtils.hideSystemSettingAPP(InitJpushServer.this, "com.mediatek.camera"); +// Log.e("SystemSetting", "setting_camera---------" + setting_camera); +// String cameraStatus = ""; +// switch (setting_camera) { +// case 0: +// cameraStatus = "qch_camera_open"; +// break; +// case 1: +// cameraStatus = "qch_camera_forbid"; // break; // } -// Intent otgIntent = new Intent(otgStatus); -// sendBroadcast(otgIntent); - - //蓝牙开关 - int setting_bht = changeNum(data.optInt("setting_bht"));//总开关 - int setting_bhtvideo = changeNum(data.optInt("setting_bhtvideo"));//蓝牙音频开关 - int setting_bluetooth = changeNum(data.optInt("setting_bluetooth"));//蓝牙传输开关 - - boolean qch_bht_forbid_on = Settings.System.putInt(InitJpushServer.this.getContentResolver(), "qch_bht_forbid_on", setting_bht);//写入系统数据库 - Log.e("SystemSetting", "qch_bht_forbid_on:" + qch_bht_forbid_on); - if (qch_bht_forbid_on) {//成功 - if (null == mBluetoothAdapter) { - mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();//获取默认蓝牙适配器 - } - if (setting_bht == 0) {//蓝牙总开关开启 - String setting_context = data.optString("setting_context");// - if (setting_bhtvideo == 0) { - if (null != setting_context && !setting_context.equals("") && !setting_context.equals(" ")&& !setting_context.equals("null")) { - Log.e("SystemSetting", "setting_context:" + setting_context); - Settings.System.putString(InitJpushServer.this.getContentResolver(), "qch_bhtvideo_forbid_on", setting_context); - } else { - Settings.System.putString(InitJpushServer.this.getContentResolver(), "qch_bhtvideo_forbid_on", "Empty"); - } - } else if (setting_bhtvideo == 1) { - Settings.System.putString(InitJpushServer.this.getContentResolver(), "qch_bhtvideo_forbid_on", "Empty"); - } - Settings.System.putInt(InitJpushServer.this.getContentResolver(), "qch_bt_forbid_on", setting_bluetooth); - } else { - mBluetoothAdapter.disable();//设置关闭时关闭蓝牙 - } - - } - - int setting_hotspot = changeNum(data.optInt("setting_hotspot"));//热点 - if (setting_hotspot == 1) { - Intent intent = new Intent(); - intent.setAction("qch_hotspot_close"); - intent.setPackage("com.android.settings"); - this.sendStickyBroadcast(intent); - } - boolean qch_hotspot_forbid_on = Settings.System.putInt(this.getContentResolver(), "qch_hotspot_forbid_on", setting_hotspot);//写入系统数据库 - Log.e("SystemSetting", "qch_hotspot_forbid_on---------" + setting_hotspot); - Log.e("SystemSetting", "qch_hotspot_forbid_on---------" + qch_hotspot_forbid_on); - - //系统导航条显示开关 - int setting_navigation = changeNum(data.optInt("setting_navigation")); - boolean qch_hide_navigationBar = Settings.System.putInt(InitJpushServer.this.getContentResolver(), "qch_hide_NavigationBar", setting_navigation); - Log.e("SystemSetting", "qch_hide_navigationBar---------" + qch_hide_navigationBar); - - String navigationStatus = ""; - switch (setting_navigation) { - case 0: - navigationStatus = "qch_show_NavigationBar"; - break; - case 1: - navigationStatus = "qch_hide_NavigationBar"; - break; - - } - Intent navIntent = new Intent(navigationStatus).setPackage("com.android.systemui"); - sendBroadcast(navIntent); - - - //状态栏显示开关 - int setting_statusbar = changeNum(data.optInt("setting_statusbar")); - int oldNum = Settings.System.getInt(getContentResolver(), "qch_hide_statusBar", 0); - if (oldNum != setting_statusbar) { - boolean qch_hide_statusBar = Settings.System.putInt(getContentResolver(), "qch_hide_statusBar", setting_statusbar); - Log.e("SystemSetting", "qch_hide_statusBar---------" + qch_hide_statusBar); - String statusbarStatus = ""; - switch (setting_statusbar) { - case 0: - statusbarStatus = "qch_show_statusBar"; - break; - case 1: - statusbarStatus = "qch_hide_statusBar"; - break; - } - Intent statusIntent = new Intent(statusbarStatus).setPackage("com.android.systemui"); - sendBroadcast(statusIntent); - } - - - //摄像头开关 - int setting_camera = changeNum(data.optInt("setting_camera")); - Settings.System.putInt(InitJpushServer.this.getContentResolver(), "qch_app_camera", setting_camera); -// ApkUtils.hideSystemSettingAPP(InitJpushServer.this, "com.mediatek.camera"); - Log.e("SystemSetting", "setting_camera---------" + setting_camera); - String cameraStatus = ""; - switch (setting_camera) { - case 0: - cameraStatus = "qch_camera_open"; - break; - case 1: - cameraStatus = "qch_camera_forbid"; - break; - } - Intent cameraIntent = new Intent(cameraStatus).setPackage("com.android.settings"); - sendBroadcast(cameraIntent); - - - //tfmedia开关 - int setting_tfmedia = changeNum(data.optInt("setting_tfmedia")); - boolean qch_tfmedia_forbid = Settings.System.putInt(InitJpushServer.this.getContentResolver(), - "qch_tfmedia_forbid", setting_tfmedia); - Log.e("SystemSetting", "setting_tfmedia---------" + qch_tfmedia_forbid); - String tfmediaStatus = ""; - switch (setting_tfmedia) { - case 0: - tfmediaStatus = "qch_tfmedia_open"; - break; - case 1: - tfmediaStatus = "qch_tfmedia_forbid"; - break; - } - Intent tfmediaIntent = new Intent(tfmediaStatus).setPackage("com.android.settings"); - sendBroadcast(tfmediaIntent); - if (setting_tfmedia == 1) { - JSONArray jSONArray = null; - try { - jSONArray = data.getJSONArray("setting_tfmedia_format"); - - int i = 0; - StringBuffer stringBuffer = new StringBuffer(); - while (!jSONArray.isNull(i)) { - stringBuffer.append(jSONArray.getString(i)); - stringBuffer.append(","); - i++; - } - stringBuffer.deleteCharAt(stringBuffer.length() - 1); - Settings.System.putString(InitJpushServer.this.getContentResolver(), "qch_tfmedia_filetypes", stringBuffer.toString());//影音管控 - Log.e("SystemSetting", "qch_tfmedia_filetypes---------" + stringBuffer.toString()); - - } catch (JSONException e) { - Log.e("SystemSetting", "qch_tfmedia_filetypes---------" + e.getMessage()); - - } - } else { - Settings.System.putInt(InitJpushServer.this.getContentResolver(), "qch_tfmedia_forbid", 0); - } - //added:2019.12.6 - //设置5个app的开关 - //时钟 - int deskclock = changeNum(data.optInt("setting_clock")); - Settings.System.putInt(InitJpushServer.this.getContentResolver(), "qch_app_deskclock", deskclock); - ApkUtils.hideSystemSettingAPP(InitJpushServer.this, "com.android.deskclock"); - Log.e("SystemSetting", "qch_app_deskclock" + deskclock); - //录音机 - int soundrecorder = changeNum(data.optInt("setting_recording")); - Settings.System.putInt(InitJpushServer.this.getContentResolver(), "qch_app_soundrecorder", soundrecorder); - ApkUtils.hideSystemSettingAPP(InitJpushServer.this, "com.android.soundrecorder"); - Log.e("SystemSetting", "qch_app_soundrecorder" + soundrecorder); - //音乐 - int music = changeNum(data.optInt("setting_music")); - Settings.System.putInt(InitJpushServer.this.getContentResolver(), "qch_app_music", music); - ApkUtils.hideSystemSettingAPP(InitJpushServer.this, "com.android.music"); - Log.e("SystemSetting", "qch_app_music" + music); - //图库 - int gallery = changeNum(data.optInt("setting_picture")); - Settings.System.putInt(InitJpushServer.this.getContentResolver(), "qch_app_gallery", gallery); - ApkUtils.hideSystemSettingAPP(InitJpushServer.this, "com.android.gallery3d"); - Log.e("SystemSetting", "qch_app_gallery" + gallery); - //壁纸 - int wallpaper = changeNum(data.optInt("setting_wallpaper")); - Settings.System.putInt(InitJpushServer.this.getContentResolver(), "qch_app_wallpaper", wallpaper); - Log.e("SystemSetting", "qch_app_wallpaper" + wallpaper); - //文件管理器 - int filemanager = changeNum(data.optInt("setting_file")); - Settings.System.putInt(InitJpushServer.this.getContentResolver(), "qch_app_filemanager", filemanager); - if (Build.VERSION.SDK_INT < Build.VERSION_CODES.O) { - ApkUtils.hideSystemSettingAPP(InitJpushServer.this, "com.mediatek.filemanager"); - } else { - ApkUtils.hideSystemSettingAPP(InitJpushServer.this, "com.android.documentsui"); - } - Log.e("SystemSetting", "qch_app_filemanager" + filemanager); - } catch (Exception e) { - e.printStackTrace(); - Log.e("mjsheng", "SettingSysData---1error::" + e.getMessage()); - } +// Intent cameraIntent = new Intent(cameraStatus).setPackage("com.android.settings"); +// sendBroadcast(cameraIntent); +// +// +// //tfmedia开关 +// int setting_tfmedia = changeNum(data.optInt("setting_tfmedia")); +// boolean qch_tfmedia_forbid = Settings.System.putInt(InitJpushServer.this.getContentResolver(), +// "qch_tfmedia_forbid", setting_tfmedia); +// Log.e("SystemSetting", "setting_tfmedia---------" + qch_tfmedia_forbid); +// String tfmediaStatus = ""; +// switch (setting_tfmedia) { +// case 0: +// tfmediaStatus = "qch_tfmedia_open"; +// break; +// case 1: +// tfmediaStatus = "qch_tfmedia_forbid"; +// break; +// } +// Intent tfmediaIntent = new Intent(tfmediaStatus).setPackage("com.android.settings"); +// sendBroadcast(tfmediaIntent); +// if (setting_tfmedia == 1) { +// JSONArray jSONArray = null; +// try { +// jSONArray = data.getJSONArray("setting_tfmedia_format"); +// +// int i = 0; +// StringBuffer stringBuffer = new StringBuffer(); +// while (!jSONArray.isNull(i)) { +// stringBuffer.append(jSONArray.getString(i)); +// stringBuffer.append(","); +// i++; +// } +// stringBuffer.deleteCharAt(stringBuffer.length() - 1); +// Settings.System.putString(InitJpushServer.this.getContentResolver(), "qch_tfmedia_filetypes", stringBuffer.toString());//影音管控 +// Log.e("SystemSetting", "qch_tfmedia_filetypes---------" + stringBuffer.toString()); +// +// } catch (JSONException e) { +// Log.e("SystemSetting", "qch_tfmedia_filetypes---------" + e.getMessage()); +// +// } +// } else { +// Settings.System.putInt(InitJpushServer.this.getContentResolver(), "qch_tfmedia_forbid", 0); +// } +// //added:2019.12.6 +// //设置5个app的开关 +// //时钟 +// int deskclock = changeNum(data.optInt("setting_clock")); +// Settings.System.putInt(InitJpushServer.this.getContentResolver(), "qch_app_deskclock", deskclock); +// ApkUtils.hideSystemSettingAPP(InitJpushServer.this, "com.android.deskclock"); +// Log.e("SystemSetting", "qch_app_deskclock" + deskclock); +// //录音机 +// int soundrecorder = changeNum(data.optInt("setting_recording")); +// Settings.System.putInt(InitJpushServer.this.getContentResolver(), "qch_app_soundrecorder", soundrecorder); +// ApkUtils.hideSystemSettingAPP(InitJpushServer.this, "com.android.soundrecorder"); +// Log.e("SystemSetting", "qch_app_soundrecorder" + soundrecorder); +// //音乐 +// int music = changeNum(data.optInt("setting_music")); +// Settings.System.putInt(InitJpushServer.this.getContentResolver(), "qch_app_music", music); +// ApkUtils.hideSystemSettingAPP(InitJpushServer.this, "com.android.music"); +// Log.e("SystemSetting", "qch_app_music" + music); +// //图库 +// int gallery = changeNum(data.optInt("setting_picture")); +// Settings.System.putInt(InitJpushServer.this.getContentResolver(), "qch_app_gallery", gallery); +// ApkUtils.hideSystemSettingAPP(InitJpushServer.this, "com.android.gallery3d"); +// Log.e("SystemSetting", "qch_app_gallery" + gallery); +// //壁纸 +// int wallpaper = changeNum(data.optInt("setting_wallpaper")); +// Settings.System.putInt(InitJpushServer.this.getContentResolver(), "qch_app_wallpaper", wallpaper); +// Log.e("SystemSetting", "qch_app_wallpaper" + wallpaper); +// //文件管理器 +// int filemanager = changeNum(data.optInt("setting_file")); +// Settings.System.putInt(InitJpushServer.this.getContentResolver(), "qch_app_filemanager", filemanager); +// if (Build.VERSION.SDK_INT < Build.VERSION_CODES.O) { +// ApkUtils.hideSystemSettingAPP(InitJpushServer.this, "com.mediatek.filemanager"); +// } else { +// ApkUtils.hideSystemSettingAPP(InitJpushServer.this, "com.android.documentsui"); +// } +// Log.e("SystemSetting", "qch_app_filemanager" + filemanager); +// } catch (Exception e) { +// e.printStackTrace(); +// Log.e("mjsheng", "SettingSysData---1error::" + e.getMessage()); +// } } private int changeNum(int status) { @@ -1209,9 +1374,23 @@ public class InitJpushServer extends Service { } + private void showTopAcivity() { +// if (true) { +// Intent intent = new Intent(InitJpushServer.this, TopActivity.class); +// intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); +// intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); +// startActivity(intent); +// } + + } + + @Override public void onDestroy() { super.onDestroy(); + if (null != lockScreenReceiver) { + unregisterReceiver(lockScreenReceiver); + } Log.e("fht", "InitJpushServer onDestroy"); } diff --git a/app/src/main/java/com/mjsheng/myappstore/utils/ApkUtils.java b/app/src/main/java/com/mjsheng/myappstore/utils/ApkUtils.java index b7565c9..2805809 100644 --- a/app/src/main/java/com/mjsheng/myappstore/utils/ApkUtils.java +++ b/app/src/main/java/com/mjsheng/myappstore/utils/ApkUtils.java @@ -1,5 +1,6 @@ package com.mjsheng.myappstore.utils; +import android.app.ActivityManager; import android.app.PendingIntent; import android.content.Context; import android.content.Intent; @@ -18,12 +19,17 @@ import android.os.Build; import android.provider.Settings; import android.support.annotation.RequiresApi; import android.support.v4.content.FileProvider; +import android.text.TextUtils; import android.util.Log; import android.view.View; import android.widget.Toast; +import com.google.gson.Gson; import com.mjsheng.myappstore.BuildConfig; import com.mjsheng.myappstore.R; +import com.mjsheng.myappstore.bean.UploadAppInfo; +import com.mjsheng.myappstore.network.Network; +import com.mjsheng.myappstore.network.api.UploadAppInfoApi; import com.mjsheng.myappstore.server.InitJpushServer; import java.io.BufferedReader; @@ -42,6 +48,8 @@ import java.util.List; import java.util.zip.ZipEntry; import java.util.zip.ZipFile; +import io.reactivex.disposables.Disposable; +import okhttp3.ResponseBody; import rx.Observable; import rx.Observer; import rx.Subscriber; @@ -613,6 +621,7 @@ public class ApkUtils { public static List systemapp = new ArrayList() {{ //需要管控的系统应用 this.add("com.android.gallery3d");//图库 + this.add("com.android.settings");//图库 this.add("com.android.deskclock");//时钟 this.add("com.android.music");//音乐 this.add("com.mediatek.camera");//相机 @@ -792,6 +801,9 @@ 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 = ""; @@ -817,4 +829,86 @@ public class ApkUtils { Log.e("addShortcut", "putstring:" + qch_force_app); } + public static void getAppInfo(Context context) { + ActivityManager activityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE); + List infoList = activityManager.getRunningServices(Integer.MAX_VALUE); + for (ActivityManager.RunningServiceInfo info:infoList){ +// Log.e("fht", "getAppInfo1: "+info.process); +// Log.e("fht", "getAppInfo2: "+info.service.getPackageName()); +// Log.e("fht", "getAppInfo3: "+info.service.getClassName()); + } + ArrayList appList = new ArrayList(); //用来存储获取的应用信息数据 + List packages = context.getPackageManager().getInstalledPackages(0); + + for (int i = 0; i < packages.size(); i++) { + PackageInfo packageInfo = packages.get(i); + if (ApkUtils.systemapp.contains(packageInfo.packageName) + ||ApkUtils.show_canremove_systemapp.contains(packageInfo.packageName) + ||ApkUtils.canremove_systemapp.contains(packageInfo.packageName) + ) { + continue; + } + + UploadAppInfo uploadAppInfo = new UploadAppInfo(); + + uploadAppInfo.setApp_name(packageInfo.applicationInfo.loadLabel(context.getPackageManager()).toString()); + uploadAppInfo.setPackage_name(packageInfo.packageName); + uploadAppInfo.setId(i); + String firstInstallTime = Utils.transferLongToDate(packageInfo.firstInstallTime); + uploadAppInfo.setInstall_time(firstInstallTime); + uploadAppInfo.setVersionCode(String.valueOf(packageInfo.versionCode)); + uploadAppInfo.setState(0); + + if ((packageInfo.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) == 1) { + } else { + for (ActivityManager.RunningServiceInfo info:infoList){ + if (info.process.contains(packageInfo.packageName)){ + uploadAppInfo.setState(1); + Log.e("fht", "getAppInfo running: "+packageInfo.packageName); + } + } + appList.add(uploadAppInfo); + } + + + } + +// Log.e("mjsheng", "UploadAppInfo========" + appList.toString()); + + Gson gson = new Gson(); + String jsonString = gson.toJson(appList); +// Log.e("mjsheng", "json========" + jsonString); + + UploadAppInfoApi uploadAppInfoApi = Network.getUploadAppInfoApi(); + uploadAppInfoApi.getUploadAppInfoApi(Configure.HTTP_KEY, Utils.getSerial(), jsonString) + .subscribeOn(io.reactivex.schedulers.Schedulers.io()) + .observeOn(io.reactivex.android.schedulers.AndroidSchedulers.mainThread()) + .subscribe(new io.reactivex.Observer() { + @Override + public void onSubscribe(Disposable d) { + + } + + @Override + public void onNext(ResponseBody responseBody) { + try { + Log.e("mjhseng", "上传的结果" + responseBody.string()); + } catch (IOException e) { + e.printStackTrace(); + } + } + + @Override + public void onError(Throwable e) { + Log.e("mjsheng", "UploadAppInfoApi=onError:"); + } + + @Override + public void onComplete() { + + } + }); + } + + } diff --git a/app/src/main/java/com/mjsheng/myappstore/utils/Configure.java b/app/src/main/java/com/mjsheng/myappstore/utils/Configure.java index cc0dccf..9d8267a 100644 --- a/app/src/main/java/com/mjsheng/myappstore/utils/Configure.java +++ b/app/src/main/java/com/mjsheng/myappstore/utils/Configure.java @@ -95,6 +95,7 @@ public class Configure { // public static final String HTTP_TAG_DOWNLOAD_URL = HTTP_TAG_HEAD + "Down?baoming="; public static final String HTTP_TAG_DOWNLOAD_URL = HTTP_TAG_HEAD_NEW + "count/index"; + public static final String SEND_DOWNLOAD_FILE_INFO = HTTP_TAG_HEAD_NEW + "app/downloadApp"; // app详细窗口 相关推荐接口 public static final String HTTP_TAG_APPDETAIL_URL = HTTP_TAG_HEAD + "Tuij/xiang?aid="; @@ -210,4 +211,6 @@ public class Configure { //上传截图 public static final String UPDATE_DEVICEINFO = HTTP_TAG_HEAD_NEW + "Mac/getInfo"; //上传我的设备 + public final static String GET_LOCK_SCREEN_STATE = HTTP_TAG_HEAD_NEW + "Sn/getSnScreen"; + //获取霸屏状态 } diff --git a/app/src/main/java/com/mjsheng/myappstore/utils/ServiceAliveUtils.java b/app/src/main/java/com/mjsheng/myappstore/utils/ServiceAliveUtils.java index 5658943..8abb708 100644 --- a/app/src/main/java/com/mjsheng/myappstore/utils/ServiceAliveUtils.java +++ b/app/src/main/java/com/mjsheng/myappstore/utils/ServiceAliveUtils.java @@ -2,6 +2,7 @@ package com.mjsheng.myappstore.utils; import android.app.ActivityManager; import android.content.Context; +import android.util.Log; import com.mjsheng.myappstore.MyApplication; @@ -12,13 +13,14 @@ public class ServiceAliveUtils { ActivityManager manager = (ActivityManager) MyApplication.getAppContext().getSystemService(Context.ACTIVITY_SERVICE); if (manager == null) { - return true; + return false; } for (ActivityManager.RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)) { - if ("demo.lgm.com.keepalivedemo.service.DownloadService".equals(service.service.getClassName())) { + if ("com.mjsheng.myappstore.server.InitJpushServer".equals(service.service.getClassName())) { isServiceRunning = true; } } + Log.e("ServiceAliveUtils", "isServiceAlice: " + isServiceRunning); return isServiceRunning; } } diff --git a/app/src/main/java/com/mjsheng/myappstore/utils/SysSettingUtils.java b/app/src/main/java/com/mjsheng/myappstore/utils/SysSettingUtils.java new file mode 100644 index 0000000..94b3cfe --- /dev/null +++ b/app/src/main/java/com/mjsheng/myappstore/utils/SysSettingUtils.java @@ -0,0 +1,532 @@ +package com.mjsheng.myappstore.utils; + +import android.bluetooth.BluetoothAdapter; +import android.content.Context; +import android.content.Intent; +import android.os.Build; +import android.provider.Settings; +import android.util.Log; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.mjsheng.myappstore.BuildConfig; + + +public class SysSettingUtils { + private static final String TAG = "SysSettingUtils"; + + public SysSettingUtils() { + + } + + public SysSettingUtils(Context context) { + + } + + private static int changeNum(int status) { + return status == 0 ? 1 : 0; + } + + public static void setSystemSetting(Context mContext, String jsonObj) { + if (null == mContext) { + throw new RuntimeException("Context it's null"); + } + JSONObject jsonObject = JSON.parseObject(jsonObj); + setPhoneList(mContext, jsonObject); + setUSBstate(mContext, jsonObject); + setBluetooth(mContext, jsonObject); + setHotspot(mContext, jsonObject); + setBar(mContext, jsonObject); + setCamera(mContext, jsonObject); + setTF(mContext, jsonObject); + setIcon(mContext, jsonObject); + + //otg开关 +// int setting_otg = changeNum(jsonObject.getInteger("setting_otg")); +// Log.e("SystemSetting", "setting_otg---------" + setting_otg); +// String otgStatus = ""; +// switch (setting_otg) { +// case 0: +// otgStatus = "qch_otg_open"; +// break; +// case 1: +// otgStatus = "qch_otg_forbid"; +// break; +// } +// Intent otgIntent = new Intent(otgStatus); +// sendBroadcast(otgIntent); + } + + public static void setDefaultSetting(Context mContext) { + setPhoneList(mContext); + setUSBstate(mContext); + setBluetooth(mContext); + setHotspot(mContext); + setBar(mContext); + setCamera(mContext); + setTF(mContext); + setIcon(mContext); + } + + private static void setPhoneList(Context mContext) { + try { + //设置电话功能,电话白名单 + boolean qch_call_forbid = Settings.System.putInt(mContext.getContentResolver(), "qch_call_forbid", 1); + Log.e("SystemSetting", "qch_call_forbid:" + qch_call_forbid); + + boolean qch_white_list_on = Settings.System.putInt(mContext.getContentResolver(), "qch_white_list_on", 1); + Log.e("SystemSetting", "qch_white_list_on:" + qch_white_list_on); + + boolean qch_white_list_Array = Settings.System.putString(mContext.getContentResolver(), "qch_white_list_Array", ""); + // ToastTool.show("qch_call_forbid::"+setting_call+"----setting_phones::"+setting_phones+"----"+qch_white_list_Array+"---"+qch_call_forbid); + Log.e("SystemSetting", "qch_white_list_Array:" + qch_white_list_Array + "---" + qch_white_list_Array); + + boolean qch_sdcard_forbid_on = Settings.System.putInt(mContext.getContentResolver(), "qch_sdcard_forbid_on", 1); + Log.e("SystemSetting", "qch_sdcard_forbid_on:" + qch_sdcard_forbid_on); + } catch (Exception e) { + Log.e(TAG, "setPhoneList: " + e.getMessage()); + } + } + + private static void setPhoneList(Context mContext, JSONObject jsonObject) { + try { + //设置电话功能,电话白名单 + int setting_call = changeNum(jsonObject.getInteger("setting_call")); + boolean qch_call_forbid = Settings.System.putInt(mContext.getContentResolver(), "qch_call_forbid", setting_call); + Log.e("SystemSetting", "qch_call_forbid---------" + qch_call_forbid); + + int setting_phone = changeNum(jsonObject.getInteger("setting_phone")); + boolean qch_white_list_on = Settings.System.putInt(mContext.getContentResolver(), "qch_white_list_on", setting_phone); + Log.e("SystemSetting", "qch_white_list_on---------" + qch_white_list_on); + + String setting_phones = jsonObject.getString("setting_phones"); + boolean qch_white_list_Array = Settings.System.putString(mContext.getContentResolver(), "qch_white_list_Array", setting_phones); + // ToastTool.show("qch_call_forbid::"+setting_call+"----setting_phones::"+setting_phones+"----"+qch_white_list_Array+"---"+qch_call_forbid); + Log.e("SystemSetting", "qch_white_list_Array---------" + qch_white_list_Array + "---" + setting_phones); + + int setting_memory = changeNum(jsonObject.getInteger("setting_memory")); + boolean qch_sdcard_forbid_on = Settings.System.putInt(mContext.getContentResolver(), "qch_sdcard_forbid_on", setting_memory); + Log.e("SystemSetting", "qch_sdcard_forbid_on---------" + qch_sdcard_forbid_on); + } catch (Exception e) { + Log.e(TAG, "setPhoneList: " + e.getMessage()); + } + } + + private static void setUSBstate(Context mContext) { + //USB数据功能管控 + //仅充电:usb_charge + //MTP模式:usb_mtp + //Midi模式:usb_midi + if (!BuildConfig.DEBUG) { + try { + boolean qch_usb_choose = Settings.System.putString(mContext.getContentResolver(), "qch_usb_choose", "usb_charge"); + Log.e("SystemSetting", "qch_usb_choose:" + qch_usb_choose); + String usbStatus = "qch_action_usb_usb_charge"; + Intent usbIntent = new Intent(usbStatus).setPackage("com.android.settings"); + mContext.sendBroadcast(usbIntent); + } catch (Exception e) { + Log.e(TAG, "setUSBstate: " + e.getMessage()); + } + } + } + + private static void setUSBstate(Context mContext, JSONObject jsonObject) { + //USB数据功能管控 + //仅充电:usb_charge + //MTP模式:usb_mtp + //Midi模式:usb_midi + String setting_usb = jsonObject.getString("setting_usb"); + if (!BuildConfig.DEBUG) { + try { + boolean qch_usb_choose = Settings.System.putString(mContext.getContentResolver(), "qch_usb_choose", setting_usb); + Log.e("SystemSetting", "qch_usb_choose---------" + qch_usb_choose); + String usbStatus = ""; + switch (setting_usb) { + case "usb_charge": + usbStatus = "qch_action_usb_usb_charge"; + break; + case "usb_mtp": + usbStatus = "qch_action_usb_usb_mtp"; + break; + case "usb_midi": + usbStatus = "qch_action_usb_usb_midi"; + break; + + } + Intent usbIntent = new Intent(usbStatus).setPackage("com.android.settings"); + mContext.sendBroadcast(usbIntent); + } catch (Exception e) { + Log.e(TAG, "setUSBstate: " + e.getMessage()); + } + } + } + + private static void setBluetooth(Context mContext) { + try { + boolean qch_bht_forbid_on = Settings.System.putInt(mContext.getContentResolver(), "qch_bht_forbid_on", 1); + //写入系统数据库 + Log.e("SystemSetting", "qch_bht_forbid_on:" + qch_bht_forbid_on); + BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); + if (qch_bht_forbid_on) { + //成功 + if (null == mBluetoothAdapter) { + mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); + //获取默认蓝牙适配器 + } + //蓝牙总开关开启 + Settings.System.putString(mContext.getContentResolver(), "qch_bhtvideo_forbid_on", "Empty"); + Settings.System.putInt(mContext.getContentResolver(), "qch_bt_forbid_on", 1); + mBluetoothAdapter.disable(); + //设置关闭时关闭蓝牙 + } + } catch (Exception e) { + Log.e(TAG, "setBluetooth: " + e.getMessage()); + } + } + + private static void setBluetooth(Context mContext, JSONObject jsonObject) { + try { + //蓝牙开关 + int setting_bht = changeNum(jsonObject.getInteger("setting_bht")); + //总开关 + int setting_bhtvideo = changeNum(jsonObject.getInteger("setting_bhtvideo")); + //蓝牙音频开关 + int setting_bluetooth = changeNum(jsonObject.getInteger("setting_bluetooth")); + //蓝牙传输开关 + boolean qch_bht_forbid_on = Settings.System.putInt(mContext.getContentResolver(), "qch_bht_forbid_on", setting_bht); + //写入系统数据库 + Log.e("SystemSetting", "qch_bht_forbid_on:" + qch_bht_forbid_on); + BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); + if (qch_bht_forbid_on) { + //成功 + if (null == mBluetoothAdapter) { + mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); + //获取默认蓝牙适配器 + } + if (setting_bht == 0) { + //蓝牙总开关开启 + String setting_context = jsonObject.getString("setting_context"); + if (setting_bhtvideo == 0) { + if (null != setting_context && !setting_context.equals("") && !setting_context.equals(" ") && !setting_context.equals("null")) { + Log.e("SystemSetting", "setting_context:" + setting_context); + Settings.System.putString(mContext.getContentResolver(), "qch_bhtvideo_forbid_on", setting_context); + } else { + Settings.System.putString(mContext.getContentResolver(), "qch_bhtvideo_forbid_on", "Empty"); + } + } else if (setting_bhtvideo == 1) { + Settings.System.putString(mContext.getContentResolver(), "qch_bhtvideo_forbid_on", "Empty"); + } + Settings.System.putInt(mContext.getContentResolver(), "qch_bt_forbid_on", setting_bluetooth); + } else { + mBluetoothAdapter.disable(); + //设置关闭时关闭蓝牙 + } + } + } catch (Exception e) { + Log.e(TAG, "setBluetooth: " + e.getMessage()); + } + } + + private static void setHotspot(Context mContext) { + try { + Intent intent = new Intent(); + intent.setAction("qch_hotspot_close"); + intent.setPackage("com.android.settings"); + mContext.sendStickyBroadcast(intent); + boolean qch_hotspot_forbid_on = Settings.System.putInt(mContext.getContentResolver(), "qch_hotspot_forbid_on", 1);//写入系统数据库 + Log.e("SystemSetting", "qch_hotspot_forbid_on:" + qch_hotspot_forbid_on); + } catch (Exception e) { + Log.e(TAG, "setHotspot: " + e.getMessage()); + } + } + + private static void setHotspot(Context mContext, JSONObject jsonObject) { + try { + int setting_hotspot = changeNum(jsonObject.getInteger("setting_hotspot"));//热点 + if (setting_hotspot == 1) { + Intent intent = new Intent(); + intent.setAction("qch_hotspot_close"); + intent.setPackage("com.android.settings"); + mContext.sendStickyBroadcast(intent); + } + boolean qch_hotspot_forbid_on = Settings.System.putInt(mContext.getContentResolver(), "qch_hotspot_forbid_on", setting_hotspot);//写入系统数据库 + Log.e("SystemSetting", "qch_hotspot_forbid_on---------" + setting_hotspot); + Log.e("SystemSetting", "qch_hotspot_forbid_on---------" + qch_hotspot_forbid_on); + } catch (Exception e) { + Log.e(TAG, "setHotspot: " + e.getMessage()); + } + } + + private static void setBar(Context mContext) { + //系统导航条显示开关 + int setting_navigation = 0; + boolean qch_hide_navigationBar = Settings.System.putInt(mContext.getContentResolver(), "qch_hide_NavigationBar", setting_navigation); + Log.e("SystemSetting", "qch_hide_navigationBar---------" + qch_hide_navigationBar); + + String navigationStatus = ""; + switch (setting_navigation) { + case 0: + navigationStatus = "qch_show_NavigationBar"; + break; + case 1: + navigationStatus = "qch_hide_NavigationBar"; + break; + + } + Intent navIntent = new Intent(navigationStatus).setPackage("com.android.systemui"); + mContext.sendBroadcast(navIntent); + + + //状态栏显示开关 + int setting_statusbar = 0; + int oldNum = Settings.System.getInt(mContext.getContentResolver(), "qch_hide_statusBar", 0); + if (oldNum != setting_statusbar) { + boolean qch_hide_statusBar = Settings.System.putInt(mContext.getContentResolver(), "qch_hide_statusBar", setting_statusbar); + Log.e("SystemSetting", "qch_hide_statusBar---------" + qch_hide_statusBar); + String statusbarStatus = ""; + switch (setting_statusbar) { + case 0: + statusbarStatus = "qch_show_statusBar"; + break; + case 1: + statusbarStatus = "qch_hide_statusBar"; + break; + } + Intent statusIntent = new Intent(statusbarStatus).setPackage("com.android.systemui"); + mContext.sendBroadcast(statusIntent); + } + } + + private static void setBar(Context mContext, JSONObject jsonObject) { + //系统导航条显示开关 + int setting_navigation = changeNum(jsonObject.getInteger("setting_navigation")); + boolean qch_hide_navigationBar = Settings.System.putInt(mContext.getContentResolver(), "qch_hide_NavigationBar", setting_navigation); + Log.e("SystemSetting", "qch_hide_navigationBar---------" + qch_hide_navigationBar); + + String navigationStatus = ""; + switch (setting_navigation) { + case 0: + navigationStatus = "qch_show_NavigationBar"; + break; + case 1: + navigationStatus = "qch_hide_NavigationBar"; + break; + + } + Intent navIntent = new Intent(navigationStatus).setPackage("com.android.systemui"); + mContext.sendBroadcast(navIntent); + + + //状态栏显示开关 + int setting_statusbar = changeNum(jsonObject.getInteger("setting_statusbar")); + int oldNum = Settings.System.getInt(mContext.getContentResolver(), "qch_hide_statusBar", 0); + if (oldNum != setting_statusbar) { + boolean qch_hide_statusBar = Settings.System.putInt(mContext.getContentResolver(), "qch_hide_statusBar", setting_statusbar); + Log.e("SystemSetting", "qch_hide_statusBar---------" + qch_hide_statusBar); + String statusbarStatus = ""; + switch (setting_statusbar) { + case 0: + statusbarStatus = "qch_show_statusBar"; + break; + case 1: + statusbarStatus = "qch_hide_statusBar"; + break; + } + Intent statusIntent = new Intent(statusbarStatus).setPackage("com.android.systemui"); + mContext.sendBroadcast(statusIntent); + } + } + + private static void setCamera(Context mContext) { + try { + //摄像头开关 + boolean qch_app_camera = Settings.System.putInt(mContext.getContentResolver(), "qch_app_camera", 1); +// ApkUtils.hideSystemSettingAPP(mContext, "com.mediatek.camera"); + Log.e("SystemSetting", "setting_camera---------" + qch_app_camera); + String cameraStatus = "qch_camera_forbid"; + Intent cameraIntent = new Intent(cameraStatus).setPackage("com.android.settings"); + mContext.sendBroadcast(cameraIntent); + } catch (Exception e) { + Log.e(TAG, "setCamera: " + e.getMessage()); + } + } + + private static void setCamera(Context mContext, JSONObject jsonObject) { + try { + //摄像头开关 + int setting_camera = changeNum(jsonObject.getInteger("setting_camera")); + Settings.System.putInt(mContext.getContentResolver(), "qch_app_camera", setting_camera); +// ApkUtils.hideSystemSettingAPP(mContext, "com.mediatek.camera"); + Log.e("SystemSetting", "setting_camera---------" + setting_camera); + String cameraStatus = ""; + switch (setting_camera) { + case 0: + cameraStatus = "qch_camera_open"; + break; + case 1: + cameraStatus = "qch_camera_forbid"; + break; + } + Intent cameraIntent = new Intent(cameraStatus).setPackage("com.android.settings"); + mContext.sendBroadcast(cameraIntent); + } catch (Exception e) { + Log.e(TAG, "setCamera: " + e.getMessage()); + } + } + + private static void setTF(Context mContext) { + try { + //tfmedia开关 + int setting_tfmedia = 1; + boolean qch_tfmedia_forbid = Settings.System.putInt(mContext.getContentResolver(), "qch_tfmedia_forbid", setting_tfmedia); + Log.e("SystemSetting", "setting_tfmedia---------" + qch_tfmedia_forbid); + String tfmediaStatus = ""; + switch (setting_tfmedia) { + case 0: + tfmediaStatus = "qch_tfmedia_open"; + break; + case 1: + tfmediaStatus = "qch_tfmedia_forbid"; + break; + } + Intent tfmediaIntent = new Intent(tfmediaStatus).setPackage("com.android.settings"); + mContext.sendBroadcast(tfmediaIntent); + if (setting_tfmedia == 1) { + boolean qch_tfmedia_filetypes = Settings.System.putString(mContext.getContentResolver(), "qch_tfmedia_filetypes", "Empty");//影音管控 + Log.e("SystemSetting", "qch_tfmedia_filetypes:" + qch_tfmedia_filetypes); + } else { + Settings.System.putInt(mContext.getContentResolver(), "qch_tfmedia_forbid", 0); + } + } catch (Exception e) { + Log.e(TAG, "setTF: " + e.getMessage()); + } + } + + private static void setTF(Context mContext, JSONObject jsonObject) { + try { + //tfmedia开关 + int setting_tfmedia = changeNum(jsonObject.getInteger("setting_tfmedia")); + boolean qch_tfmedia_forbid = Settings.System.putInt(mContext.getContentResolver(), + "qch_tfmedia_forbid", setting_tfmedia); + Log.e("SystemSetting", "setting_tfmedia---------" + qch_tfmedia_forbid); + String tfmediaStatus = ""; + switch (setting_tfmedia) { + case 0: + tfmediaStatus = "qch_tfmedia_open"; + break; + case 1: + tfmediaStatus = "qch_tfmedia_forbid"; + break; + } + Intent tfmediaIntent = new Intent(tfmediaStatus).setPackage("com.android.settings"); + mContext.sendBroadcast(tfmediaIntent); + if (setting_tfmedia == 1) { + JSONArray jSONArray = null; + jSONArray = jsonObject.getJSONArray("setting_tfmedia_format"); + + int i = 0; + StringBuffer stringBuffer = new StringBuffer(); + while (!jSONArray.isEmpty()) { + stringBuffer.append(jSONArray.getString(i)); + stringBuffer.append(","); + i++; + } + stringBuffer.deleteCharAt(stringBuffer.length() - 1); + Settings.System.putString(mContext.getContentResolver(), "qch_tfmedia_filetypes", stringBuffer.toString());//影音管控 + Log.e("SystemSetting", "qch_tfmedia_filetypes---------" + stringBuffer.toString()); + + + } else { + Settings.System.putInt(mContext.getContentResolver(), "qch_tfmedia_forbid", 0); + } + } catch (Exception e) { + Log.e(TAG, "setTF: " + e.getMessage()); + } + } + + private static void setIcon(Context mContext) { + try { + //added:2019.12.6 + //设置5个app的开关 + //时钟 + int deskclock = 1; + Settings.System.putInt(mContext.getContentResolver(), "qch_app_deskclock", deskclock); + ApkUtils.hideSystemSettingAPP(mContext, "com.android.deskclock"); + Log.e("SystemSetting", "qch_app_deskclock" + deskclock); + //录音机 + int soundrecorder = 1; + Settings.System.putInt(mContext.getContentResolver(), "qch_app_soundrecorder", soundrecorder); + ApkUtils.hideSystemSettingAPP(mContext, "com.android.soundrecorder"); + Log.e("SystemSetting", "qch_app_soundrecorder" + soundrecorder); + //音乐 + int music = 1; + Settings.System.putInt(mContext.getContentResolver(), "qch_app_music", music); + ApkUtils.hideSystemSettingAPP(mContext, "com.android.music"); + Log.e("SystemSetting", "qch_app_music" + music); + //图库 + int gallery = 1; + Settings.System.putInt(mContext.getContentResolver(), "qch_app_gallery", gallery); + ApkUtils.hideSystemSettingAPP(mContext, "com.android.gallery3d"); + Log.e("SystemSetting", "qch_app_gallery" + gallery); + //壁纸 + int wallpaper = 1; + Settings.System.putInt(mContext.getContentResolver(), "qch_app_wallpaper", wallpaper); + Log.e("SystemSetting", "qch_app_wallpaper" + wallpaper); + //文件管理器 + int filemanager = 1; + Settings.System.putInt(mContext.getContentResolver(), "qch_app_filemanager", filemanager); + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.O) { + ApkUtils.hideSystemSettingAPP(mContext, "com.mediatek.filemanager"); + } else { + ApkUtils.hideSystemSettingAPP(mContext, "com.android.documentsui"); + } + Log.e("SystemSetting", "qch_app_filemanager" + filemanager); + } catch (Exception e) { + Log.e(TAG, "setIcon: " + e.getMessage()); + } + } + + private static void setIcon(Context mContext, JSONObject jsonObject) { + try { + //added:2019.12.6 + //设置5个app的开关 + //时钟 + int deskclock = changeNum(jsonObject.getInteger("setting_clock")); + Settings.System.putInt(mContext.getContentResolver(), "qch_app_deskclock", deskclock); + ApkUtils.hideSystemSettingAPP(mContext, "com.android.deskclock"); + Log.e("SystemSetting", "qch_app_deskclock" + deskclock); + //录音机 + int soundrecorder = changeNum(jsonObject.getInteger("setting_recording")); + Settings.System.putInt(mContext.getContentResolver(), "qch_app_soundrecorder", soundrecorder); + ApkUtils.hideSystemSettingAPP(mContext, "com.android.soundrecorder"); + Log.e("SystemSetting", "qch_app_soundrecorder" + soundrecorder); + //音乐 + int music = changeNum(jsonObject.getInteger("setting_music")); + Settings.System.putInt(mContext.getContentResolver(), "qch_app_music", music); + ApkUtils.hideSystemSettingAPP(mContext, "com.android.music"); + Log.e("SystemSetting", "qch_app_music" + music); + //图库 + int gallery = changeNum(jsonObject.getInteger("setting_picture")); + Settings.System.putInt(mContext.getContentResolver(), "qch_app_gallery", gallery); + ApkUtils.hideSystemSettingAPP(mContext, "com.android.gallery3d"); + Log.e("SystemSetting", "qch_app_gallery" + gallery); + //壁纸 + int wallpaper = changeNum(jsonObject.getInteger("setting_wallpaper")); + Settings.System.putInt(mContext.getContentResolver(), "qch_app_wallpaper", wallpaper); + Log.e("SystemSetting", "qch_app_wallpaper" + wallpaper); + //文件管理器 + int filemanager = changeNum(jsonObject.getInteger("setting_file")); + Settings.System.putInt(mContext.getContentResolver(), "qch_app_filemanager", filemanager); + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.O) { + ApkUtils.hideSystemSettingAPP(mContext, "com.mediatek.filemanager"); + } else { + ApkUtils.hideSystemSettingAPP(mContext, "com.android.documentsui"); + } + Log.e("SystemSetting", "qch_app_filemanager" + filemanager); + } catch (Exception e) { + Log.e(TAG, "setIcon: " + e.getMessage()); + } + } + +} diff --git a/app/src/main/res/drawable-hdpi/logo.png b/app/src/main/res/drawable-hdpi/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..8b3852e7dc69eec0ccb09fc232bb0c4db94b9841 GIT binary patch literal 37763 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 Lm`>%L2VwsK%AD?_ literal 0 HcmV?d00001 diff --git a/app/src/main/res/layout-land/activity_top.xml b/app/src/main/res/layout-land/activity_top.xml new file mode 100644 index 0000000..fc57a4b --- /dev/null +++ b/app/src/main/res/layout-land/activity_top.xml @@ -0,0 +1,21 @@ + + + + + diff --git a/app/src/main/res/layout-port/activity_top.xml b/app/src/main/res/layout-port/activity_top.xml new file mode 100644 index 0000000..fc57a4b --- /dev/null +++ b/app/src/main/res/layout-port/activity_top.xml @@ -0,0 +1,21 @@ + + + + + diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index 540c0e6..ddfcc4b 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -8,7 +8,7 @@ #ffffff #d3d1d1 #383749 - #ff797979 + #CC797979 #80000000 #00ffffff #FFF45C @@ -45,7 +45,7 @@ #ff797979 #55b68a #8f82bc - #00A0E9 - #047AAF + #f93191 + #FF47A0 \ No newline at end of file diff --git a/jiaoguanyiInfo.iml b/jiaoguanyiInfo.iml index 0c823ed..98c7014 100644 --- a/jiaoguanyiInfo.iml +++ b/jiaoguanyiInfo.iml @@ -1,5 +1,5 @@ - + @@ -8,10 +8,11 @@ - + +