From cf253e460cc80c78b63886be1402fcecea1c20eb Mon Sep 17 00:00:00 2001
From: Administrator <981964879@qq.com>
Date: Wed, 21 Oct 2020 18:47:57 +0800
Subject: [PATCH] =?UTF-8?q?update:2020.10.21=20fix:=E8=93=9D=E7=89=99?=
=?UTF-8?q?=E6=96=87=E4=BB=B6=E4=BC=A0=E8=BE=93=E7=AE=A1=E6=8E=A7=E6=94=B9?=
=?UTF-8?q?=E4=B8=BA=E8=93=9D=E7=89=99=E5=BC=80=E5=85=B3=E7=AE=A1=E6=8E=A7?=
=?UTF-8?q?=20add:=E6=91=84=E5=83=8F=E5=A4=B4=E7=AE=A1=E6=8E=A7=EF=BC=8C?=
=?UTF-8?q?=E5=BD=B1=E9=9F=B3=E6=A0=BC=E5=BC=8F=E7=AE=A1=E6=8E=A7=EF=BC=8C?=
=?UTF-8?q?=E7=94=B5=E8=AF=9D=E5=8A=9F=E8=83=BD=E7=AE=A1=E6=8E=A7?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
app/build.gradle | 4 +-
app/src/main/AndroidManifest.xml | 89 +++-----
.../main/java/com/info/sn/MainActivity.java | 39 ++--
.../java/com/info/sn/jpush/MyReceiver.java | 203 ++++++++++++++----
.../java/com/info/sn/network/UrlPath.java | 2 +-
.../info/sn/network/api/HTTPInterface.java | 159 ++++++++++----
.../sn/receiver/InstallResultReceiver.java | 59 +++++
.../com/info/sn/service/InitJpushServer.java | 43 ++++
.../info/sn/service/MyDownloadService.java | 10 +-
.../main/java/com/info/sn/utils/ApkUtils.java | 167 +++++++++++++-
10 files changed, 597 insertions(+), 178 deletions(-)
create mode 100644 app/src/main/java/com/info/sn/receiver/InstallResultReceiver.java
create mode 100644 app/src/main/java/com/info/sn/service/InitJpushServer.java
diff --git a/app/build.gradle b/app/build.gradle
index 2943961..c797cbc 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -15,8 +15,8 @@ android {
applicationId "com.info.sn"
minSdkVersion 23
targetSdkVersion 28
- versionCode 21
- versionName "1.2.1"
+ versionCode 24
+ versionName "1.2.4"
multiDexEnabled true
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
ndk {
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 4cad6ea..9530d49 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -11,63 +11,40 @@
-
-
-
+
+
+
-
+ android:protectionLevel="signature" />
-
+ tools:ignore="ProtectedPermissions" />
-
-
-
+
-
-
-
-
+
+
-
-
-
-
-
-
-
-
-
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
@@ -92,7 +75,6 @@
android:exported="true">
-
@@ -125,8 +107,7 @@
-
-
+
@@ -221,11 +202,9 @@
-
-
-
+
@@ -237,21 +216,23 @@
-
+
-
+
-
+ android:value="edf9cec22731b8b2fed56ee6" />
diff --git a/app/src/main/java/com/info/sn/MainActivity.java b/app/src/main/java/com/info/sn/MainActivity.java
index a91eef5..f381727 100644
--- a/app/src/main/java/com/info/sn/MainActivity.java
+++ b/app/src/main/java/com/info/sn/MainActivity.java
@@ -120,6 +120,8 @@ public class MainActivity extends CheckPermissionsActivity implements AMapLocati
HTTPInterface.checkDevicesInfo(handler);
HTTPInterface.checkUpdateByself(handler, this.getPackageName(), String.valueOf(BuildConfig.VERSION_CODE));
startService(new Intent(MainActivity.this, MyDownloadService.class));
+ HTTPInterface.getAllAppPackageName(MainActivity.this);
+ HTTPInterface.setBrowser(MainActivity.this);
}
public void registerRefreshReceiver() {
@@ -135,18 +137,18 @@ public class MainActivity extends CheckPermissionsActivity implements AMapLocati
StringBuffer sb = new StringBuffer();
//errCode等于0代表定位成功,其他的为定位失败,具体的可以参照官网定位错误码说明
if (aMapLocation.getErrorCode() == 0) {
- sb.append("定位成功" + "\n");
- sb.append("定位类型: " + aMapLocation.getLocationType() + "\n");
+// sb.append("定位成功" + "\n");
+// sb.append("定位类型: " + aMapLocation.getLocationType() + "\n");
sb.append("位置: " + aMapLocation.getAddress() + "\n");
- sb.append("经 度 : " + aMapLocation.getLongitude() + "\n");
- sb.append("纬 度 : " + aMapLocation.getLatitude() + "\n");
- sb.append("精 度 : " + aMapLocation.getAccuracy() + "米" + "\n");
- sb.append("提供者 : " + aMapLocation.getProvider() + "\n");
+// sb.append("经 度 : " + aMapLocation.getLongitude() + "\n");
+// sb.append("纬 度 : " + aMapLocation.getLatitude() + "\n");
+// sb.append("精 度 : " + aMapLocation.getAccuracy() + "米" + "\n");
+// sb.append("提供者 : " + aMapLocation.getProvider() + "\n");
- sb.append("速 度 : " + aMapLocation.getSpeed() + "米/秒" + "\n");
- sb.append("角 度 : " + aMapLocation.getBearing() + "\n");
+// sb.append("速 度 : " + aMapLocation.getSpeed() + "米/秒" + "\n");
+// sb.append("角 度 : " + aMapLocation.getBearing() + "\n");
// 定位完成的时间
- sb.append("定位时间: " + amapUtils.formatUTC(aMapLocation.getTime(), "yyyy-MM-dd HH:mm:ss") + "\n");
+// sb.append("定位时间: " + amapUtils.formatUTC(aMapLocation.getTime(), "yyyy-MM-dd HH:mm:ss") + "\n");
} else {
//定位失败
sb.append("定位失败" + "\n");
@@ -154,15 +156,16 @@ public class MainActivity extends CheckPermissionsActivity implements AMapLocati
sb.append("错误信息:" + aMapLocation.getErrorInfo() + "\n");
sb.append("错误描述:" + aMapLocation.getLocationDetail() + "\n");
}
- sb.append("***定位质量报告***").append("\n");
- sb.append("* WIFI开关:").append(aMapLocation.getLocationQualityReport().isWifiAble() ? "开启" : "关闭").append("\n");
- sb.append("* GPS状态:").append(getGPSStatusString(aMapLocation.getLocationQualityReport().getGPSStatus())).append("\n");
- sb.append("* GPS星数:").append(aMapLocation.getLocationQualityReport().getGPSSatellites()).append("\n");
- sb.append("****************").append("\n");
+// sb.append("***定位质量报告***").append("\n");
+// sb.append("* WIFI开关:").append(aMapLocation.getLocationQualityReport().isWifiAble() ? "开启" : "关闭").append("\n");
+// sb.append("* GPS状态:").append(getGPSStatusString(aMapLocation.getLocationQualityReport().getGPSStatus())).append("\n");
+// sb.append("* GPS星数:").append(aMapLocation.getLocationQualityReport().getGPSSatellites()).append("\n");
+// sb.append("****************").append("\n");
// 定位之后的回调时间
- sb.append("回调时间: " + amapUtils.formatUTC(System.currentTimeMillis(), "yyyy-MM-dd HH:mm:ss") + "\n");
+// sb.append("回调时间: " + amapUtils.formatUTC(System.currentTimeMillis(), "yyyy-MM-dd HH:mm:ss") + "\n");
Log.e("onLocationChanged", sb.toString());
}
+
/**
* 获取GPS状态的字符串
*
@@ -288,17 +291,17 @@ public class MainActivity extends CheckPermissionsActivity implements AMapLocati
String school = userInfo.getSn_school();
String grade = userInfo.getSn_grade();
if (name == null || name.equals("")) {
- tv_username.setText("用户姓名:未设置");
+ tv_username.setText("未设置");
} else {
tv_username.setText(name);
}
if (school == null || school.equals("")) {
- tv_school.setText("学校:未设置");
+ tv_school.setText("未设置");
} else {
tv_school.setText(school);
}
if (grade == null || grade.equals("")) {
- tv_grade.setText("年级:未设置");
+ tv_grade.setText("未设置");
} else {
tv_grade.setText(getGrade(grade));
}
diff --git a/app/src/main/java/com/info/sn/jpush/MyReceiver.java b/app/src/main/java/com/info/sn/jpush/MyReceiver.java
index a496c2a..c4db4fd 100644
--- a/app/src/main/java/com/info/sn/jpush/MyReceiver.java
+++ b/app/src/main/java/com/info/sn/jpush/MyReceiver.java
@@ -4,6 +4,7 @@ import android.annotation.SuppressLint;
import android.app.ActivityManager;
import android.app.usage.UsageStats;
import android.app.usage.UsageStatsManager;
+import android.bluetooth.BluetoothAdapter;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
@@ -11,11 +12,13 @@ import android.content.IntentFilter;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.os.Environment;
+import android.os.Message;
import android.provider.Settings;
import android.text.TextUtils;
import android.util.Log;
import android.view.WindowManager;
+import com.alibaba.fastjson.JSON;
import com.arialyy.aria.core.Aria;
import com.arialyy.aria.core.download.DownloadEntity;
import com.info.sn.MainActivity;
@@ -31,10 +34,13 @@ import com.lzy.okgo.OkGo;
import com.lzy.okgo.callback.StringCallback;
import com.lzy.okgo.model.Response;
+import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.File;
+import java.util.ArrayList;
+import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
import java.util.SortedMap;
@@ -54,48 +60,45 @@ public class MyReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
- try {
- Bundle bundle = intent.getExtras();
- Logger.d(TAG, "[MyReceiver] onReceive - " + intent.getAction() + ", extras: " + printBundle(bundle));
+ Bundle bundle = intent.getExtras();
+ Logger.d(TAG, "[MyReceiver] onReceive - " + intent.getAction() + ", extras: " + printBundle(bundle));
- if (JPushInterface.ACTION_REGISTRATION_ID.equals(intent.getAction())) {
- String regId = bundle.getString(JPushInterface.EXTRA_REGISTRATION_ID);
- Logger.d(TAG, "[MyReceiver] 接收Registration Id : " + regId);
- //send the Registration Id to your server...
+ if (JPushInterface.ACTION_REGISTRATION_ID.equals(intent.getAction())) {
+ String regId = bundle.getString(JPushInterface.EXTRA_REGISTRATION_ID);
+ Logger.d(TAG, "[MyReceiver] 接收Registration Id : " + regId);
+ //send the Registration Id to your server...
- } else if (JPushInterface.ACTION_MESSAGE_RECEIVED.equals(intent.getAction())) {
- Logger.d(TAG, "[MyReceiver] 接收到推送下来的自定义消息: " + bundle.getString(JPushInterface.EXTRA_MESSAGE));
- processCustomMessage(context, bundle);
+ } else if (JPushInterface.ACTION_MESSAGE_RECEIVED.equals(intent.getAction())) {
+ Logger.d(TAG, "[MyReceiver] 接收到推送下来的自定义消息: " + bundle.getString(JPushInterface.EXTRA_MESSAGE));
+ processCustomMessage(context, bundle);
- } else if (JPushInterface.ACTION_NOTIFICATION_RECEIVED.equals(intent.getAction())) {
- Logger.d(TAG, "[MyReceiver] 接收到推送下来的通知");
- int notifactionId = bundle.getInt(JPushInterface.EXTRA_NOTIFICATION_ID);
- Logger.d(TAG, "[MyReceiver] 接收到推送下来的通知的ID: " + notifactionId);
+ } else if (JPushInterface.ACTION_NOTIFICATION_RECEIVED.equals(intent.getAction())) {
+ Logger.d(TAG, "[MyReceiver] 接收到推送下来的通知");
+ int notifactionId = bundle.getInt(JPushInterface.EXTRA_NOTIFICATION_ID);
+ Logger.d(TAG, "[MyReceiver] 接收到推送下来的通知的ID: " + notifactionId);
- } else if (JPushInterface.ACTION_NOTIFICATION_OPENED.equals(intent.getAction())) {
- Logger.d(TAG, "[MyReceiver] 用户点击打开了通知");
+ } else if (JPushInterface.ACTION_NOTIFICATION_OPENED.equals(intent.getAction())) {
+ Logger.d(TAG, "[MyReceiver] 用户点击打开了通知");
- //打开自定义的Activity
- Intent i = new Intent(context, TestActivity.class);
- i.putExtras(bundle);
- //i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
- i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
- context.startActivity(i);
+ //打开自定义的Activity
+ Intent i = new Intent(context, TestActivity.class);
+ i.putExtras(bundle);
+ //i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+ i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
+ context.startActivity(i);
- } else if (JPushInterface.ACTION_RICHPUSH_CALLBACK.equals(intent.getAction())) {
- Logger.d(TAG, "[MyReceiver] 用户收到到RICH PUSH CALLBACK: " + bundle.getString(JPushInterface.EXTRA_EXTRA));
- //在这里根据 JPushInterface.EXTRA_EXTRA 的内容处理代码,比如打开新的Activity, 打开一个网页等..
-
- } else if (JPushInterface.ACTION_CONNECTION_CHANGE.equals(intent.getAction())) {
- boolean connected = intent.getBooleanExtra(JPushInterface.EXTRA_CONNECTION_CHANGE, false);
- Logger.w(TAG, "[MyReceiver]" + intent.getAction() + " connected state change to " + connected);
- } else {
- Logger.d(TAG, "[MyReceiver] Unhandled intent - " + intent.getAction());
- }
- } catch (Exception e) {
+ } else if (JPushInterface.ACTION_RICHPUSH_CALLBACK.equals(intent.getAction())) {
+ Logger.d(TAG, "[MyReceiver] 用户收到到RICH PUSH CALLBACK: " + bundle.getString(JPushInterface.EXTRA_EXTRA));
+ //在这里根据 JPushInterface.EXTRA_EXTRA 的内容处理代码,比如打开新的Activity, 打开一个网页等..
+ } else if (JPushInterface.ACTION_CONNECTION_CHANGE.equals(intent.getAction())) {
+ boolean connected = intent.getBooleanExtra(JPushInterface.EXTRA_CONNECTION_CHANGE, false);
+ Logger.w(TAG, "[MyReceiver]" + intent.getAction() + " connected state change to " + connected);
+ } else {
+ Logger.d(TAG, "[MyReceiver] Unhandled intent - " + intent.getAction());
}
+
}
// 打印所有的 intent extra 数据
@@ -193,6 +196,7 @@ public class MyReceiver extends BroadcastReceiver {
String title = bundle.getString(JPushInterface.EXTRA_TITLE);
String type = bundle.getString(JPushInterface.EXTRA_CONTENT_TYPE);
String extras = bundle.getString(JPushInterface.EXTRA_EXTRA);
+ HTTPInterface.checkDevicesInfo(context);
switch (message) {
case JIGUANG_GET_DRIVELINE:
@@ -220,7 +224,7 @@ public class MyReceiver extends BroadcastReceiver {
setAppLockedstate(context, extras);
break;
case JIGUANG_FORCE_INSTALLAPK:
- intallApk(extras);
+ intallApk(context, extras);
break;
case JIGUANG_FORCE_UNINSTALLAPK:
unintallApk(context, extras);
@@ -229,18 +233,116 @@ public class MyReceiver extends BroadcastReceiver {
bindService(context, extras);
break;
case JIGUANG_TFMEDIA:
-
+ setTFmedia(context, extras);
break;
case JIGUANG_CAMRERA:
+ setCameta(context, extras);
break;
case JIGUANG_PHONE:
+ setPhone(context, extras);
break;
case JIGUANG_DISABLE_UPDATAE:
+ setAppUpdate(context, extras);
break;
case JIGUANG_APP_WEBSITE:
+
break;
}
+ }
+ private int changeNum(int paramInt) {
+ switch (paramInt) {
+ default:
+ return 1;
+ case 0:
+ return 1;
+ case 1:
+ break;
+ }
+ return 0;
+ }
+
+ private void setPhone(Context context, String json) {
+ com.alibaba.fastjson.JSONObject jsonObject = JSON.parseObject(json);
+ int setting_phone = jsonObject.getInteger("setting_phone");
+ Log.e("setting_phone", String.valueOf(setting_phone));
+ boolean qch_call_forbid = Settings.System.putInt(context.getContentResolver(), "qch_call_forbid", setting_phone);
+ boolean qch_white_list_on = Settings.System.putInt(context.getContentResolver(), "qch_white_list_on", setting_phone);
+ boolean qch_white_list_Array = Settings.System.putString(context.getContentResolver(), "qch_white_list_Array", "981964879");
+ Log.e("SystemSetting", "qch_call_forbid---------" + setting_phone);
+ Log.e("SystemSetting", "qch_call_forbid---------" + qch_call_forbid);
+ Log.e("SystemSetting", "qch_call_forbid---------" + qch_white_list_on);
+ Log.e("SystemSetting", "qch_call_forbid---------" + qch_white_list_Array);
+ }
+
+ private void setCameta(Context context, String json) {
+ com.alibaba.fastjson.JSONObject jsonObject = JSON.parseObject(json);
+ //摄像头开关
+ int setting_camera = jsonObject.getInteger("setting_camera");
+ Settings.System.putInt(context.getContentResolver(), "qch_app_camera", setting_camera);
+ ApkUtils.hideSystemSettingAPP(context, "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");
+ context.sendBroadcast(cameraIntent);
+ }
+
+ String tftype = ".png,.bmp,.jpg,.mpo,.jpeg,.gif,.tif,.tiff,.dib,.jpe,.jfif,.psd,.pdd,.rle,.dcm,.dic,.dc3,.eps,.iff,.tdi,.jpf,.jpx,.jp2,.j2c,.jpc,.jps,.j2k,.pcx,.pdp,.raw,.pns,.aac,.ac3,.aiff,.amr,.ape,.au,.fla,.flac,.imy,.m4r,.mid,.mka,.mmf,.mp2,.mp3,.mxmf,.ogg,.ra,.ts,.wma,.wv,.xmf,.m4a,.wav,.3gpp,.mp4,.3gp,.as,.asf,.avi,.dat,.f4v,.flv,.mkv,.mov,.mpg,.rmvb,.swf,.trp,.vob,.webm,.wmv,.navi,.video,.ram,.qsv,.xv,.rm,.vcd,.svcd,.mlv,.mpe,.mpeg,.m2v,.iso,.html,.htm,.txt,.xls,.doc,.docx,.docm,.pdf,.xps,.dot,.dotx,.dotm,.mht,.mhtml,.rft,.xml,.xlsx,.xlsm,.xlsb,.xltx,.xltm,.xlt,.wps,.wpt,.rtf,.et,.ett,.dps,.dpt,.wpp,.ppt,.pptx,.pptm,.pps,.pot,.potm,.ppsx,.ppsm,.odp";
+
+ private void setTFmedia(Context context, String json) {
+ com.alibaba.fastjson.JSONObject jsonObject = JSON.parseObject(json);
+//影音管控开关
+ int setting_tfmedia = jsonObject.getInteger("setting_tfmedia");
+ Settings.System.putInt(context.getContentResolver(), "qch_tfmedia_forbid", setting_tfmedia);
+ Log.e("SystemSetting", "qch_tfmedia_forbid---------" + setting_tfmedia);
+
+ if (setting_tfmedia == 1) {
+ String s = Settings.System.getString(context.getContentResolver(), "qch_tfmedia_filetypes");//影音管控
+ Log.e("SystemSetting", "qch_tfmedia_filetypes old" + s);
+ boolean b = Settings.System.putString(context.getContentResolver(), "qch_tfmedia_filetypes", tftype);//影音管控
+ Log.e("SystemSetting", "qch_tfmedia_filetypes---------" + b + ":" + tftype);
+ } else {
+ Settings.System.putInt(context.getContentResolver(), "qch_tfmedia_forbid", 0);
+ }
+ }
+
+ private void setAppUpdate(Context context, String json) {
+ com.alibaba.fastjson.JSONObject jsonObject = JSON.parseObject(json);
+ String is_upgrade = jsonObject.getString("is_upgrade");
+ String packageName = jsonObject.getString("package");
+ String nowApplist = Settings.System.getString(context.getContentResolver(), "qch_app_forbid");
+ List applist = new ArrayList<>(Arrays.asList(nowApplist.split(",")));
+ if (is_upgrade.equals("0")) {
+ if (applist.contains(packageName)) {
+ applist.remove(packageName);
+ } else {
+ Log.e("setAppUpdate", "app已经存在");
+ }
+ } else if (is_upgrade.equals("1")) {
+ if (!applist.contains(packageName)) {
+ applist.add(packageName);
+ }
+ }
+ String packageString = "";
+ for (String s : applist) {
+ if (s.equals("")) {
+ continue;
+ }
+ packageString += s + ",";
+ }
+ if (!packageString.equals("")) {
+ packageString = packageString.substring(0, packageString.length() - 1);
+ }
+ Settings.System.putString(context.getContentResolver(), "qch_app_forbid", packageString);
+ Log.e("setAppUpdate", Settings.System.getString(context.getContentResolver(), "qch_app_forbid"));
}
synchronized private void sendStartTime(Context context, String jsonArray) {
@@ -337,14 +439,22 @@ public class MyReceiver extends BroadcastReceiver {
}
}
+ private BluetoothAdapter mBluetoothAdapter;
+
synchronized private void setBluetoothState(Context context, String jsonArray) {
if (jsonArray.length() > 0) {
+ if (null == mBluetoothAdapter) {
+ mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();//获取默认蓝牙适配器
+ }
try {
JSONObject extra = new JSONObject(jsonArray);
int is_bluetooth = extra.getInt("is_bluetooth");
- boolean qch_bt_forbid_on = Settings.System.putInt(context.getContentResolver(), "qch_bt_forbid_on", is_bluetooth);
+ if (is_bluetooth==1){
+ mBluetoothAdapter.disable();//设置关闭时关闭蓝牙
+ }
+ boolean qch_bt_forbid_on = Settings.System.putInt(context.getContentResolver(), "qch_bht_forbid_on", is_bluetooth);
if (qch_bt_forbid_on) {
- LogUtils.e("setBluetoothState:", Settings.System.getString(context.getContentResolver(), "qch_bt_forbid_on"));
+ LogUtils.e("setBluetoothState:", Settings.System.getString(context.getContentResolver(), "qch_bht_forbid_on"));
} else {
ToastUtil.debugShow("setBluetoothState failed,state:" + is_bluetooth);
}
@@ -364,17 +474,19 @@ public class MyReceiver extends BroadcastReceiver {
String white = extra.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-whiteList" + whiteList + ":" + white);
} else {
Settings.System.putString(context.getContentResolver(), "DeselectBrowserArray", " ");
}
+ Log.e("whiteList", Settings.System.getString(context.getContentResolver(), "DeselectBrowserArray"));
String black = extra.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-blackList" + blackList + ":" + black);
} else {
Settings.System.putString(context.getContentResolver(), "qch_webblack_url", " ");
}
+ Log.e("blackList", Settings.System.getString(context.getContentResolver(), "qch_webblack_url"));
} catch (JSONException e) {
e.printStackTrace();
LogUtils.e("setBrowserUrlpath", e.getMessage());
@@ -393,17 +505,17 @@ public class MyReceiver extends BroadcastReceiver {
String package1 = extra.getString("package1");
if (package0.length() != 0) {
boolean qch_jgy_network_allow = Settings.System.putString(context.getContentResolver(), "qch_jgy_network_allow", package0);
- LogUtils.e("fht", "setAppNetworkstate::" + qch_jgy_network_allow + ":" + Settings.System.getString(context.getContentResolver(), "qch_jgy_network_allow"));
+ LogUtils.e("fht", "qch_jgy_network_allow::" + qch_jgy_network_allow + ":" + Settings.System.getString(context.getContentResolver(), "qch_jgy_network_allow"));
} else {
boolean qch_jgy_network_allow = Settings.System.putString(context.getContentResolver(), "qch_jgy_network_allow", "invalid");
- LogUtils.e("fht", "setAppNetworkstate::" + qch_jgy_network_allow + ":" + Settings.System.getString(context.getContentResolver(), "qch_jgy_network_allow"));
+ LogUtils.e("fht", "qch_jgy_network_allow::" + qch_jgy_network_allow + ":" + Settings.System.getString(context.getContentResolver(), "qch_jgy_network_allow"));
}
if (package1.length() != 0) {
boolean qch_jgy_network_disallow = Settings.System.putString(context.getContentResolver(), "qch_jgy_network_disallow", package1);
- LogUtils.e("fht", "setAppNetworkstate::" + qch_jgy_network_disallow + ":" + Settings.System.getString(context.getContentResolver(), "qch_jgy_network_disallow"));
+ LogUtils.e("fht", "qch_jgy_network_disallow::" + qch_jgy_network_disallow + ":" + Settings.System.getString(context.getContentResolver(), "qch_jgy_network_disallow"));
} else {
boolean qch_jgy_network_disallow = Settings.System.putString(context.getContentResolver(), "qch_jgy_network_disallow", "invalid");
- LogUtils.e("fht", "setAppNetworkstate::" + qch_jgy_network_disallow + ":" + Settings.System.getString(context.getContentResolver(), "qch_jgy_network_disallow"));
+ LogUtils.e("fht", "qch_jgy_network_disallow::" + qch_jgy_network_disallow + ":" + Settings.System.getString(context.getContentResolver(), "qch_jgy_network_disallow"));
}
} catch (JSONException e) {
@@ -440,7 +552,8 @@ public class MyReceiver extends BroadcastReceiver {
}
//静默安装应用,使用okgo,断网会出现问题,等待修改使用aria
- synchronized private void intallApk(String jsondata) {
+ synchronized private void intallApk(Context context, String jsondata) {
+ HTTPInterface.getAllAppPackageName(context);
try {
JSONObject extra = new JSONObject(jsondata);
@@ -503,7 +616,7 @@ public class MyReceiver extends BroadcastReceiver {
if (!ApkUtils.isAvailable(context.getApplicationContext(), packageName)) {
HTTPInterface.setAppuninstallInfo(sn_id, packageName);
} else {
- ApkUtils.deleteApkInSilence(packageName);
+ ApkUtils.uninstallApp(context, packageName);
}
}
} catch (JSONException e) {
diff --git a/app/src/main/java/com/info/sn/network/UrlPath.java b/app/src/main/java/com/info/sn/network/UrlPath.java
index f052b69..11144f1 100644
--- a/app/src/main/java/com/info/sn/network/UrlPath.java
+++ b/app/src/main/java/com/info/sn/network/UrlPath.java
@@ -19,7 +19,7 @@ public class UrlPath {
//获取当前最顶层应用和电量
public final static String SEND_DRIVE_STATE = HOMEPATHRUL + "Online/online";
- public final static String GET_ALL_PACKAGENAME = HOMEPATHRUL + "App/allPackage";
+ public final static String GET_ALL_PACKAGENAME = HOMEPATHRUL + "App/allPackageSn";
//获取所有应用包名
public final static String BIND_DEVICES = HOMEPATHRUL + "Member/binding";
//绑定设备消息
diff --git a/app/src/main/java/com/info/sn/network/api/HTTPInterface.java b/app/src/main/java/com/info/sn/network/api/HTTPInterface.java
index 901c1ac..cde3f4d 100644
--- a/app/src/main/java/com/info/sn/network/api/HTTPInterface.java
+++ b/app/src/main/java/com/info/sn/network/api/HTTPInterface.java
@@ -14,6 +14,7 @@ import androidx.annotation.RequiresApi;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONException;
import com.alibaba.fastjson.JSONObject;
+import com.info.sn.MainActivity;
import com.info.sn.bean.MessageWhat;
import com.info.sn.bean.UserInfo;
import com.info.sn.jpush.TagAliasOperatorHelper;
@@ -77,6 +78,43 @@ public class HTTPInterface {
}
});
}
+ public static synchronized void checkDevicesInfo(final Context context) {
+ OkGo.post(UrlPath.SNINFO)
+ .params("sn", Utils.getSerial())
+ .execute(new StringCallback() {
+ @Override
+ public void onSuccess(Response response) {
+ Log.e("onSuccess", "checkDevicesInfo");
+ try {
+ JSONObject bodyObject = JSON.parseObject(response.body());
+ Integer code = (bodyObject.getInteger("code"));
+ String msg = bodyObject.getString("msg");
+ String data = bodyObject.getString("data");
+ UserInfo userInfo = JSON.parseObject(data, UserInfo.class);
+ if (code == 200) {
+ SPUtils.put(context, "isLogined", 1);
+ SPUtils.put(context, "member_id", userInfo.getMember_id());
+ SPUtils.put(context, "sn_id", userInfo.getId());
+ } else if (code == -200) {
+ SPUtils.put(context, "isLogined", 0);
+
+ } else if (code == -250) {
+ SPUtils.put(context, "isLogined", 2);
+ //设备验证
+ }
+ } catch (Exception ex) {
+ Log.e("checkDevicesInfo", ex.getMessage());
+ }
+ }
+
+ @Override
+ public void onError(Response response) {
+ super.onError(response);
+ Log.e("onError", response.getException().toString());
+
+ }
+ });
+ }
@RequiresApi(api = Build.VERSION_CODES.N)
public static void sendTimeLog(final Handler handler, UserInfo userInfo, String appname, int status, long time) {
@@ -151,13 +189,13 @@ public class HTTPInterface {
message.obj = bundle;
}
handler.sendMessage(message);
- Log.e("checkUpdateSN", msg);
+// Log.e("checkUpdateSN", msg);
} else {
handler.sendEmptyMessage(-200);
- Log.e("checkUpdateSN", msg);
+// Log.e("checkUpdateSN", msg);
}
} catch (Exception e) {
- Log.e("checkUpdateSN", e.getMessage());
+// Log.e("checkUpdateSN", e.getMessage());
}
}
@@ -165,7 +203,7 @@ public class HTTPInterface {
public void onError(Response response) {
super.onError(response);
handler.sendEmptyMessage(-300);
- Log.e("checkUpdateSN", response.getException().toString());
+// Log.e("checkUpdateSN", response.getException().toString());
}
});
}
@@ -196,13 +234,13 @@ public class HTTPInterface {
message.obj = bundle;
}
handler.sendMessage(message);
- Log.e("checkUpdateSN", msg);
+// Log.e("checkUpdateSN", msg);
} else {
handler.sendEmptyMessage(-200);
- Log.e("checkUpdateSN", msg);
+// Log.e("checkUpdateSN", msg);
}
} catch (Exception e) {
- Log.e("checkUpdateSN", e.getMessage());
+// Log.e("checkUpdateSN", e.getMessage());
}
}
@@ -210,7 +248,7 @@ public class HTTPInterface {
public void onError(Response response) {
super.onError(response);
handler.sendEmptyMessage(-300);
- Log.e("checkUpdateSN", response.getException().toString());
+// Log.e("checkUpdateSN", response.getException().toString());
}
});
}
@@ -290,45 +328,84 @@ public class HTTPInterface {
}
synchronized public static void getAllAppPackageName(final Handler handler) {
- OkGo.get(UrlPath.GET_ALL_PACKAGENAME).execute(new StringCallback() {
- @Override
- public void onSuccess(Response response) {
- String s = response.body();
- try {
- JSONObject body = JSON.parseObject(s);
- int code = body.getInteger("code");
- String msg = body.getString("msg");
- String data = body.getString("data");
- if (code == 200) {
- List jsonArray = JSON.parseArray(data, JSONObject.class);
- String packageList = "";
- for (JSONObject jsonObject : jsonArray) {
- packageList += jsonObject.getString("app_package") + ",";
- }
- if (!packageList.isEmpty()) {
- Log.e("fht", packageList);
- Message message = new Message();
- message.what = 201;
- message.obj = packageList;
- handler.sendMessage(message);
- } else {
- handler.sendEmptyMessage(202);
+ OkGo.post(UrlPath.GET_ALL_PACKAGENAME)
+ .params("sn", Utils.getSerial())
+ .execute(new StringCallback() {
+ @Override
+ public void onSuccess(Response response) {
+ String s = response.body();
+ try {
+ JSONObject body = JSON.parseObject(s);
+ int code = body.getInteger("code");
+ String msg = body.getString("msg");
+ String data = body.getString("data");
+ if (code == 200) {
+ List jsonArray = JSON.parseArray(data, JSONObject.class);
+ String packageList = "";
+ for (JSONObject jsonObject : jsonArray) {
+ packageList += jsonObject.getString("app_package") + ",";
+ }
+ if (!packageList.isEmpty()) {
+ Log.e("getAllAppPackageName", packageList);
+ Message message = new Message();
+ message.what = 201;
+ message.obj = packageList;
+ handler.sendMessage(message);
+ } else {
+ handler.sendEmptyMessage(202);
+ }
+ }
+ } catch (Exception e) {
+
}
}
- } catch (Exception e) {
- }
- }
-
- @Override
- public void onError(Response response) {
- super.onError(response);
- }
- });
+ @Override
+ public void onError(Response response) {
+ super.onError(response);
+ Log.e("getAllAppPackageName", response.getException().getMessage());
+ }
+ });
}
+ synchronized public static void getAllAppPackageName(final Context context) {
+ OkGo.post(UrlPath.GET_ALL_PACKAGENAME)
+ .params("sn", Utils.getSerial())
+ .execute(new StringCallback() {
+ @Override
+ public void onSuccess(Response response) {
+ String s = response.body();
+ try {
+ com.alibaba.fastjson.JSONObject body = JSON.parseObject(s);
+ int code = body.getInteger("code");
+ String msg = body.getString("msg");
+ Log.e("msg", "getAllAppPackageName" + msg);
+ String data = body.getString("data");
+ if (code == 200) {
+ List jsonArray = JSON.parseArray(data, com.alibaba.fastjson.JSONObject.class);
+ String packageList = "";
+ for (com.alibaba.fastjson.JSONObject jsonObject : jsonArray) {
+ packageList += jsonObject.getString("app_package") + ",";
+ }
+ packageList = packageList + "com.info.sn,com.android.uiuios,com.appstore.uiui,com.uiuios.updatetools";
+ Log.e("packageList now", packageList);
+ Log.e("packageList", Settings.System.getString(context.getContentResolver(), "qch_app_forbid"));
+ Settings.System.putString(context.getContentResolver(), "qch_app_forbid", packageList);
+ }
+ } catch (Exception e) {
+ Log.e("getAllAppPackageName", e.getMessage());
+ }
+ }
- private void setBrowser(final Context context) {
+ @Override
+ public void onError(Response response) {
+ super.onError(response);
+ Log.e("getAllAppPackageName", response.getException().getMessage());
+ }
+ });
+ }
+
+ public static void setBrowser(final Context context) {
OkGo.post(UrlPath.SET_BROWSER_URL)
.params("sn", Utils.getSerial())
.execute(new StringCallback() {
diff --git a/app/src/main/java/com/info/sn/receiver/InstallResultReceiver.java b/app/src/main/java/com/info/sn/receiver/InstallResultReceiver.java
new file mode 100644
index 0000000..95ea862
--- /dev/null
+++ b/app/src/main/java/com/info/sn/receiver/InstallResultReceiver.java
@@ -0,0 +1,59 @@
+package com.info.sn.receiver;
+
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.pm.PackageInstaller;
+import android.os.Build;
+import android.util.Log;
+
+import androidx.annotation.RequiresApi;
+
+import com.info.sn.utils.ToastUtil;
+
+public class InstallResultReceiver extends BroadcastReceiver {
+ private static final String TAG = "InstallResultReceiver";
+
+ @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ // TODO: This method is called when the BroadcastReceiver is receiving
+ // an Intent broadcast.
+ //throw new UnsupportedOperationException("Not yet implemented");
+
+
+ if (intent != null) {
+ final int status = intent.getIntExtra(PackageInstaller.EXTRA_STATUS,
+ PackageInstaller.STATUS_FAILURE);
+ if (status == PackageInstaller.STATUS_SUCCESS) {
+ // success
+ String PACKAGE_NAME = intent.getStringExtra("android.content.pm.extra.PACKAGE_NAME");
+
+ Log.e(TAG, "APP Install Success!");
+ } else {
+ String msg = intent.getStringExtra(PackageInstaller.EXTRA_STATUS_MESSAGE);
+ }
+ }
+// String s = intent.getAction();
+// Log.e("fht", s);
+// Bundle extras = intent.getExtras();
+// Set ks = extras.keySet();
+// Iterator iterator = ks.iterator();
+// while (iterator.hasNext()) {
+// Log.d("KEY", iterator.next());
+// }
+ String STATUS = intent.getStringExtra(PackageInstaller.EXTRA_STATUS);
+ String PACKAGE_NAME = intent.getStringExtra(PackageInstaller.EXTRA_PACKAGE_NAME);
+ String SESSION_ID = intent.getStringExtra(PackageInstaller.EXTRA_SESSION_ID);
+ String STATUS_MESSAGE = intent.getStringExtra(PackageInstaller.EXTRA_STATUS_MESSAGE);
+ String LEGACY_STATUS = intent.getStringExtra("android.content.pm.extra.LEGACY_STATUS");
+// Log.e("fht", STATUS);
+// Log.e("fht", PACKAGE_NAME);
+// Log.e("fht", SESSION_ID);
+// Log.e("fht", LEGACY_STATUS);
+// Log.e("fht", STATUS_MESSAGE);
+ if (STATUS_MESSAGE != null && STATUS_MESSAGE.equals("INSTALL_SUCCEEDED")) {
+ ToastUtil.show(PACKAGE_NAME + "安装成功");
+ }
+ }
+}
diff --git a/app/src/main/java/com/info/sn/service/InitJpushServer.java b/app/src/main/java/com/info/sn/service/InitJpushServer.java
new file mode 100644
index 0000000..f6926a3
--- /dev/null
+++ b/app/src/main/java/com/info/sn/service/InitJpushServer.java
@@ -0,0 +1,43 @@
+package com.info.sn.service;
+
+import android.app.Service;
+import android.content.Intent;
+import android.os.Handler;
+import android.os.IBinder;
+import android.os.Message;
+
+import com.info.sn.network.api.HTTPInterface;
+
+public class InitJpushServer extends Service {
+ public InitJpushServer() {
+
+ }
+
+ @Override
+ public IBinder onBind(Intent intent) {
+ // TODO: Return the communication channel to the service.
+// throw new UnsupportedOperationException("Not yet implemented");
+ return null;
+ }
+
+
+ @Override
+ public void onCreate() {
+ super.onCreate();
+ }
+
+ @Override
+ public int onStartCommand(Intent intent, int flags, int startId) {
+ HTTPInterface.checkDevicesInfo(InitJpushServer.this);
+ return START_STICKY;
+ }
+
+
+ private Handler mHandler = new Handler() {
+ @Override
+ public void handleMessage(Message msg) {
+ super.handleMessage(msg);
+ }
+ };
+
+}
diff --git a/app/src/main/java/com/info/sn/service/MyDownloadService.java b/app/src/main/java/com/info/sn/service/MyDownloadService.java
index 65f6439..b141eeb 100644
--- a/app/src/main/java/com/info/sn/service/MyDownloadService.java
+++ b/app/src/main/java/com/info/sn/service/MyDownloadService.java
@@ -51,12 +51,12 @@ public class MyDownloadService extends Service implements NetworkUtils.OnNetwork
//静默升级桌面
CheckUpdateByPackageName("com.uiuios.updatetools", handler);
//静默升级更新工具
- HTTPInterface.getAllAppPackageName(handler);
+// HTTPInterface.getAllAppPackageName(handler);
Aria.download(this).register();
Aria.download(this).resumeAllTask();
//恢复所有未完成的下载任务
- return super.onStartCommand(intent, flags, startId);
+ return START_STICKY;
}
@@ -126,11 +126,9 @@ public class MyDownloadService extends Service implements NetworkUtils.OnNetwork
break;
case 201:
String apppackage = (String) msg.obj;
- Log.e("fht", Settings.System.getString(getContentResolver(), "qch_app_forbid") + "?");
+ Log.e("handler", Settings.System.getString(getContentResolver(), "qch_app_forbid") + "?");
try {
- if (Settings.System.putString(getContentResolver(), "qch_app_forbid", apppackage)) {
- Log.e("fht", "app package write successful");
- }
+ Settings.System.putString(getContentResolver(), "qch_app_forbid", apppackage+ "com.info.sn,com.android.uiuios,com.appstore.uiui,com.uiuios.updatetools");
} catch (Exception e) {
Log.e("fht", e.getMessage());
}
diff --git a/app/src/main/java/com/info/sn/utils/ApkUtils.java b/app/src/main/java/com/info/sn/utils/ApkUtils.java
index 82681a3..a1276a7 100644
--- a/app/src/main/java/com/info/sn/utils/ApkUtils.java
+++ b/app/src/main/java/com/info/sn/utils/ApkUtils.java
@@ -1,29 +1,35 @@
package com.info.sn.utils;
import android.app.Activity;
+import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageInfo;
+import android.content.pm.PackageInstaller;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.os.Binder;
import android.os.Build;
+import android.provider.Settings;
import android.util.Log;
import android.view.View;
-import android.widget.Toast;
+import androidx.annotation.RequiresApi;
import androidx.core.content.FileProvider;
import com.info.sn.BuildConfig;
import com.info.sn.R;
+import com.info.sn.receiver.InstallResultReceiver;
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.File;
+import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
+import java.io.OutputStream;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.ArrayList;
@@ -113,15 +119,17 @@ public class ApkUtils {
}
/**
- * 卸载一个app
+ * 根据包名卸载应用
+ *
+ * @param packageName
*/
+ @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
public static void uninstall(Context context, String packageName) {
- //通过程序的包名创建URI
- Uri packageURI = Uri.parse("package:" + packageName);
- //创建Intent意图
- Intent intent = new Intent(Intent.ACTION_DELETE, packageURI);
- //执行卸载程序
- context.startActivity(intent);
+ Intent broadcastIntent = new Intent(context, InstallResultReceiver.class);
+ PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 1,
+ broadcastIntent, PendingIntent.FLAG_UPDATE_CURRENT);
+ PackageInstaller packageInstaller = context.getPackageManager().getPackageInstaller();
+ packageInstaller.uninstall(packageName, pendingIntent.getIntentSender());
}
/**
@@ -337,7 +345,15 @@ public class ApkUtils {
}
}
- public static boolean installApp(Context context, String apkPath) {
+ public static void installApp(Context context, String filePath) {
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
+ installAppatPie(context, filePath);
+ } else {
+ installApps(filePath);
+ }
+ }
+
+ public static boolean installApps(String apkPath) {
ToastUtil.show("正在安装应用...");
Process process = null;
BufferedReader successResult = null;
@@ -356,7 +372,7 @@ public class ApkUtils {
errorMsg.append(s);
}
} catch (Exception e) {
-
+ Log.e("installApps1", e.getMessage());
} finally {
try {
if (successResult != null) {
@@ -366,7 +382,7 @@ public class ApkUtils {
errorResult.close();
}
} catch (Exception e) {
-
+ Log.e("installApps2", e.getMessage());
}
if (process != null) {
process.destroy();
@@ -381,6 +397,92 @@ public class ApkUtils {
return successMsg.toString().equalsIgnoreCase("success");
}
+ @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
+ public static void installAppatPie(Context context, String apkFilePath) {
+ File file = new File(apkFilePath);
+ PackageInstaller packageInstaller = context.getPackageManager().getPackageInstaller();
+ PackageInstaller.SessionParams sessionParams = new PackageInstaller.SessionParams(PackageInstaller
+ .SessionParams.MODE_FULL_INSTALL);
+ sessionParams.setSize(file.length());
+ int sessionId = createSession(packageInstaller, sessionParams);
+ if (sessionId != -1) {
+ boolean copySuccess = copyApkFile(packageInstaller, sessionId, apkFilePath);
+ if (copySuccess) {
+ ToastUtil.show("正在安装应用");
+ install(packageInstaller, sessionId, context);
+ }
+
+ }
+ }
+
+ @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
+ private static void install(PackageInstaller packageInstaller, int sessionId, Context context) {
+ try {
+ PackageInstaller.Session session = packageInstaller.openSession(sessionId);
+ Intent intent = new Intent(context, InstallResultReceiver.class);
+ PendingIntent pendingIntent = PendingIntent.getBroadcast(
+ context,
+ 1, intent,
+ PendingIntent.FLAG_UPDATE_CURRENT
+ );
+ session.commit(pendingIntent.getIntentSender());
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+
+ @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
+ private static int createSession(PackageInstaller packageInstaller, PackageInstaller.SessionParams sessionParams) {
+ int sessionId = -1;
+ try {
+ sessionId = packageInstaller.createSession(sessionParams);
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ return sessionId;
+ }
+
+ @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
+ private static boolean copyApkFile(PackageInstaller pi, int sessionId, String apkFilePath) {
+ boolean success = false;
+ File apkFile = new File(apkFilePath);
+ PackageInstaller.Session session = null;
+ try {
+ session = pi.openSession(sessionId);
+ OutputStream out = session.openWrite("app.apk", 0, apkFile.length());
+ FileInputStream input = new FileInputStream(apkFile);
+ int read = 0;
+ byte[] buffer = new byte[65536];
+// while (read != -1) {
+// read = input.read(buffer);
+// out.write(buffer, 0, read);
+// }
+ while (true) {
+ read = input.read(buffer);
+ if (read == -1) {
+ session.fsync(out);
+ success = true;
+ out.close();
+ input.close();
+ break;
+ }
+ out.write(buffer, 0, read);
+ }
+ } catch (IOException e) {
+ e.printStackTrace();
+ Log.e("fht", "copyApkFile" + e.getMessage());
+ }
+ return success;
+ }
+
+ public static void uninstallApp(Context context, String packageName) {
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
+ ApkUtils.uninstall(context, packageName);
+ } else {
+ ApkUtils.deleteApkInSilence(packageName);
+ }
+ }
+
public static void deleteApkInSilence(String packageName) {
Class> pmService;
Class> activityTherad;
@@ -405,6 +507,7 @@ public class ApkUtils {
}
}
+
private static Class>[] getParamTypes(Class> cls, String mName) {
Class> cs[] = null;
Method[] mtd = cls.getMethods();
@@ -498,4 +601,46 @@ public class ApkUtils {
context.startActivity(intent);
}
+ public static void hideSystemSettingAPP(Context context, String pkage) {
+ int hide = 0;
+ //后台0显示,1隐藏
+ try {
+ if (pkage.equalsIgnoreCase("com.mediatek.camera")) {
+ if (Settings.System.getInt(context.getContentResolver(), "qch_app_camera") == 1) {
+ hide = 1;
+ }
+ } else if (pkage.equalsIgnoreCase("com.android.deskclock")) {
+ if (Settings.System.getInt(context.getContentResolver(), "qch_app_deskclock") == 1) {
+ hide = 1;
+ }
+ } else if (pkage.equalsIgnoreCase("com.android.soundrecorder")) {
+ if (Settings.System.getInt(context.getContentResolver(), "qch_app_soundrecorder") == 1) {
+ hide = 1;
+ }
+ } else if (pkage.equalsIgnoreCase("com.android.music")) {
+ if (Settings.System.getInt(context.getContentResolver(), "qch_app_music") == 1) {
+ hide = 1;
+ }
+ } else if (pkage.equalsIgnoreCase("com.android.gallery3d")) {
+ if (Settings.System.getInt(context.getContentResolver(), "qch_app_gallery") == 1) {
+ hide = 1;
+ }
+ } else if (pkage.equalsIgnoreCase("com.android.documentsui")
+ || pkage.equalsIgnoreCase("com.mediatek.filemanager")) {
+ if (Settings.System.getInt(context.getContentResolver(), "qch_app_filemanager") == 1) {
+ hide = 1;
+ }
+ }
+ } catch (Settings.SettingNotFoundException e) {
+ e.printStackTrace();
+ }
+ PackageManager pm = context.getPackageManager();
+ if (hide == 0) {
+ pm.setApplicationEnabledSetting(pkage, PackageManager.COMPONENT_ENABLED_STATE_DEFAULT, 0);
+ } else {
+ pm.setApplicationEnabledSetting(pkage, PackageManager.COMPONENT_ENABLED_STATE_DISABLED, 0);
+ }
+ }
+
+
}