getFragments() {
+ return mFragmentList;
+ }
+}
diff --git a/app/src/main/java/com/info/sn/fragment/QRCodeFragment.java b/app/src/main/java/com/info/sn/fragment/QRCodeFragment.java
new file mode 100644
index 0000000..8efadb9
--- /dev/null
+++ b/app/src/main/java/com/info/sn/fragment/QRCodeFragment.java
@@ -0,0 +1,87 @@
+package com.info.sn.fragment;
+
+import android.graphics.Bitmap;
+import android.os.Bundle;
+
+import androidx.fragment.app.Fragment;
+
+import android.util.Log;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.ImageView;
+
+import com.info.sn.R;
+import com.info.sn.config.Configs;
+import com.info.sn.utils.CXAESUtil;
+import com.info.sn.utils.Utils;
+
+import butterknife.BindView;
+
+/**
+ * A simple {@link Fragment} subclass.
+ * Use the {@link QRCodeFragment#newInstance} factory method to
+ * create an instance of this fragment.
+ */
+public class QRCodeFragment extends Fragment {
+ // TODO: Rename parameter arguments, choose names that match
+ // the fragment initialization parameters, e.g. ARG_ITEM_NUMBER
+ private static final String ARG_PARAM1 = "param1";
+ private static final String ARG_PARAM2 = "param2";
+
+ ImageView qr_code;
+
+ // TODO: Rename and change types of parameters
+ private String mParam1;
+ private String mParam2;
+ private String TAG = QRCodeFragment.class.getSimpleName();
+ private View mView ;
+ public QRCodeFragment() {
+ // Required empty public constructor
+ }
+
+ /**
+ * Use this factory method to create a new instance of
+ * this fragment using the provided parameters.
+ *
+ * @param param1 Parameter 1.
+ * @param param2 Parameter 2.
+ * @return A new instance of fragment QRCodeFragment.
+ */
+ // TODO: Rename and change types and number of parameters
+ public static QRCodeFragment newInstance(String param1, String param2) {
+ QRCodeFragment fragment = new QRCodeFragment();
+ Bundle args = new Bundle();
+ args.putString(ARG_PARAM1, param1);
+ args.putString(ARG_PARAM2, param2);
+ fragment.setArguments(args);
+ return fragment;
+ }
+
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ if (getArguments() != null) {
+ mParam1 = getArguments().getString(ARG_PARAM1);
+ mParam2 = getArguments().getString(ARG_PARAM2);
+ }
+
+ }
+
+ @Override
+ public View onCreateView(LayoutInflater inflater, ViewGroup container,
+ Bundle savedInstanceState) {
+ // Inflate the layout for this fragment
+ mView = inflater.inflate(R.layout.fragment_qrcode, container, false);
+ qr_code =mView.findViewById(R.id.qr_code);
+ try {
+ String encryptString = CXAESUtil.encrypt(Configs.AES_KEY, Utils.getSerial());
+ Bitmap bitmap = Utils.createQRImage(encryptString, 300, 300);
+ qr_code.setImageBitmap(bitmap);
+ } catch (Exception e) {
+ Log.e(TAG, "onCreate: " + e.getMessage());
+ e.printStackTrace();
+ }
+ return mView;
+ }
+}
diff --git a/app/src/main/java/com/info/sn/jpush/ExampleApplication.java b/app/src/main/java/com/info/sn/jpush/ExampleApplication.java
index 0af1579..2bbd7fb 100644
--- a/app/src/main/java/com/info/sn/jpush/ExampleApplication.java
+++ b/app/src/main/java/com/info/sn/jpush/ExampleApplication.java
@@ -3,6 +3,7 @@ package com.info.sn.jpush;
import android.app.Application;
import com.info.sn.BuildConfig;
+import com.info.sn.utils.Utils;
import cn.jpush.android.api.JPushInterface;
diff --git a/app/src/main/java/com/info/sn/jpush/ExampleUtil.java b/app/src/main/java/com/info/sn/jpush/ExampleUtil.java
index 651c151..a89100a 100644
--- a/app/src/main/java/com/info/sn/jpush/ExampleUtil.java
+++ b/app/src/main/java/com/info/sn/jpush/ExampleUtil.java
@@ -85,15 +85,15 @@ public class ExampleUtil {
public static void showToast(final String toast, final Context context)
{
- new Thread(new Runnable() {
-
- @Override
- public void run() {
- Looper.prepare();
-// Toast.makeText(context, toast, Toast.LENGTH_SHORT).show();
- Looper.loop();
- }
- }).start();
+// new Thread(new Runnable() {
+//
+// @Override
+// public void run() {
+// Looper.prepare();
+//// Toast.makeText(context, toast, Toast.LENGTH_SHORT).show();
+// Looper.loop();
+// }
+// }).start();
}
public static boolean isConnected(Context context) {
diff --git a/app/src/main/java/com/info/sn/jpush/MyJPushMessageReceiver.java b/app/src/main/java/com/info/sn/jpush/MyJPushMessageReceiver.java
index efdc27e..ec6b01f 100644
--- a/app/src/main/java/com/info/sn/jpush/MyJPushMessageReceiver.java
+++ b/app/src/main/java/com/info/sn/jpush/MyJPushMessageReceiver.java
@@ -2,8 +2,6 @@ package com.info.sn.jpush;
import android.content.Context;
-import com.info.sn.base.MyApplication;
-
import cn.jpush.android.api.CustomMessage;
import cn.jpush.android.api.JPushMessage;
import cn.jpush.android.service.JPushMessageReceiver;
@@ -40,8 +38,5 @@ public class MyJPushMessageReceiver extends JPushMessageReceiver {
@Override
public void onMessage(Context context, CustomMessage customMessage) {
super.onMessage(context, customMessage);
-// MyApplication.getInstance().manageCustomMessage(customMessage);
}
-
-
}
diff --git a/app/src/main/java/com/info/sn/jpush/MyReceiver.java b/app/src/main/java/com/info/sn/jpush/MyReceiver.java
deleted file mode 100644
index 8b233ff..0000000
--- a/app/src/main/java/com/info/sn/jpush/MyReceiver.java
+++ /dev/null
@@ -1,959 +0,0 @@
-package com.info.sn.jpush;
-
-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;
-import android.content.IntentFilter;
-import android.content.pm.PackageManager;
-import android.os.Bundle;
-import android.os.CountDownTimer;
-import android.os.Environment;
-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.bean.BaseResponse;
-import com.info.sn.network.HTTPInterface;
-import com.info.sn.network.NetWorkManager;
-import com.info.sn.network.api.BindDevices;
-import com.info.sn.network.api.UploadScreenshot;
-import com.info.sn.service.InitJpushServer;
-import com.info.sn.utils.ApkUtils;
-import com.info.sn.utils.CmdUtil;
-import com.info.sn.utils.LogUtils;
-import com.info.sn.utils.SPUtils;
-import com.info.sn.utils.ServiceAliveUtils;
-import com.info.sn.utils.ToastUtil;
-import com.info.sn.utils.Utils;
-import com.info.sn.view.CustomDialog;
-
-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;
-import java.util.TreeMap;
-
-import cn.jpush.android.api.JPushInterface;
-import io.reactivex.Observable;
-import io.reactivex.ObservableEmitter;
-import io.reactivex.ObservableOnSubscribe;
-import io.reactivex.Observer;
-import io.reactivex.android.schedulers.AndroidSchedulers;
-import io.reactivex.annotations.NonNull;
-import io.reactivex.disposables.Disposable;
-import io.reactivex.schedulers.Schedulers;
-import okhttp3.MediaType;
-import okhttp3.MultipartBody;
-import okhttp3.RequestBody;
-
-/**
- * 自定义接收器
- *
- * 如果不定义这个 Receiver,则:
- * 1) 默认用户会打开主界面
- * 2) 接收不到自定义消息
- */
-public class MyReceiver extends BroadcastReceiver {
- private static final String TAG = "MyReceiver";
-
- @Override
- public void onReceive(Context context, Intent intent) {
- 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...
-
- } 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_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);
-
- } 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 数据
- private static String printBundle(Bundle bundle) {
- StringBuilder sb = new StringBuilder();
- for (String key : bundle.keySet()) {
- if (key.equals(JPushInterface.EXTRA_NOTIFICATION_ID)) {
- sb.append("\nkey:" + key + ", value:" + bundle.getInt(key));
- } else if (key.equals(JPushInterface.EXTRA_CONNECTION_CHANGE)) {
- sb.append("\nkey:" + key + ", value:" + bundle.getBoolean(key));
- } else if (key.equals(JPushInterface.EXTRA_EXTRA)) {
- if (TextUtils.isEmpty(bundle.getString(JPushInterface.EXTRA_EXTRA))) {
- Logger.i(TAG, "This message has no Extra data");
- continue;
- }
-
- try {
- JSONObject json = new JSONObject(bundle.getString(JPushInterface.EXTRA_EXTRA));
- Iterator it = json.keys();
-
- while (it.hasNext()) {
- String myKey = it.next();
- sb.append("\nkey:" + key + ", value: [" +
- myKey + " - " + json.optString(myKey) + "]");
- }
- } catch (JSONException e) {
- Logger.e(TAG, "Get message extra JSON error!");
- }
-
- } else {
- sb.append("\nkey:" + key + ", value:" + bundle.get(key));
- }
- }
- return sb.toString();
- }
-
- //定义接收极光推送消息的类型。
- private static final String JIGUANG_GET_DRIVELINE = "1";
- //1.获取设备在线信息
- private static final String JIGUANG_GET_STARTTIME = "2";
- // 2.获取当前正在运行得应用和电量
- private static final String JIGUANG_USB_STATE = "3";
- // 3.数据线传输管控
- private static final String JIGUANG_TFCARD_STATE = "4";
- // 4.TF卡管控
- private static final String JIGUANG_BLUETOOTH_STATE = "5";
- // 5.蓝牙管控
- private static final String JIGUANG_BROWSER_URLPATH = "6";
- // 6.浏览器上网管控
- private static final String JIGUANG_APP_NETWORKSTATE = "7";
- // 7.应用联网管控
- private static final String JIGUANG_APP_LOCKEDSTATE = "8";
- // 8.应用锁管控
- private static final String JIGUANG_FORCE_INSTALLAPK = "9";
- // 9.强制安装应用
- private static final String JIGUANG_FORCE_UNINSTALLAPK = "10";
- // 10.强制卸载应用
- private static final String JIGUANG_BIND_DEVIVES = "11";
- // 11.绑定设备
- private static final String JIGUANG_TFMEDIA = "12";
- //12.影音格式管控
- private static final String JIGUANG_CAMRERA = "13";
- //13.摄像头管控
- private static final String JIGUANG_PHONE = "14";
- //14.电话管控管控
- private static final String JIGUANG_DISABLE_UPDATAE = "15";
- //14.电话管控管控
- private static final String JIGUANG_APP_WEBSITE = "16";
- //16.app内部网址管控
- private static final String JIGUANG_RESET_DEVICES = "17";
- //设备恢复出厂设置
- private static final String JIGUANG_BROWSER_LABEL = "18";
- //浏览器书签
- private static final String JIGUANG_APP_NET_AUTO = "19";
- //APP联网自启管控
- private static final String JIGUANG_SYSTEM_SETTING = "21";
- //系统管控
- private static final String JIGUANG_REBOOT_DEVICES = "22";
- //重启
- private static final String JIGUANG_APP_SETTING = "23";
- //获取app管控设置
- private static final String JIGUANG_FORCE_KILL = "24";
- //强制停止应用
- private static final String JIGUANG_LOCK_SCREEN = "25";
- //锁屏
- private static final String JIGUANG_SNAPSHOT = "26";
- //截图
- private static final String JIGUANG_TIME_CONTROL = "27";
- //时间管控
-
- //send msg to MainActivity
- private void processCustomMessage(Context context, Bundle bundle) {
-// if (MainActivity.isForeground) {
-// String message = bundle.getString(JPushInterface.EXTRA_MESSAGE);
-// String extras = bundle.getString(JPushInterface.EXTRA_EXTRA);
-// Intent msgIntent = new Intent(MainActivity.MESSAGE_RECEIVED_ACTION);
-// msgIntent.putExtra(MainActivity.KEY_MESSAGE, message);
-// if (!ExampleUtil.isEmpty(extras)) {
-// try {
-// JSONObject extraJson = new JSONObject(extras);
-// if (extraJson.length() > 0) {
-// msgIntent.putExtra(MainActivity.KEY_EXTRAS, extras);
-// }
-// } catch (JSONException e) {
-//
-// }
-//
-// }
-// LocalBroadcastManager.getInstance(context).sendBroadcast(msgIntent);
-// }
- int sn_id = (int) SPUtils.get(context, "sn_id", -1);
- int member_id = (int) SPUtils.get(context, "member_id", -1);
- String message = bundle.getString(JPushInterface.EXTRA_MESSAGE);
- 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);
- ToastUtil.show(extras);
-
- switch (message) {
- case JIGUANG_GET_DRIVELINE:
-// HTTPInterface.getDriveState(member_id, sn_id);
- break;
- case JIGUANG_GET_STARTTIME:
- sendStartTime(context, extras);
- break;
- case JIGUANG_USB_STATE:
- setUsbState(context, extras);
- break;
- case JIGUANG_TFCARD_STATE:
- setTfcardState(context, extras);
- break;
- case JIGUANG_BLUETOOTH_STATE:
- setBluetoothState(context, extras);
- break;
- case JIGUANG_BROWSER_URLPATH:
-// setBrowserUrlpath(context, extras);
- HTTPInterface.setBrowser(context);
- break;
- case JIGUANG_APP_NETWORKSTATE:
- setAppNetworkstate(context, extras);
- break;
- case JIGUANG_APP_LOCKEDSTATE:
- setAppLockedstate(context, extras);
- break;
- case JIGUANG_FORCE_INSTALLAPK:
- HTTPInterface.getAllappPackage(context);
- intallApk(context, extras);
- break;
- case JIGUANG_FORCE_UNINSTALLAPK:
- unintallApk(context, extras);
- break;
- case JIGUANG_BIND_DEVIVES:
- 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:
-// HTTPInterface.getAppJump(context);
- break;
- case JIGUANG_REBOOT_DEVICES:
- Utils.rebootDevices(context);
- break;
- case JIGUANG_APP_NET_AUTO:
- HTTPInterface.getAppStart(context);
- break;
- case JIGUANG_BROWSER_LABEL:
- HTTPInterface.getBrowserLabel(context);
- break;
- case JIGUANG_SYSTEM_SETTING:
- Utils.setSystemSetting(context, extras);
- break;
- case JIGUANG_RESET_DEVICES:
- Utils.doMasterClear(context);
- break;
- case JIGUANG_APP_SETTING:
- HTTPInterface.getAppStart(context);
- break;
- case JIGUANG_FORCE_KILL:
- Log.e(TAG, extras);
- break;
- case JIGUANG_LOCK_SCREEN:
- setLock_screen(context, extras);
- Log.e(TAG, extras);
- break;
- case JIGUANG_SNAPSHOT:
- doscreenshot(context);
- Log.e(TAG, extras);
- break;
- case JIGUANG_TIME_CONTROL:
- timeControl(context, extras);
- break;
- }
- }
-
- private int changeNum(int paramInt) {
- return paramInt == 1 ? 0 : 1;
- }
-
- 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", "123456");
-// 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);
- HTTPInterface.getSystemSettings(context);
- }
-
- 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 1:
- cameraStatus = "qch_camera_open";
- break;
- case 0:
- cameraStatus = "qch_camera_forbid";
- break;
- default:
- 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");
- Log.e("SystemSetting", "qch_tfmedia_forbid---------" + setting_tfmedia);
-
- if (setting_tfmedia == 0) {
- Settings.System.putInt(context.getContentResolver(), "qch_tfmedia_forbid", 1);
- } else {
- String s = Settings.System.getString(context.getContentResolver(), "qch_tfmedia_filetypes");//影音管控
- Log.e("SystemSetting", "qch_tfmedia_filetypes old" + s);
- Settings.System.putInt(context.getContentResolver(), "qch_tfmedia_forbid", 0);
- boolean b = Settings.System.putString(context.getContentResolver(), "qch_tfmedia_filetypes", tftype);//影音管控
- Log.e("SystemSetting", "qch_tfmedia_filetypes---------" + b + ":" + tftype);
- }
- }
-
- 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) {
- HTTPInterface.updateAdminInfo(context);
-// if (jsonArray.length() > 0) {
-// try {
-// JSONObject extra = new JSONObject(jsonArray);
-// String random = extra.getString("random");
-// int battery = getSystemBattery(context);
-//// HTTPInterface.sendStartTime(context, 0, getTaskPackname(context), battery, random);
-// } catch (JSONException e) {
-// e.printStackTrace();
-// }
-// }
- }
-
- /**
- * 实时获取电量
- */
- public static int getSystemBattery(Context context) {
- int level = 0;
- Intent batteryInfoIntent = context.getApplicationContext().registerReceiver(null,
- new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
- level = batteryInfoIntent.getIntExtra("level", 0);
- int batterySum = batteryInfoIntent.getIntExtra("scale", 100);
- int percentBattery = 100 * level / batterySum;
- LogUtils.i("getSystemBattery", "level = " + level);
- LogUtils.i("getSystemBattery", "batterySum = " + batterySum);
- LogUtils.i("getSystemBattery", "percent is " + percentBattery + "%");
- return percentBattery;
- }
-
- public static String getTaskPackname(Context context) {
- String currentApp = "CurrentNULL";
- if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) {
- @SuppressLint("WrongConstant") UsageStatsManager usm = (UsageStatsManager) context.getSystemService("usagestats");
- long time = System.currentTimeMillis();
- List appList = usm.queryUsageStats(UsageStatsManager.INTERVAL_DAILY, time - 1000 * 1000, time);
- if (appList != null && appList.size() > 0) {
- SortedMap mySortedMap = new TreeMap();
- for (UsageStats usageStats : appList) {
- mySortedMap.put(usageStats.getLastTimeUsed(), usageStats);
- }
- if (mySortedMap != null && !mySortedMap.isEmpty()) {
- currentApp = mySortedMap.get(mySortedMap.lastKey()).getPackageName();
- }
- }
- } else {
- ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
- List tasks = am.getRunningAppProcesses();
- currentApp = tasks.get(0).processName;
- }
-// LogUtils.e("TAG", "Current App in foreground is: " + currentApp);
- return currentApp;
- }
-
- synchronized private void setUsbState(Context context, String jsonArray) {
- if (jsonArray.length() > 0) {
- try {
- JSONObject extra = new JSONObject(jsonArray);
- String setting_usb = extra.getString("setting_usb");
- boolean qch_usb_choose = Settings.System.putString(context.getContentResolver(), "qch_usb_choose", setting_usb);
- LogUtils.e("setUsbState:", Settings.System.getString(context.getContentResolver(), "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;
- default:
- usbStatus = "qch_action_usb_usb_charge";
- break;
- }
- Intent usbIntent = new Intent(usbStatus).setPackage("com.android.settings");
- context.sendBroadcast(usbIntent);
- } catch (JSONException e) {
- e.printStackTrace();
- LogUtils.e("setUsbState", e.getMessage());
- }
- } else {
- ToastUtil.debugShow("setUsbState jsonArray is NULL");
- }
- }
-
- synchronized private void setTfcardState(Context context, String jsonArray) {
- if (jsonArray.length() > 0) {
- try {
- JSONObject extra = new JSONObject(jsonArray);
- int is_tf = extra.getInt("setting_memory");
- boolean qch_sdcard_forbid_on = Settings.System.putInt(context.getContentResolver(), "qch_sdcard_forbid_on", changeNum(is_tf));
- if (qch_sdcard_forbid_on) {
- LogUtils.e("setTfcardState:", Settings.System.getString(context.getContentResolver(), "qch_sdcard_forbid_on"));
- } else {
- ToastUtil.debugShow("setTfcardState failed,state:" + is_tf);
- }
- } catch (JSONException e) {
- e.printStackTrace();
- LogUtils.e("setTfcardState", e.getMessage());
- }
- } else {
- ToastUtil.debugShow("setTfcardState jsonArray is NULL");
- }
- }
-
- 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("setting_bluetooth");
- if (is_bluetooth == 0) {
- mBluetoothAdapter.disable();//设置关闭时关闭蓝牙
- }
- boolean qch_bt_forbid_on = Settings.System.putInt(context.getContentResolver(), "qch_bht_forbid_on", changeNum(is_bluetooth));
- if (qch_bt_forbid_on) {
- LogUtils.e("setBluetoothState:", Settings.System.getString(context.getContentResolver(), "qch_bht_forbid_on"));
- } else {
- ToastUtil.debugShow("setBluetoothState failed,state:" + is_bluetooth);
- }
- } catch (JSONException e) {
- e.printStackTrace();
- LogUtils.e("setBluetoothState", e.getMessage());
- }
- } else {
- ToastUtil.debugShow("setBluetoothState jsonArray is NULL");
- }
- }
-
- synchronized private void setBrowserUrlpath(Context context, String jsonArray) {
- if (jsonArray.length() > 0) {
- try {
- JSONObject extra = new JSONObject(jsonArray);
- String white = extra.getString("white");
- if (white != null && !white.equals("")) {
- boolean whiteList = Settings.System.putString(context.getContentResolver(), "DeselectBrowserArray", 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" + 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());
- }
- } else {
- boolean setBrowserUrlpath = Settings.System.putString(context.getContentResolver(), "DeselectBrowserArray", "invalid");
- ToastUtil.debugShow("setBrowserUrlpath jsonArray is NULL,set default: " + setBrowserUrlpath);
- }
- }
-
- synchronized private void setAppNetworkstate(Context context, String jsonArray) {
- if (jsonArray.length() > 0) {
- try {
- JSONObject extra = new JSONObject(jsonArray);
- String package0 = extra.getString("package0");
- 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", "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", "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", "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", "qch_jgy_network_disallow::" + qch_jgy_network_disallow + ":" + Settings.System.getString(context.getContentResolver(), "qch_jgy_network_disallow"));
- }
-
- } catch (JSONException e) {
- e.printStackTrace();
- LogUtils.e("setAppNetworkstate", e.getMessage());
- }
- } else {
- ToastUtil.debugShow("setAppNetworkstate jsonArray is NULL");
- }
- }
-
- synchronized private void setAppLockedstate(Context context, String jsonArray) {
- if (jsonArray.length() > 0) {
- try {
- JSONObject extra = new JSONObject(jsonArray);
- String packageName = extra.getString("package");
- int is_lock = extra.getInt("is_lock");
- ToastUtil.debugShow("收到应用锁管控消息:包名" + packageName + "is_lock_state:" + is_lock);
- PackageManager pm = context.getPackageManager();
- //后台为0可能传过来null
- if (is_lock == 1) {
- pm.setApplicationEnabledSetting(packageName, PackageManager.COMPONENT_ENABLED_STATE_DISABLED, 0);
- } else {
- pm.setApplicationEnabledSetting(packageName, PackageManager.COMPONENT_ENABLED_STATE_DEFAULT, 0);
- }
- } catch (JSONException e) {
- e.printStackTrace();
- LogUtils.e("setAppLockedstate", e.getMessage());
- }
- } else {
- ToastUtil.debugShow("setAppLockedstate jsonArray is NULL");
- }
-
- }
-
- //静默安装应用,使用okgo,断网会出现问题,等待修改使用aria
- synchronized private void intallApk(Context context, String jsondata) {
-// HTTPInterface.getAllAppPackageName(context);
-
- try {
- JSONObject extra = new JSONObject(jsondata);
- final String packages = extra.getString("package");
- ToastUtil.debugShow("收到应用安装消息:包名" + packages);
- String url = extra.getString("url");
-
- if (Aria.download(this).taskExists(url)) {
-
- List entity = Aria.download(this).getDownloadEntity(url);
- for (DownloadEntity downloadEntity : entity) {
- Aria.download(this).load(downloadEntity.getId()).cancel(true);
- }
- }
-
- File file = new File(Environment.getExternalStoragePublicDirectory("Download") + "/Sninfo/apk");
- file.mkdirs();
- Aria.download(this)
- .load(url)
- .setFilePath(file.getAbsolutePath() + "/" + packages + ".apk")
- .ignoreFilePathOccupy()
- .setExtendField(packages).create();
-// OkGo.get(url)
-// .execute(new FileCallback() {
-// @Override
-// public void onSuccess(Response response) {
-//// Settings.System.putString(getApplicationContext().getContentResolver(), "qch_app_forbid", "com.baidu.video");
-// ApkUtils.installApkInSilence(response.body().getAbsolutePath(), packages);
-// LogUtils.e("onSuccess", "download file successful,now installing");
-// }
-//
-// @Override
-// public void onError(Response response) {
-// super.onError(response);
-// LogUtils.e("manageCustomMessage", "File download Failure");
-// }
-//
-// @Override
-// public void downloadProgress(Progress progress) {
-// super.downloadProgress(progress);
-// LogUtils.e("downloadProgress", "已下载:" + progress.currentSize + ",总大小:" + progress.totalSize + ",进度:" + progress.fraction + ",当前网速:" + progress.speed);
-// }
-// });
- Aria.download(this).resumeAllTask();
- } catch (JSONException e) {
- e.printStackTrace();
- LogUtils.e("intallApk", e.getMessage());
- }
- }
-
-
- synchronized private void unintallApk(Context context, String json) {
- int sn_id = (int) SPUtils.get(context, "sn_id", -1);
-
- try {
- JSONObject object = new JSONObject(json);
- String packageName = object.getString("app_package");
- ToastUtil.debugShow("收到应用卸载消息:包名" + packageName);
- if (!packageName.equals("") && !packageName.equals(context.getApplicationContext().getPackageName())) {
- if (!ApkUtils.isAvailable(context.getApplicationContext(), packageName)) {
-// HTTPInterface.setAppuninstallInfo(sn_id, packageName);
- } else {
- ApkUtils.uninstallApp(context, packageName);
- }
- }
- } catch (JSONException e) {
- e.printStackTrace();
- LogUtils.e("unintallApk", e.getMessage());
- }
- }
-
- synchronized void bindService(final Context context, String json) {
- ToastUtil.debugShow("收到绑定设备请求");
-
- try {
-// com.alibaba.fastjson.JSONObject jsonObject= JSON.parseObject(json);
-// String userName =jsonObject.getString("member_name");
-// final String id =jsonObject.getString("id");
-// String phoneNum =jsonObject.getString("member_phone");
- JSONObject object = new JSONObject(json);
- String userName = object.getString("member_name");
- final String id = object.getString("id");
- String phoneNum = object.getString("member_phone");
- final CustomDialog dialog = new CustomDialog(context);
- dialog.setMessage(phoneNum + "的用户请求绑定你的平板")
- .setTitle("绑定请求")
- .setPositive("允许")
- .setNegtive("拒绝")
-// .setSingle(true)
- .setOnClickBottomListener(new CustomDialog.OnClickBottomListener() {
- @Override
- public void onPositiveClick() {
- bind(context, id, 1);
- dialog.dismiss();
- }
-
- @Override
- public void onNegtiveClick() {
- bind(context, id, 0);
- ToastUtil.show("设备取消绑定");
- dialog.dismiss();
- }
- });
- dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
- dialog.show();
- new CountDownTimer(30000, 1000) {
-
- @Override
- public void onTick(long l) {
- String value = String.valueOf((int) (l / 1000));
- dialog.setNegtiveText("拒绝" + "(" + value + ")");
- }
-
- @Override
- public void onFinish() {
- bind(context, id, 0);
- dialog.dismiss();
- }
- }.start();
-// AlertDialog.Builder builder = new AlertDialog.Builder(this)
-// .setTitle("设备绑定")
-// .setIcon(R.mipmap.ic_launcher)
-// .setCancelable(false)
-// .setMessage("用户:“" + userName + "”" + "\n手机:“" + phoneNum + "”" + "\n请求绑定此设备")
-// .setPositiveButton("确认绑定", new DialogInterface.OnClickListener() {
-// @Override
-// public void onClick(DialogInterface dialogInterface, int i) {
-// bind(id);
-// }
-// })
-// .setNegativeButton("取消", new DialogInterface.OnClickListener() {
-// @Override
-// public void onClick(DialogInterface dialog, int which) {
-// dialog.dismiss();
-// ToastUtil.show("设备取消绑定");
-// }
-// });
-// AlertDialog ad = builder.create();
-// ad.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
-// ad.setCanceledOnTouchOutside(false); //点击外面区域不会让dialog消失
-// ad.show();
-
- } catch (JSONException e) {
- e.printStackTrace();
- LogUtils.e("bindService", e.getMessage());
- }
-
-
- }
-
- synchronized private void bind(final Context context, String id, int type) {
-
- BindDevices bindDevices = NetWorkManager.getbindDevicesControl();
- bindDevices.getBindDevices(Utils.getSerial(), id, type)
- .subscribeOn(Schedulers.io())
- .observeOn(AndroidSchedulers.mainThread())
- .subscribe(new Observer() {
- @Override
- public void onSubscribe(@NonNull Disposable d) {
-
- }
-
- @Override
- public void onNext(@NonNull BaseResponse baseResponse) {
- int code = baseResponse.code;
- String msg = baseResponse.msg;
-// Log.e("bind", baseResponse.toString());
- if (code == 200) {
- ToastUtil.show("绑定成功");
- } else if (code == 301) {
- ToastUtil.show(msg);
- }
- }
-
- @Override
- public void onError(@NonNull Throwable e) {
- Log.e("bind", e.getMessage());
- }
-
- @Override
- public void onComplete() {
-
- }
- });
-// OkGo.get(UrlAddress.BIND_DEVICES)
-// .params("id", id)
-// .params("sn", Utils.getSerial())
-// .params("type",type)
-// .execute(new StringCallback() {
-// @Override
-// public void onSuccess(Response response) {
-// String s = response.body();
-// try {
-// JSONObject jsonObject = new JSONObject(s);
-// int code = jsonObject.getInt("code");
-// String msg = jsonObject.getString("msg");
-// if (code == 200) {
-// ToastUtil.show("绑定成功");
-// } else if (code==301){
-// ToastUtil.show(msg);
-// }
-//
-// } catch (JSONException e) {
-// e.printStackTrace();
-// }
-// Intent intent = new Intent(MainActivity.REFRESHACTION);
-// context.sendBroadcast(intent);
-// }
-//
-// @Override
-// public void onError(Response response) {
-// super.onError(response);
-// Log.e("bind", response.getException().getMessage());
-// }
-//
-// });
- }
-
-
- private void setLock_screen(Context context, String extras) {
- String type = "0";
- try {
- JSONObject jSONObject = new JSONObject(extras);
- type = jSONObject.getString("type");
- } catch (JSONException e) {
- e.printStackTrace();
- }
- if (!ServiceAliveUtils.isServiceAlice(InitJpushServer.class.getName())) {
- context.startService(new Intent(context, InitJpushServer.class));
- }
- Intent intent = new Intent();
-// intent.putExtra("name", name);
- if (type.equals("1")) {
- intent.setAction(InitJpushServer.LockScreenReceiver.ACTION_LOCK);
- } else if (type.equals("0")) {
- intent.setAction(InitJpushServer.LockScreenReceiver.ACTION_UNLOCK);
- }
- context.sendBroadcast(intent);
- }
-
-
- public void doscreenshot(final Context context) {
- final long time = System.currentTimeMillis();
- Observable.create(new ObservableOnSubscribe() {
- @Override
- public void subscribe(ObservableEmitter e) throws Exception {
- String filepath = context.getExternalFilesDir("db").getAbsolutePath();
- int n = CmdUtil.execute("screencap -p " + filepath + File.separator + time + ".png").code;
- e.onNext(n);
- }
- }).subscribeOn(Schedulers.io())
- .observeOn(AndroidSchedulers.mainThread())
- .subscribe(new Observer() {
- @Override
- public void onSubscribe(Disposable d) {
-
- }
-
- @Override
- public void onNext(Integer integer) {
- if (integer == 0) {
- uplaodImage(context, time);
- } else {
- Log.e("doss", "失败");
- }
- }
-
- @Override
- public void onError(Throwable e) {
- Log.e("doss", "Throwable=" + e.getMessage());
- }
-
- @Override
- public void onComplete() {
-
- }
- });
- }
-
- private void uplaodImage(final Context context, long time) {
- String filepath = context.getExternalFilesDir("db").getAbsolutePath();
-// String filepath = mContext.getFileStreamPath("screenshot").getAbsolutePath();
- //放在app内部data下面
- File file = new File(filepath + File.separator + time + ".png");
- //不要直接使用常用图片格式
- if (!file.exists()) {
- Log.e("uplaodImage", "File does not exists");
- return;
- }
- UploadScreenshot uploadScreenshot = NetWorkManager.getUploadScreenshotControl();
- RequestBody requestFile = RequestBody.create(MediaType.parse("multipart/form-data"), file);
- MultipartBody.Part body = MultipartBody.Part.createFormData("file", file.getName(), requestFile);
- uploadScreenshot.uploadScreenshot(Utils.getSerial(), body)
- .subscribeOn(Schedulers.io())
- .observeOn(AndroidSchedulers.mainThread())
- .subscribe(new Observer() {
- @Override
- public void onSubscribe(Disposable d) {
-
- }
-
- @Override
- public void onNext(BaseResponse baseResponse) {
- int code = baseResponse.code;
- if (code == 200) {
- Log.e(TAG, "onNext: " + baseResponse.msg);
- } else {
- Log.e(TAG, code + ": " + baseResponse.msg);
- }
- }
-
- @Override
- public void onError(Throwable e) {
- Log.e("uplaod", "onError: " + e.getMessage());
- }
-
- @Override
- public void onComplete() {
-
- }
- });
-
- }
-
- private void timeControl(Context context, String extras) {
- HTTPInterface.getTimeControl(context);
- }
-}
diff --git a/app/src/main/java/com/info/sn/manager/AmapManager.java b/app/src/main/java/com/info/sn/manager/AmapManager.java
new file mode 100644
index 0000000..c20c161
--- /dev/null
+++ b/app/src/main/java/com/info/sn/manager/AmapManager.java
@@ -0,0 +1,89 @@
+package com.info.sn.manager;
+
+import android.content.Context;
+import android.util.Log;
+
+import com.amap.api.location.AMapLocation;
+import com.amap.api.location.AMapLocationClient;
+import com.amap.api.location.AMapLocationClientOption;
+import com.amap.api.location.AMapLocationListener;
+import com.info.sn.utils.SPUtils;
+
+public class AmapManager {
+ private static AmapManager sInstance;
+ private Context mContext;
+ public static AMapLocationClient locationClient = null;
+ private String TAG = AmapManager.class.getSimpleName();
+
+ private AmapManager(Context context) {
+ this.mContext = context;
+ }
+
+ public static void init(Context context) {
+ if (sInstance == null) {
+ sInstance = new AmapManager(context);
+ }
+
+ }
+
+ public static AmapManager getInstance() {
+ if (sInstance == null) {
+ throw new IllegalStateException("You must be init AmapManager first");
+ }
+
+ return sInstance;
+ }
+
+ public AMapLocationClient getLocationClient() {
+ if (null == locationClient) {
+ initAmap();
+ }
+ return locationClient;
+ }
+
+ public void initAmap() {
+ locationClient = new AMapLocationClient(mContext);
+ AMapLocationClientOption option = new AMapLocationClientOption();
+ option.setLocationPurpose(AMapLocationClientOption.AMapLocationPurpose.SignIn);
+ option.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy);
+ option.setNeedAddress(true);
+ //获取一次定位结果:
+ //该方法默认为false。
+ option.setOnceLocation(true);
+ //获取最近3s内精度最高的一次定位结果:
+ //设置setOnceLocationLatest(boolean b)接口为true,启动定位时SDK会返回最近3s内精度最高的一次定位结果。
+ // 如果设置其为true,setOnceLocation(boolean b)接口也会被设置为true,反之不会,默认为false。
+ option.setOnceLocationLatest(true);
+ locationClient.setLocationOption(option);
+ //设置定位模式为AMapLocationMode.Hight_Accuracy,高精度模式。
+ //设置定位监听
+ locationClient.setLocationListener(new AMapLocationListener() {
+
+ @Override
+ public void onLocationChanged(AMapLocation aMapLocation) {
+ StringBuilder sb = new StringBuilder();
+ //errCode等于0代表定位成功,其他的为定位失败,具体的可以参照官网定位错误码说明
+ if (aMapLocation.getErrorCode() == 0) {
+ Log.e(TAG, "onLocationChanged: " + "定位成功");
+ Log.e(TAG, "onLocationChanged: " + aMapLocation.getAddress());
+ sb.append(aMapLocation.getAddress()).append("\n");
+ SPUtils.put(mContext, "AmapAddress", aMapLocation.getAddress());
+ SPUtils.put(mContext, "longitude", aMapLocation.getLongitude());
+ SPUtils.put(mContext, "latitude", aMapLocation.getLatitude());
+ } else {
+ //定位失败
+ sb.append("定位失败" + "\n");
+ Log.e(TAG, "onLocationChanged: " + "定位失败");
+ SPUtils.put(mContext, "AmapError", String.valueOf(aMapLocation.getErrorInfo()));
+ }
+ Log.e(TAG, (String) SPUtils.get(mContext, "AmapAddress", "-"));
+ Log.e(TAG, (String) SPUtils.get(mContext, "AmapError", "-"));
+ Log.e(TAG, "amap: " + sb.toString());
+ }
+ });
+ //设置场景模式后最好调用一次stop,再调用start以保证场景模式生效
+ locationClient.stopLocation();
+ locationClient.startLocation();
+ Log.e(TAG, "initAmap: " + "startLocation");
+ }
+}
diff --git a/app/src/main/java/com/info/sn/manager/ControlManager.java b/app/src/main/java/com/info/sn/manager/ControlManager.java
new file mode 100644
index 0000000..3dbf77c
--- /dev/null
+++ b/app/src/main/java/com/info/sn/manager/ControlManager.java
@@ -0,0 +1,628 @@
+package com.info.sn.manager;
+
+import android.annotation.SuppressLint;
+import android.bluetooth.BluetoothAdapter;
+import android.content.Context;
+import android.content.Intent;
+import android.os.Build;
+import android.provider.Settings;
+import android.text.TextUtils;
+import android.util.Log;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.info.sn.bean.zuoye.SystemSettings;
+import com.info.sn.utils.ApkUtils;
+import com.info.sn.utils.JGYUtils;
+import com.info.sn.utils.ToastUtil;
+
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.function.Predicate;
+
+
+/**
+ * 系统管理处理
+ * 所有数据 后台1是0否,底层0是1否
+ *
+ * @author jgy02
+ */
+public class ControlManager {
+ private static final String TAG = ControlManager.class.getSimpleName();
+
+ @SuppressLint("StaticFieldLeak")
+ private static ControlManager sInstance;
+ private Context mContext;
+
+ private ControlManager(Context mContext) {
+ this.mContext = mContext;
+ }
+
+ public static void init(Context mContext) {
+ if (sInstance == null) {
+ sInstance = new ControlManager(mContext);
+ }
+ }
+
+ public static ControlManager getInstance() {
+ if (sInstance == null) {
+ throw new IllegalStateException("You must be init ControlUtils first");
+ }
+ return sInstance;
+ }
+
+ private static int changeNum(int status) {
+ return status == 0 ? 1 : 0;
+ }
+
+ public void setSystemSetting(Context context, String jsonString) {
+ if (TextUtils.isEmpty(jsonString)) {
+ return;
+ }
+ SystemSettings settings = JSON.parseObject(jsonString, SystemSettings.class);
+ if (null != settings) {
+ setUSBstate(context, settings);
+ setPhoneList(context, settings);
+ setBluetooth(context, settings);
+ setHotspot(context, settings);
+ setBar(context, settings);
+ setCamera(context, settings);
+ setTF(context, settings);
+ setIcon(context, settings);
+ setCanReset(context, jsonString);
+ setDeveloperOptions(context, jsonString);
+ JGYUtils.updateForbidList(context);
+ }
+ }
+
+ /**
+ * 关闭所有功能
+ */
+ public void setDisableSetting() {
+ Log.e("setDisableSetting", "Close all settings: ");
+ setUSBstate(1);
+ setPhoneList(1);
+ setBluetooth(1);
+ setHotspot(1);
+ setCamera(1);
+ setTF(1);
+ setIcon(1);
+ setWallpaper(0);
+ setCanReset(1);
+ setBrowserInput(1);
+ if (!DeviceManager.isDebugMode()) {
+ setDeveloperOptions(1);
+ }
+ }
+
+ /**
+ * usb连接模式管控
+ * @param mContext
+ * @param settings
+ */
+ private static void setUSBstate(Context mContext, SystemSettings settings) {
+ //USB数据功能管控
+ //仅充电:usb_charge
+ //MTP模式:usb_mtp
+ //Midi模式:usb_midi
+ String setting_usb = settings.getSetting_usb();
+ Log.e("SystemSetting", "setting_usb:" + setting_usb);
+ if (!DeviceManager.isDebugMode()) {
+ try {
+ boolean qch_usb_choose = JGYUtils.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;
+ default:
+ usbStatus = "qch_action_usb_usb_charge";
+ break;
+ }
+ Intent usbIntent = new Intent(usbStatus).setPackage("com.android.settings");
+ mContext.sendBroadcast(usbIntent);
+ } catch (Exception e) {
+ Log.e(TAG, "setUSBstate: " + e.getMessage());
+ }
+ }
+ }
+
+ /**
+ * usb连接模式管控
+ * @param state
+ */
+ public void setUSBstate(int state) {
+ //USB数据功能管控
+ //仅充电:usb_charge
+ //MTP模式:usb_mtp
+ //Midi模式:usb_midi
+ if (!DeviceManager.isDebugMode()) {
+ try {
+ boolean qch_usb_choose = Settings.System.putString(mContext.getContentResolver(), "qch_usb_choose", "usb_charge");
+ Log.e(TAG, "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 setPhoneList(Context mContext, SystemSettings settings) {
+ //设置电话功能,电话白名单
+ int setting_call = changeNum(settings.getSetting_call());
+ boolean qch_call_forbid = JGYUtils.putInt(mContext.getContentResolver(), "qch_call_forbid", setting_call);
+ Log.e("SystemSetting", "qch_call_forbid: " + setting_call);
+
+ int setting_phone = changeNum(settings.getSetting_phone());
+ boolean qch_white_list_on = JGYUtils.putInt(mContext.getContentResolver(), "qch_white_list_on", setting_phone);
+ Log.e("SystemSetting", "qch_white_list_on: " + setting_phone);
+
+ String setting_phones = settings.getSetting_phones();
+ boolean qch_white_list_Array = JGYUtils.putString(mContext.getContentResolver(), "qch_white_list_Array", setting_phones);
+ Log.e("SystemSetting", "qch_white_list_Array: " + qch_white_list_Array + "=" + setting_phones);
+
+ int setting_memory = changeNum(settings.getSetting_memory());
+ boolean qch_sdcard_forbid_on = JGYUtils.putInt(mContext.getContentResolver(), "qch_sdcard_forbid_on", setting_memory);
+ Log.e("SystemSetting", "qch_sdcard_forbid_on: " + setting_memory);
+ }
+
+ private void setPhoneList(int state) {
+ try {
+ //设置电话功能,电话白名单
+ boolean qch_call_forbid = Settings.System.putInt(mContext.getContentResolver(), "qch_call_forbid", state);
+ Log.e(TAG, "qch_call_forbid:" + qch_call_forbid);
+
+ boolean qch_white_list_on = Settings.System.putInt(mContext.getContentResolver(), "qch_white_list_on", state);
+ Log.e(TAG, "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(TAG, "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", state);
+ Log.e(TAG, "qch_sdcard_forbid_on:" + qch_sdcard_forbid_on);
+ } catch (Exception e) {
+ Log.e(TAG, "setPhoneList: " + e.getMessage());
+ }
+ }
+
+ private static void setBluetooth(Context mContext, SystemSettings settings) {
+ try {
+ //蓝牙开关
+ int setting_bht = changeNum(settings.getSetting_bht());
+ //总开关
+ int setting_bhtvideo = changeNum(settings.getSetting_bhtvideo());
+ //蓝牙音频开关
+ int setting_bluetooth = changeNum(settings.getSetting_bluetooth());
+ //蓝牙传输开关
+ boolean qch_bht_forbid_on = JGYUtils.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 = settings.getSetting_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);
+ JGYUtils.putString(mContext.getContentResolver(), "qch_bhtvideo_forbid_on", setting_context);
+ } else {
+ JGYUtils.putString(mContext.getContentResolver(), "qch_bhtvideo_forbid_on", "Empty");
+ }
+ } else if (setting_bhtvideo == 1) {
+ JGYUtils.putString(mContext.getContentResolver(), "qch_bhtvideo_forbid_on", "Empty");
+ }
+ JGYUtils.putInt(mContext.getContentResolver(), "qch_bt_forbid_on", setting_bluetooth);
+ } else {
+ mBluetoothAdapter.disable();
+ //设置关闭时关闭蓝牙
+ }
+ }
+ } catch (Exception e) {
+ Log.e(TAG, "setBluetooth: " + e.getMessage());
+ }
+ }
+
+ private void setBluetooth(int state) {
+ try {
+ boolean qch_bht_forbid_on = Settings.System.putInt(mContext.getContentResolver(), "qch_bht_forbid_on", state);
+ //写入系统数据库
+ Log.e(TAG, "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", state);
+ mBluetoothAdapter.disable();
+ //设置关闭时关闭蓝牙
+ }
+ } catch (Exception e) {
+ Log.e(TAG, "setBluetooth: " + e.getMessage());
+ }
+ }
+
+ private static void setHotspot(Context mContext, SystemSettings settings) {
+ try {
+ int setting_hotspot = changeNum(settings.getSetting_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 = JGYUtils.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 void setHotspot(int state) {
+ 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", state);
+ Log.e(TAG, "qch_hotspot_forbid_on:" + qch_hotspot_forbid_on);
+ } catch (Exception e) {
+ Log.e(TAG, "setHotspot: " + e.getMessage());
+ }
+ }
+
+ private static void setBar(Context mContext, SystemSettings settings) {
+ //系统导航条显示开关
+ int setting_navigation = changeNum(settings.getSetting_navigation());
+ boolean qch_hide_navigationBar = JGYUtils.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(settings.getSetting_statusbar());
+ int oldNum = JGYUtils.getInt(mContext.getContentResolver(), "qch_hide_statusBar", 0);
+ if (oldNum != setting_statusbar) {
+ boolean qch_hide_statusBar = JGYUtils.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, SystemSettings settings) {
+ try {
+ //摄像头开关
+ int setting_camera = changeNum(settings.getSetting_camera());
+ JGYUtils.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 void setCamera(int state) {
+ try {
+ //摄像头开关
+ boolean qch_app_camera = Settings.System.putInt(mContext.getContentResolver(), "qch_app_camera", state);
+ Log.e(TAG, "qch_app_camera1:" + state);
+// ApkUtils.hideSystemSettingAPP(mContext, "com.mediatek.camera");
+ Log.e(TAG, "setting_camera---------" + qch_app_camera);
+ String cameraStatus = "qch_camera_forbid";
+ switch (state) {
+ 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());
+ }
+ }
+
+ @SuppressLint("NewApi")
+ private static void setTF(Context mContext, SystemSettings settings) {
+ //tfmedia开关
+ int setting_tfmedia = changeNum(settings.getSetting_tfmedia());
+ boolean qch_tfmedia_forbid = JGYUtils.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;
+ default:
+ break;
+ }
+ Intent tfmediaIntent = new Intent(tfmediaStatus).setPackage("com.android.settings");
+ mContext.sendBroadcast(tfmediaIntent);
+ if (setting_tfmedia == 1) {
+ String qch_tfmedia_filetypes = settings.getSetting_tfmedia_format();
+ HashSet types = new HashSet<>(Arrays.asList(qch_tfmedia_filetypes.split(",")));
+ types.removeIf(new Predicate() {
+ @Override
+ public boolean test(String s) {
+ return TextUtils.isEmpty(s);
+ }
+ });
+ String typesString = String.join(",", types);
+ JGYUtils.putString(mContext.getContentResolver(), "qch_tfmedia_filetypes", typesString);//影音管控
+ Log.e("SystemSetting", "qch_tfmedia_filetypes :" + typesString);
+ } else {
+ JGYUtils.putInt(mContext.getContentResolver(), "qch_tfmedia_forbid", 0);
+ }
+ }
+
+ private void setTF(int state) {
+ try {
+ //tfmedia开关
+// int setting_tfmedia = 1;
+ boolean qch_tfmedia_forbid = Settings.System.putInt(mContext.getContentResolver(), "qch_tfmedia_forbid", state);
+ Log.e(TAG, "setting_tfmedia---------" + qch_tfmedia_forbid);
+ String tfmediaStatus = "";
+ switch (state) {
+ 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 (state == 1) {
+ boolean qch_tfmedia_filetypes = Settings.System.putString(mContext.getContentResolver(), "qch_tfmedia_filetypes", "Empty");//影音管控
+ Log.e(TAG, "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 setIcon(Context mContext, SystemSettings settings) {
+ try {
+ //added:2019.12.6
+ //设置5个app的开关
+ //时钟
+ int deskclock = changeNum(settings.getSetting_clock());
+ JGYUtils.putInt(mContext.getContentResolver(), "qch_app_deskclock", deskclock);
+ ApkUtils.hideSystemSettingAPP(mContext, "com.android.deskclock");
+ Log.e("SystemSetting", "qch_app_deskclock:" + deskclock);
+ //录音机
+ int soundrecorder = changeNum(settings.getSetting_recording());
+ JGYUtils.putInt(mContext.getContentResolver(), "qch_app_soundrecorder", soundrecorder);
+ ApkUtils.hideSystemSettingAPP(mContext, "com.android.soundrecorder");
+ Log.e("SystemSetting", "qch_app_soundrecorder:" + soundrecorder);
+ //音乐
+ int music = changeNum(settings.getSetting_music());
+ JGYUtils.putInt(mContext.getContentResolver(), "qch_app_music", music);
+ ApkUtils.hideSystemSettingAPP(mContext, "com.android.music");
+ Log.e("SystemSetting", "qch_app_music:" + music);
+ //图库
+ int gallery = changeNum(settings.getSetting_picture());
+ JGYUtils.putInt(mContext.getContentResolver(), "qch_app_gallery", gallery);
+ ApkUtils.hideSystemSettingAPP(mContext, "com.android.gallery3d");
+ Log.e("SystemSetting", "qch_app_gallery:" + gallery);
+ //壁纸
+ int wallpaper = changeNum(settings.getSetting_wallpaper());
+ JGYUtils.putInt(mContext.getContentResolver(), "qch_app_wallpaper", wallpaper);
+ Log.e("SystemSetting", "qch_app_wallpaper:" + wallpaper);
+ //文件管理器
+ int filemanager = changeNum(settings.getSetting_file());
+ JGYUtils.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 void setIcon(int state) {
+ try {
+ //added:2019.12.6
+ //设置5个app的开关
+ //时钟
+// int deskclock = 1;
+ Settings.System.putInt(mContext.getContentResolver(), "qch_app_deskclock", state);
+ ApkUtils.hideSystemSettingAPP(mContext, "com.android.deskclock");
+ Log.e(TAG, "qch_app_deskclock" + state);
+ //录音机
+// int soundrecorder = 1;
+ Settings.System.putInt(mContext.getContentResolver(), "qch_app_soundrecorder", state);
+ ApkUtils.hideSystemSettingAPP(mContext, "com.android.soundrecorder");
+ Log.e(TAG, "qch_app_soundrecorder" + state);
+ //音乐
+// int music = 1;
+ Settings.System.putInt(mContext.getContentResolver(), "qch_app_music", state);
+ ApkUtils.hideSystemSettingAPP(mContext, "com.android.music");
+ Log.e(TAG, "qch_app_music" + state);
+ //图库
+// int gallery = 1;
+ Settings.System.putInt(mContext.getContentResolver(), "qch_app_gallery", state);
+ ApkUtils.hideSystemSettingAPP(mContext, "com.android.gallery3d");
+ Log.e(TAG, "qch_app_gallery" + state);
+ //文件管理器
+// int filemanager = 1;
+ Settings.System.putInt(mContext.getContentResolver(), "qch_app_filemanager", state);
+ if (Build.VERSION.SDK_INT < Build.VERSION_CODES.O) {
+ ApkUtils.hideSystemSettingAPP(mContext, "com.mediatek.filemanager");
+ } else {
+ ApkUtils.hideSystemSettingAPP(mContext, "com.android.documentsui");
+ }
+ Log.e(TAG, "qch_app_filemanager" + state);
+ } catch (Exception e) {
+ Log.e(TAG, "setIcon: " + e.getMessage());
+ }
+ }
+
+ private void setWallpaper(int state) {
+ //壁纸
+// int wallpaper = 1;
+ Settings.System.putInt(mContext.getContentResolver(), "qch_app_wallpaper", state);
+ Log.e(TAG, "qch_app_wallpaper" + state);
+ }
+
+ private static void setCanReset(Context context, String jsonString) {
+ JSONObject jsonObject = JSON.parseObject(jsonString);
+ int mode = jsonObject.getInteger("qch_restore");
+ if (mode == 1) {
+ Settings.System.putInt(context.getContentResolver(), "qch_restore_forbid_on", 0);
+ } else {
+ Settings.System.putInt(context.getContentResolver(), "qch_restore_forbid_on", 1);
+ }
+ Log.e(TAG, "qch_restore_forbid_on:" + mode);
+ }
+
+ private void setCanReset(int state) {
+ boolean qch_restore_forbid_on = Settings.System.putInt(mContext.getContentResolver(), "qch_restore_forbid_on", 0);
+ Log.e(TAG, "qch_restore_forbid_on:" + qch_restore_forbid_on);
+ //默认打开
+ }
+
+ /**
+ * 置浏览器禁止输入,默认打开
+ *
+ * @param state
+ */
+ private void setBrowserInput(int state) {
+ Settings.System.putInt(mContext.getContentResolver(), "qch_Browser_input", 0);
+ }
+
+ public void setDeveloperOptions(Context context, String jsonString) {
+ JSONObject jsonObject = JSON.parseObject(jsonString);
+ int dev_mode = changeNum(jsonObject.getInteger("dev_mode"));
+ Log.e(TAG, "getDeveloper: " + dev_mode);
+ if (!DeviceManager.isDebugMode()) {
+ JGYUtils.putInt(context.getContentResolver(), "qch_Developeroptions", dev_mode);
+ if (dev_mode == 1) {
+ Intent intent = new Intent();
+ intent.setAction("qch_developeroptions_close");
+ intent.setPackage("com.android.settings");
+ context.sendBroadcast(intent);
+ Log.e(TAG, "getDeveloper: " + "关闭开发者模式");
+ ToastUtil.debugShow("关闭开发者模式");
+ } else {
+ Log.e(TAG, "getDeveloper: " + "打开开发者模式");
+ ToastUtil.debugShow("打开开发者模式");
+ }
+ }
+ }
+
+ public void setDeveloperOptions(int state) {
+ Log.e(TAG, "getDeveloper: " + state);
+ if (!DeviceManager.isDebugMode()) {
+ Settings.System.putInt(mContext.getContentResolver(), "qch_Developeroptions", state);
+ if (state == 1) {
+ Intent intent = new Intent();
+ intent.setAction("qch_developeroptions_close");
+ intent.setPackage("com.android.settings");
+ mContext.sendBroadcast(intent);
+ Log.e(TAG, "getDeveloper: " + "关闭开发者模式");
+ } else {
+ Log.e(TAG, "getDeveloper: " + "打开开发者模式");
+// ToastUtil.show("打开开发者模式");
+ }
+ }
+ }
+
+ /**
+ * 开机管控usb
+ */
+ public void setDefaultUSBstate() {
+ //USB数据功能管控
+ //仅充电:usb_charge
+ //MTP模式:usb_mtp
+ //Midi模式:usb_midi
+ String setting_usb = JGYUtils.getString(mContext.getContentResolver(), "qch_usb_choose");
+ Log.e("SystemSetting", "setting_usb:" + setting_usb);
+ String usbStatus = "";
+ if (TextUtils.isEmpty(setting_usb)) {
+ usbStatus = "qch_action_usb_usb_charge";
+ } else {
+ if (!DeviceManager.isDebugMode()) {
+ 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;
+ default:
+ usbStatus = "qch_action_usb_usb_charge";
+ break;
+ }
+ }
+ }
+ Intent usbIntent = new Intent(usbStatus).setPackage("com.android.settings");
+ mContext.sendBroadcast(usbIntent);
+ }
+
+}
diff --git a/app/src/main/java/com/info/sn/manager/DeviceManager.java b/app/src/main/java/com/info/sn/manager/DeviceManager.java
new file mode 100644
index 0000000..d7518cc
--- /dev/null
+++ b/app/src/main/java/com/info/sn/manager/DeviceManager.java
@@ -0,0 +1,80 @@
+package com.info.sn.manager;
+
+import android.annotation.SuppressLint;
+import android.content.Context;
+import android.content.Intent;
+import android.os.Build;
+
+import com.info.sn.BuildConfig;
+import com.info.sn.utils.SPUtils;
+import com.info.sn.utils.ToastUtil;
+
+public class DeviceManager {
+ private static final String TAG = DeviceManager.class.getSimpleName();
+
+ @SuppressLint("StaticFieldLeak")
+ private static DeviceManager sInstance;
+ @SuppressLint("StaticFieldLeak")
+ private static Context mContext;
+
+ private DeviceManager(Context context) {
+ mContext = context;
+ }
+
+ public static void init(Context mContext) {
+ if (sInstance == null) {
+ sInstance = new DeviceManager(mContext);
+ }
+ }
+
+ public static DeviceManager getInstance() {
+ if (sInstance == null) {
+ throw new IllegalStateException("You must be init ControlUtils first");
+ }
+ return sInstance;
+ }
+
+ /**
+ * @return 是否为debug模式
+ */
+ public static boolean isDebugMode() {
+ return BuildConfig.DEBUG || (boolean) SPUtils.get(mContext, "EnableDebug", false);
+ }
+
+ /**
+ * 重启设备
+ */
+ public static void rebootDevices() {
+ if (isDebugMode()) {
+ ToastUtil.show("收到重启设备推送消息");
+ return;
+ }
+ Intent iReboot = new Intent(Intent.ACTION_REBOOT);
+ iReboot.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+ mContext.startActivity(iReboot);
+ }
+
+ /**
+ * 重置,恢复出厂设置
+ */
+ synchronized public static void doMasterClear() {
+ if (isDebugMode()) {
+ ToastUtil.show("收到重置设备推送消息");
+ return;
+ }
+ if (Build.VERSION.SDK_INT > Build.VERSION_CODES.N_MR1) {
+ Intent intent = new Intent("android.intent.action.FACTORY_RESET");
+ intent.setPackage("android");
+ intent.addFlags(Intent.FLAG_RECEIVER_FOREGROUND);
+ intent.putExtra("android.intent.extra.REASON", "MasterClearConfirm");
+ intent.putExtra("android.intent.extra.WIPE_EXTERNAL_STORAGE", false);
+ intent.putExtra("com.android.internal.intent.extra.WIPE_ESIMS", false);
+ mContext.sendBroadcast(intent);
+ } else {
+ Intent intent = new Intent("android.intent.action.MASTER_CLEAR");
+// intent.setPackage("com.android.settings");
+ mContext.sendBroadcast(intent);
+ }
+ }
+
+}
diff --git a/app/src/main/java/com/info/sn/manager/MyGlideModule.java b/app/src/main/java/com/info/sn/manager/MyGlideModule.java
new file mode 100644
index 0000000..6cf43a3
--- /dev/null
+++ b/app/src/main/java/com/info/sn/manager/MyGlideModule.java
@@ -0,0 +1,43 @@
+package com.info.sn.manager;
+
+import android.content.Context;
+
+import com.bumptech.glide.GlideBuilder;
+import com.bumptech.glide.load.engine.cache.DiskLruCacheFactory;
+import com.bumptech.glide.module.AppGlideModule;
+import com.info.sn.utils.StorageUtils;
+
+/**
+ * Created by Administrator on 2017/2/9.
+ */
+@com.bumptech.glide.annotation.GlideModule
+public class MyGlideModule extends AppGlideModule {
+ @Override
+ public void applyOptions(final Context context, GlideBuilder builder) {
+ // 设置图片的显示格式 低内存时降低图片质量
+// ActivityManager activityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
+// if (activityManager != null){
+// ActivityManager.MemoryInfo memoryInfo = new ActivityManager.MemoryInfo();
+// activityManager.getMemoryInfo(memoryInfo);
+// builder.setDecodeFormat(memoryInfo.lowMemory ? DecodeFormat.PREFER_RGB_565 : DecodeFormat.PREFER_ARGB_8888);
+// }
+// builder.setDecodeFormat(DecodeFormat.PREFER_RGB_565);
+ //设置磁盘缓存目录(和创建的缓存目录相同)
+ String downloadDirectoryPath = StorageUtils.getFileCache(context, "imageCache");
+ //设置缓存的大小为100M
+ int cacheSize = 100 * 1024 * 1024;
+ builder.setDiskCache(
+ new DiskLruCacheFactory(downloadDirectoryPath, cacheSize));
+ }
+ /**
+ * 清单解析的开启
+ *
+ * 这里不开启,避免添加相同的modules两次
+ * @return
+ */
+ @Override
+ public boolean isManifestParsingEnabled() {
+ return false;
+ }
+}
+
diff --git a/app/src/main/java/com/info/sn/manager/NetInterfaceManager.java b/app/src/main/java/com/info/sn/manager/NetInterfaceManager.java
new file mode 100644
index 0000000..4306632
--- /dev/null
+++ b/app/src/main/java/com/info/sn/manager/NetInterfaceManager.java
@@ -0,0 +1,270 @@
+package com.info.sn.manager;
+
+import android.annotation.SuppressLint;
+import android.content.Context;
+import android.os.Environment;
+
+import com.info.sn.bean.zuoye.AppInfo;
+import com.info.sn.bean.zuoye.AppStart;
+import com.info.sn.bean.zuoye.BaseResponse;
+import com.info.sn.bean.zuoye.Response;
+import com.info.sn.bean.zuoye.SystemSettings;
+import com.info.sn.bean.zuoye.UserAvatarInfo;
+import com.info.sn.bean.zuoye.UserInfo;
+import com.info.sn.network.UrlAddress;
+import com.info.sn.network.api.APPJump;
+import com.info.sn.network.api.ActiveUserApi;
+import com.info.sn.network.api.AddAppInstall;
+import com.info.sn.network.api.AppUsedApi;
+import com.info.sn.network.api.BindDevices;
+import com.info.sn.network.api.Browser;
+import com.info.sn.network.api.CreateUserApi;
+import com.info.sn.network.api.ForceInstall;
+import com.info.sn.network.api.BrowserLabel;
+import com.info.sn.network.api.NewestAppUpdate;
+import com.info.sn.network.api.QRCodeApi;
+import com.info.sn.network.api.QueryAllApp;
+import com.info.sn.network.api.QueryAppInside;
+import com.info.sn.network.api.QueryProductApi;
+import com.info.sn.network.api.QuerySnAppStart;
+import com.info.sn.network.api.RunningApp;
+import com.info.sn.network.api.SNInfoApi;
+import com.info.sn.network.api.SaveSnUidApi;
+import com.info.sn.network.api.ScreenLock;
+import com.info.sn.network.api.ScreenState;
+import com.info.sn.network.api.Setting;
+import com.info.sn.network.api.SettingKT;
+import com.info.sn.network.api.TimeControl;
+import com.info.sn.network.api.UpdateAdminSn;
+import com.info.sn.network.api.UploadScreenshot;
+import com.info.sn.network.api.UserInfoControl;
+import com.info.sn.utils.Utils;
+
+import java.io.File;
+import java.util.List;
+import java.util.concurrent.TimeUnit;
+
+import io.reactivex.Observable;
+import io.reactivex.android.schedulers.AndroidSchedulers;
+import io.reactivex.schedulers.Schedulers;
+import okhttp3.Cache;
+import okhttp3.OkHttpClient;
+import retrofit2.CallAdapter;
+import retrofit2.Converter;
+import retrofit2.Retrofit;
+import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory;
+import retrofit2.converter.gson.GsonConverterFactory;
+
+public class NetInterfaceManager {
+ @SuppressLint("StaticFieldLeak")
+ private static NetInterfaceManager INSTANCE;
+ private Context mContext;
+ private static Retrofit mRetrofit;
+ private static Retrofit mGankaoRetrofit;
+ private static final String ROOT_URL = UrlAddress.ROOT_URL;
+
+ private NetInterfaceManager(Context context) {
+ mContext = context;
+ if (null == mRetrofit) {
+ mRetrofit = new Retrofit.Builder()
+ .client(okHttpClient)
+ .baseUrl(ROOT_URL)
+ .addConverterFactory(gsonConverterFactory)
+ .addCallAdapterFactory(rxJavaCallAdapterFactory)
+ .build();
+ }
+ if (null == mGankaoRetrofit) {
+ mGankaoRetrofit = new Retrofit.Builder()
+ .client(okHttpClient)
+ .baseUrl(UrlAddress.GANKAN_ROOT_URL)
+ .addConverterFactory(gsonConverterFactory)
+ .addCallAdapterFactory(rxJavaCallAdapterFactory)
+ .build();
+ }
+ }
+
+ public static void init(Context context) {
+ if (INSTANCE == null) {
+ INSTANCE = new NetInterfaceManager(context);
+ }
+ }
+
+ public static NetInterfaceManager getInstance() {
+ if (INSTANCE == null) {
+ throw new IllegalStateException("You must be init NetworkManager first");
+ }
+ return INSTANCE;
+ }
+
+ private static final long cacheSize = 1024 * 1024 * 32;// 缓存文件最大限制大小20M
+ private static String cacheDirectory = Environment.getExternalStorageDirectory() + "/okttpcaches"; // 设置缓存文件路径
+ private static Cache cache = new Cache(new File(cacheDirectory), cacheSize); //
+ private static final OkHttpClient okHttpClient;
+ private static final int timeOut = 5;
+
+ static {
+ //如果无法生存缓存文件目录,检测权限使用已经加上,检测手机是否把文件读写权限禁止了
+ OkHttpClient.Builder builder = new OkHttpClient.Builder();
+ builder.connectTimeout(timeOut, TimeUnit.SECONDS); // 设置连接超时时间
+ builder.writeTimeout(timeOut, TimeUnit.SECONDS);// 设置写入超时时间
+ builder.readTimeout(timeOut, TimeUnit.SECONDS);// 设置读取数据超时时间
+ builder.retryOnConnectionFailure(true);// 设置进行连接失败重试
+ builder.cache(cache);// 设置缓存
+ okHttpClient = builder.build();
+ }
+
+ private static CallAdapter.Factory rxJavaCallAdapterFactory = RxJava2CallAdapterFactory.create();
+ private static Converter.Factory gsonConverterFactory = GsonConverterFactory.create();
+
+ public Observable> getsnInfoControl() {
+ return mRetrofit.create(SNInfoApi.class)
+ .getsninfo(Utils.getSerial())
+ .subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread());
+ }
+
+ public Observable getsettingControl() {
+ return mRetrofit.create(Setting.class)
+ .getSetting(Utils.getSerial())
+ .subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread());
+ }
+
+ public Observable> getsettingKTControl() {
+ return mRetrofit.create(SettingKT.class)
+ .getSetting(Utils.getSerial())
+ .subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread());
+ }
+
+ public Observable>> getForceInstallControl() {
+ return mRetrofit.create(ForceInstall.class)
+ .getForceInstall(Utils.getSerial())
+ .subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread());
+ }
+
+ public BindDevices getbindDevicesControl() {
+ return mRetrofit.create(BindDevices.class);
+ }
+
+ public AddAppInstall getAddAppInstallControl() {
+ return mRetrofit.create(AddAppInstall.class);
+ }
+
+ public Observable getBrowserControl() {
+ return mRetrofit.create(Browser.class)
+ .getBrowser(Utils.getSerial())
+ .subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread());
+ }
+
+ public Observable getLabelControl() {
+ return mRetrofit.create(BrowserLabel.class)
+ .getLabel(Utils.getSerial())
+ .subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread());
+ }
+
+ public Observable>> getAppStartControl() {
+ return mRetrofit.create(QuerySnAppStart.class)
+ .getAppStatu(Utils.getSerial())
+ .subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread());
+ }
+
+ public APPJump getAppJumpControl() {
+ return mRetrofit.create(APPJump.class);
+ }
+
+ public UpdateAdminSn getUpdateAdminSnControl() {
+ return mRetrofit.create(UpdateAdminSn.class);
+ }
+
+ public Observable>> getQueryAllAppControl() {
+ return mRetrofit.create(QueryAllApp.class)
+ .getAllApp(Utils.getSerial())
+ .subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread());
+ }
+
+ public NewestAppUpdate getNewestAppUpdateControl() {
+ return mRetrofit.create(NewestAppUpdate.class);
+ }
+
+ public UploadScreenshot getUploadScreenshotControl() {
+ return mRetrofit.create(UploadScreenshot.class);
+ }
+
+ public ScreenLock getScreenLockControl() {
+ return mRetrofit.create(ScreenLock.class);
+ }
+
+ public Observable getTimeControl() {
+ return mRetrofit.create(TimeControl.class)
+ .getTimeControl(Utils.getSerial())
+ .subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread());
+ }
+
+ public ScreenState setScreen() {
+ return mRetrofit.create(ScreenState.class);
+ }
+
+ public Observable> getUserAvatarInfoControl() {
+ return mRetrofit.create(UserInfoControl.class)
+ .getUserAvatarInfo(Utils.getSerial())
+ .subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread());
+ }
+
+ public Observable getSaveSnUidApiControl(String uid) {
+ return mRetrofit.create(SaveSnUidApi.class)
+ .saveSnUid(Utils.getSerial(), uid)
+ .subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread());
+ }
+
+
+ public AppUsedApi getAppUsedControl() {
+ return mRetrofit.create(AppUsedApi.class);
+ }
+
+ public Observable getRunningAppObservable(String json) {
+ return mRetrofit.create(RunningApp.class)
+ .sendAppInfo(Utils.getSerial(), json)
+ .subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread());
+ }
+
+ public Observable getQRCodeApiControl() {
+ return mRetrofit.create(QRCodeApi.class)
+ .getQRCodeApi()
+ .subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread());
+ }
+
+ public Observable getAppInsideControl() {
+ return mRetrofit.create(QueryAppInside.class)
+ .getAppInside(Utils.getSerial())
+ .subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread());
+ }
+
+
+ //赶考
+
+ public CreateUserApi getCreateUserControl() {
+ return mGankaoRetrofit.create(CreateUserApi.class);
+ }
+
+ public ActiveUserApi getActiveUserControl() {
+ return mGankaoRetrofit.create(ActiveUserApi.class);
+ }
+
+ public QueryProductApi getQueryProductControl() {
+ return mGankaoRetrofit.create(QueryProductApi.class);
+ }
+
+
+}
diff --git a/app/src/main/java/com/info/sn/mvp/BasePresenter.java b/app/src/main/java/com/info/sn/mvp/BasePresenter.java
new file mode 100644
index 0000000..965b06a
--- /dev/null
+++ b/app/src/main/java/com/info/sn/mvp/BasePresenter.java
@@ -0,0 +1,7 @@
+package com.info.sn.mvp;
+
+public interface BasePresenter {
+ void attachView(V view);
+
+ void detachView();
+}
diff --git a/app/src/main/java/com/info/sn/mvp/BaseView.java b/app/src/main/java/com/info/sn/mvp/BaseView.java
new file mode 100644
index 0000000..cae9fc5
--- /dev/null
+++ b/app/src/main/java/com/info/sn/mvp/BaseView.java
@@ -0,0 +1,4 @@
+package com.info.sn.mvp;
+
+public interface BaseView {
+}
diff --git a/app/src/main/java/com/info/sn/network/HTTPInterface.java b/app/src/main/java/com/info/sn/network/HTTPInterface.java
index c93a6cc..95ae5f9 100644
--- a/app/src/main/java/com/info/sn/network/HTTPInterface.java
+++ b/app/src/main/java/com/info/sn/network/HTTPInterface.java
@@ -1,35 +1,34 @@
package com.info.sn.network;
+import android.annotation.SuppressLint;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
+import android.content.pm.ResolveInfo;
import android.os.Build;
import android.provider.Settings;
import android.text.TextUtils;
import android.util.Log;
import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.google.gson.Gson;
import com.google.gson.JsonObject;
import com.info.sn.BuildConfig;
-import com.info.sn.bean.AppInfo;
-import com.info.sn.bean.AppStart;
-import com.info.sn.bean.BaseResponse;
-import com.info.sn.bean.BrowserBean;
-import com.info.sn.bean.SystemSettings;
-import com.info.sn.network.api.AddAppInstall;
-import com.info.sn.network.api.Browser;
-import com.info.sn.network.api.ForceInstall;
-import com.info.sn.network.api.Label;
+import com.info.sn.Statistics.AppInformation;
+import com.info.sn.Statistics.StatisticsInfo;
+import com.info.sn.bean.zuoye.AppInfo;
+import com.info.sn.bean.zuoye.AppStart;
+import com.info.sn.bean.zuoye.AppUploadInfo;
+import com.info.sn.bean.zuoye.BaseResponse;
+import com.info.sn.bean.zuoye.BrowserBean;
+import com.info.sn.manager.ControlManager;
+import com.info.sn.manager.NetInterfaceManager;
import com.info.sn.network.api.NewestAppUpdate;
-import com.info.sn.network.api.QueryAllApp;
-import com.info.sn.network.api.QuerySnAppStart;
-import com.info.sn.network.api.Setting;
-import com.info.sn.network.api.TimeControl;
import com.info.sn.network.api.UpdateAdminSn;
-import com.info.sn.service.InitJpushServer;
+import com.info.sn.service.ManagerService;
import com.info.sn.utils.ApkUtils;
import com.info.sn.utils.FileUtils;
import com.info.sn.utils.JGYUtils;
@@ -38,8 +37,13 @@ import com.info.sn.utils.TimeUtils;
import com.info.sn.utils.URLUtils;
import com.info.sn.utils.Utils;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.HashSet;
import java.util.List;
+import io.reactivex.Observable;
+import io.reactivex.ObservableOnSubscribe;
import io.reactivex.Observer;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.annotations.NonNull;
@@ -47,17 +51,19 @@ import io.reactivex.disposables.Disposable;
import io.reactivex.schedulers.Schedulers;
public class HTTPInterface {
+ private static String TAG = HTTPInterface.class.getSimpleName();
+
public static void SendAppInstall(String jsonString) {
// if (packageName.equals(packages)) {
// Log.e("SendAppInstall", installOrRemove + "return: " + packages);
// return;
// }
-
- AddAppInstall addAppInstall = NetWorkManager.getAddAppInstallControl();
- addAppInstall.installorRemove(
- Utils.getSerial(), jsonString
- ).subscribeOn(Schedulers.io())
+ NetInterfaceManager.getInstance()
+ .getAddAppInstallControl()
+ .installorRemove(
+ Utils.getSerial(), jsonString
+ ).subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer() {
@Override
@@ -86,11 +92,11 @@ public class HTTPInterface {
}
- public static void setBrowser(final Context context) {
- Browser browser = NetWorkManager.getBrowserControl();
- browser.getBrowser(Utils.getSerial())
- .subscribeOn(Schedulers.io())
- .observeOn(AndroidSchedulers.mainThread())
+ /**
+ * @param context 获取浏览器黑白名单
+ */
+ public static void getBrowserWhiteList(final Context context) {
+ NetInterfaceManager.getInstance().getBrowserControl()
.subscribe(new Observer() {
@Override
public void onSubscribe(@NonNull Disposable d) {
@@ -105,28 +111,27 @@ public class HTTPInterface {
//白名单
List white = JSON.parseArray(jsonObject.getString("browser"), BrowserBean.class);
if (null != white && white.size() != 0) {
- String s = "";
+ StringBuilder s = new StringBuilder();
for (BrowserBean bean : white) {
- s += bean.getAddress() + ",";
+ s.append(bean.getAddress()).append(",");
}
- boolean whiteList = Settings.System.putString(context.getContentResolver(), "DeselectBrowserArray", s);
+ boolean whiteList = JGYUtils.putString(context.getContentResolver(), "DeselectBrowserArray", s.toString());
Log.e("setBrowser", "setBrowserList_white:" + whiteList + ":" + white);
} else {
- Settings.System.putString(context.getContentResolver(), "DeselectBrowserArray", " ");
+ JGYUtils.putString(context.getContentResolver(), "DeselectBrowserArray", " ");
}
//黑名单
List black = JSON.parseArray(jsonObject.getString("browser_black"), BrowserBean.class);
if (null != black && black.size() != 0) {
- String s = "";
+ StringBuilder s = new StringBuilder();
for (BrowserBean bean : black) {
- s += bean.getAddress() + ",";
+ s.append(bean.getAddress()).append(",");
}
- boolean blackList = Settings.System.putString(context.getContentResolver(), "qch_webblack_url", s);
+ boolean blackList = JGYUtils.putString(context.getContentResolver(), "qch_webblack_url", s.toString());
Log.e("setBrowser", "setBrowserList_black:" + blackList + ":" + black);
} else {
- Settings.System.putString(context.getContentResolver(), "qch_webblack_url", " ");
+ JGYUtils.putString(context.getContentResolver(), "qch_webblack_url", " ");
}
-
}
}
@@ -144,10 +149,7 @@ public class HTTPInterface {
}
public static void getBrowserLabel(final Context context) {
- Label label = NetWorkManager.getLabelControl();
- label.getLabel(Utils.getSerial())
- .subscribeOn(Schedulers.io())
- .observeOn(AndroidSchedulers.mainThread())
+ NetInterfaceManager.getInstance().getLabelControl()
.subscribe(new Observer() {
@Override
public void onSubscribe(@NonNull Disposable d) {
@@ -161,13 +163,10 @@ public class HTTPInterface {
Gson gson = new Gson();
String data = gson.toJson(listBaseResponse.data);
JsonObject jsonObject = gson.fromJson(data, JsonObject.class);
- if (jsonObject.getAsJsonArray("label").size() == 0) {
- return;
- }
- JsonObject label = jsonObject.getAsJsonArray("label").get(0).getAsJsonObject();
- String home_page = label.get("home_page").getAsString();
- Settings.System.putString(context.getContentResolver(), "homepagURL", home_page);
- String label_page = label.get("label_page").getAsString();
+// JsonElement label = jsonObject.get(0).getAsJsonObject();
+ String home_page = jsonObject.get("home_page").getAsString();
+ JGYUtils.putString(context.getContentResolver(), "homepagURL", home_page);
+ String label_page = jsonObject.get("label_page").getAsString();
// Log.e("getBrowserLabel", "onNext: " + home_page);
//主页
Intent homepag = new Intent("qch_app_brower_homepage");
@@ -215,32 +214,32 @@ public class HTTPInterface {
@Override
public void onError(@NonNull Throwable e) {
Log.e("getBrowserLabel", "onError: " + e.getMessage());
+ onComplete();
}
@Override
public void onComplete() {
-
+ new URLUtils(context).setBrowserList();
}
});
}
- public static void getAppStart(final Context context) {
- final QuerySnAppStart appStart = NetWorkManager.getAppStartControl();
- appStart.getAppStatu(Utils.getSerial())
- .subscribeOn(Schedulers.io())
- .observeOn(AndroidSchedulers.mainThread())
+ public static void getAppStart(final Context context, List appInfoList) {
+ NetInterfaceManager.getInstance().getAppStartControl()
.subscribe(new Observer>>() {
@Override
public void onSubscribe(@NonNull Disposable d) {
-
+ Log.e("getAppStart", "onSubscribe: ");
}
@Override
public void onNext(@NonNull BaseResponse> listBaseResponse) {
+ Log.e("getAppStart", "onNext: " + JSONObject.toJSONString(listBaseResponse.data));
int code = listBaseResponse.code;
if (code == 200) {
List list = listBaseResponse.data;
setAppState(context, list);
+ checkPackageAndVersion(context, list, appInfoList);
} else {
setInvalid(context);
}
@@ -253,24 +252,70 @@ public class HTTPInterface {
@Override
public void onComplete() {
-
+ Log.e("getAppStart", "onComplete: ");
}
});
}
- private static void setAppState(Context context, List list) {
- setAppAutoStart(context, list);
+ public static void setAppState(Context context, List list) {
+// setAppAutoStart(context, list);
setAppNetwork(context, list);
- setAppNUpdate(context, list);
+ setAppUpdate(context, list);
setAppSlide(context, list);
setAppHide(context, list);
- setAPPinsideBrowser(context, list);
- setAPPIDJump(context, list);
+// setAPPinsideBrowser(context, list);
+// setAPPIDJump(context, list);
+ }
+
+ private static void checkPackageAndVersion(Context context, List list, List appInfoList) {
+ if (list != null && appInfoList != null) {
+ PackageManager pm = context.getPackageManager();
+ HashMap appInfoHashMap = new HashMap<>();
+ for (AppInfo appInfo : appInfoList) {
+ appInfoHashMap.put(appInfo.getApp_package(), appInfo);
+ }
+ for (AppStart appStart : list) {
+ String pkg = appStart.getApp_package();
+ if (appStart.getIs_upgrade() == 0) {
+ Log.e(TAG, "checkPackageAndVersion: " + pkg + ": 禁止升级");
+ AppInfo info = appInfoHashMap.get(pkg);
+ PackageInfo packageInfo = null;
+ try {
+ packageInfo = pm.getPackageInfo(pkg, 0);
+ } catch (PackageManager.NameNotFoundException e) {
+ e.printStackTrace();
+ }
+ if (packageInfo != null && info != null) {
+ Log.e(TAG, "checkPackageAndVersion: " + info.getApp_package());
+ long onlineVersion = info.getApp_version_code();
+ long appVersionCode;
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
+ appVersionCode = packageInfo.getLongVersionCode();
+ } else {
+ appVersionCode = packageInfo.versionCode;
+ }
+ if (appVersionCode > onlineVersion && appVersionCode != 0) {
+ ApkUtils.uninstallApp(context, pkg);
+ JSONObject jsonObject = (JSONObject) JSON.toJSON(info);
+ FileUtils.ariaDownload(context, info.getApp_url(), jsonObject);
+ Log.e(TAG, "checkPackageAndVersion: " + pkg + ": 卸载");
+ } else {
+ Log.e(TAG, "checkPackageAndVersion: " + pkg + ": 版本正常");
+ }
+ } else {
+ Log.e(TAG, "checkPackageAndVersion: " + pkg + ": 未安装");
+ }
+ } else {
+ Log.e(TAG, "checkPackageAndVersion: " + pkg + ": 未禁止升级");
+ }
+ }
+ }
+ ApkUtils.addShortcut(context);
}
//应用自启动
- private static void setAppAutoStart(Context context, List list) {
+ public static void setAppAutoStart(Context context, List list) {
String auto_allow = "";
String auto_not = "";
if (null != list && list.size() != 0) {
@@ -289,7 +334,7 @@ public class HTTPInterface {
}
if (!TextUtils.isEmpty(auto_allow) && auto_allow.endsWith(",")) {
auto_allow = auto_allow.substring(0, auto_allow.length() - 1);
- boolean qch_app_power_on = Settings.System.putString(context.getContentResolver(), "qch_app_power_on", auto_allow);
+ boolean qch_app_power_on = JGYUtils.putString(context.getContentResolver(), "qch_app_power_on", auto_allow);
}
if (!TextUtils.isEmpty(auto_not) && auto_not.endsWith(",")) {
auto_not = auto_not.substring(0, auto_not.length() - 1);
@@ -317,41 +362,38 @@ public class HTTPInterface {
}
if (!TextUtils.isEmpty(network_allow) && network_allow.endsWith(",")) {
network_allow = network_allow.substring(0, network_allow.length() - 1);
- Settings.System.putString(context.getContentResolver(), "qch_jgy_network_allow", network_allow);
- Log.e("fht", "not::" + network_allow);
+ JGYUtils.putString(context.getContentResolver(), "qch_jgy_network_allow", network_allow);
+ Log.e(TAG, "not::" + network_allow);
}
if (!TextUtils.isEmpty(network_not) && network_not.endsWith(",")) {
network_not = network_not.substring(0, network_not.length() - 1);
- Settings.System.putString(context.getContentResolver(), "qch_jgy_network_disallow", network_not);
- Log.e("fht", "ban::" + network_not);
+ JGYUtils.putString(context.getContentResolver(), "qch_jgy_network_disallow", network_not);
+ Log.e(TAG, "ban::" + network_not);
}
}
}
//app更新
- private static void setAppNUpdate(Context context, List list) {
+ @SuppressLint("NewApi")
+ private static void setAppUpdate(Context context, List list) {
if (null != list && list.size() != 0) {
- String upgrade_allow = "";
- String upgrade_not = "";
+ HashSet notApp = new HashSet<>();
+ HashSet allowApp = new HashSet<>();
for (AppStart app : list) {
int is_upgrade = app.getIs_upgrade();
String app_package = app.getApp_package();
if (is_upgrade == 0) {
- upgrade_allow += app_package + ",";
+ notApp.add(app_package);
} else {
- upgrade_not += app_package + ",";
+ allowApp.add(app_package);
}
}
- if (!TextUtils.isEmpty(upgrade_allow) && upgrade_allow.endsWith(",")) {
- upgrade_allow = upgrade_allow.substring(0, upgrade_allow.length() - 1);
- }
- if (!TextUtils.isEmpty(upgrade_not) && upgrade_not.endsWith(",")) {
- upgrade_not = upgrade_not.substring(0, upgrade_not.length() - 1);
- }
- Log.e("setAppNUpdate", "upgrade_allow: " + upgrade_allow);
- Log.e("setAppNUpdate", "upgrade_allow: " + upgrade_not);
- Utils.writeDisableUpdateList(context, upgrade_not.split(","), upgrade_allow.split(","));
-
+ String upgrade_disallow = String.join(",", notApp);
+ String upgrade_allow = String.join(",", allowApp);
+ Log.e("setAppUpdate", "upgrade_allow: " + upgrade_allow);
+ Log.e("setAppUpdate", "upgrade_disallow: " + upgrade_disallow);
+ Settings.System.putString(context.getContentResolver(), "upgrade_disallow", upgrade_disallow);
+ Utils.writeDisableUpdateList(context);
}
}
@@ -378,11 +420,11 @@ public class HTTPInterface {
}
if (!TextUtils.isEmpty(slide_not) && slide_not.endsWith(",")) {
slide_not = slide_not.substring(0, slide_not.length() - 1);
- boolean writeSucceed = Settings.System.putString(context.getContentResolver(), "qch_disable_slide", slide_not);
- Log.e("fht", "qch_disable_slide=" + writeSucceed + ":" + slide_not);
+ boolean writeSucceed = JGYUtils.putString(context.getContentResolver(), "qch_disable_slide", slide_not);
+ Log.e(TAG, "qch_disable_slide=" + writeSucceed + ":" + slide_not);
} else {
- boolean writeSucceed = Settings.System.putString(context.getContentResolver(), "qch_disable_slide", "Invalid");
- Log.e("fht", "qch_disable_slide ok=" + writeSucceed + ":" + slide_allow);
+ boolean writeSucceed = JGYUtils.putString(context.getContentResolver(), "qch_disable_slide", "Invalid");
+ Log.e(TAG, "qch_disable_slide ok=" + writeSucceed + ":" + slide_allow);
}
} else {
@@ -391,15 +433,18 @@ public class HTTPInterface {
}
//隐藏显示app
+ @SuppressLint("NewApi")
private static void setAppHide(Context context, List list) {
PackageManager pm = context.getPackageManager();
if (null != list && list.size() != 0) {
+ List hideAPPList = new ArrayList<>();
for (AppStart app : list) {
String app_package = app.getApp_package();
int is_lock = app.getIs_lock();
try {
if (is_lock == 1) {
pm.setApplicationEnabledSetting(app_package, PackageManager.COMPONENT_ENABLED_STATE_DISABLED, 0);
+ hideAPPList.add(app_package);
} else {
pm.setApplicationEnabledSetting(app_package, PackageManager.COMPONENT_ENABLED_STATE_DEFAULT, 0);
}
@@ -407,22 +452,26 @@ public class HTTPInterface {
Log.e("setAppHide", "setAppHide: " + e.getMessage());
}
}
+ String jsonString = JSONObject.toJSONString(hideAPPList);
+ SPUtils.put(context, "Hide_APP_List", String.join(",", jsonString));
+ JGYUtils.updateHideList(context);
+ Log.e(TAG, "Hide_APP_List: " + jsonString);
}
}
//应用内网页管控
public static void setAPPinsideBrowser(Context context, List list) {
- String packageList = "";
- String urlList = "";
+ StringBuilder packageList = new StringBuilder();
+ StringBuilder urlList = new StringBuilder();
for (AppStart app : list) {
if (TextUtils.isEmpty(app.getAddress())) {
- packageList += app.getApp_package() + ",";
+ packageList.append(app.getApp_package()).append(",");
} else {
- urlList += app.getApp_package() + "," + app.getAddress() + ";";
+ urlList.append(app.getApp_package()).append(",").append(app.getAddress()).append(";");
}
}
- if (!TextUtils.isEmpty(packageList)) {
+ if (!TextUtils.isEmpty(packageList.toString())) {
// //app内所有的网页禁止
// packageList = packageList.substring(0, packageList.length() - 1);
// //去掉多余的,
@@ -435,14 +484,12 @@ public class HTTPInterface {
} else {
sendAllweb(context);
}
- if (!TextUtils.isEmpty(urlList)) {
+ if (!TextUtils.isEmpty(urlList.toString())) {
//app内单个网页地址禁止打开
- urlList = urlList.substring(0, urlList.length() - 1);
- //去掉多余的;
Log.e("setAppinsideWeb ", "strings:" + urlList);
Intent intent = new Intent("qch_app_inside_website")
.setPackage("com.android.settings");
- intent.putExtra("websitelist", urlList);
+ intent.putExtra("websitelist", urlList.toString());
context.sendBroadcast(intent);
} else {
sendwebUrl(context);
@@ -450,41 +497,34 @@ public class HTTPInterface {
}
//应用ID管控
+ @SuppressLint("NewApi")
public static void setAPPIDJump(Context context, List list) {
- String ids = "";
- String packages = "";
if (null != list && list.size() != 0) {
+ HashSet pkgs = new HashSet<>();
+ HashSet idList = new HashSet<>();
for (AppStart app : list) {
- String app_package = app.getApp_package();
- String id = app.getVisit();
- if (!ids.contains(id)) {
- ids += id + ",";
- }
- if (!packages.contains(app_package)) {
- packages += app_package + ",";
- }
+ pkgs.add(app.getApp_package());
+ idList.add(app.getVisit());
}
+ String packages = String.join(",", pkgs);
+ String ids = String.join(",", idList);
+ Log.e(TAG, "setAPPIDJump: " + packages);
+ Log.e(TAG, "setAPPIDJump: " + ids);
if (TextUtils.isEmpty(ids)) {
- Settings.System.putString(context.getContentResolver(), "qch_app_forbid_id", "Invalid");
- Settings.System.putString(context.getContentResolver(), "DeselectViewArray", "Invalid");
+ JGYUtils.putString(context.getContentResolver(), "qch_app_forbid_id", "Invalid");
+ JGYUtils.putString(context.getContentResolver(), "DeselectViewArray", "Invalid");
} else {
- if (ids.endsWith(",")) {
- ids = ids.substring(0, ids.length() - 1);
- }
- if (packages.endsWith(",")) {
- packages = packages.substring(0, packages.length() - 1);
- }
- Settings.System.putString(context.getContentResolver(), "qch_app_forbid_id", packages);
- Settings.System.putString(context.getContentResolver(), "DeselectViewArray", ids);
+ JGYUtils.putString(context.getContentResolver(), "qch_app_forbid_id", packages);
+ JGYUtils.putString(context.getContentResolver(), "DeselectViewArray", ids);
}
}
}
- private static void setInvalid(Context context) {
- boolean qch_app_power_on = Settings.System.putString(context.getContentResolver(), "qch_app_power_on", "Invalid");
- boolean qch_jgy_network_allow = Settings.System.putString(context.getContentResolver(), "qch_jgy_network_allow", "Invalid");
- boolean qch_jgy_network_disallow = Settings.System.putString(context.getContentResolver(), "qch_jgy_network_disallow", "Invalid");
- boolean writeSucceed = Settings.System.putString(context.getContentResolver(), "qch_disable_slide", "Invalid");
+ public static void setInvalid(Context context) {
+ boolean qch_app_power_on = JGYUtils.putString(context.getContentResolver(), "qch_app_power_on", "Invalid");
+ boolean qch_jgy_network_allow = JGYUtils.putString(context.getContentResolver(), "qch_jgy_network_allow", "Invalid");
+ boolean qch_jgy_network_disallow = JGYUtils.putString(context.getContentResolver(), "qch_jgy_network_disallow", "Invalid");
+ boolean writeSucceed = JGYUtils.putString(context.getContentResolver(), "qch_disable_slide", "Invalid");
}
private static void sendAllweb(Context context) {
@@ -510,14 +550,14 @@ public class HTTPInterface {
jsonObject.put("longitude", longitude);
jsonObject.put("latitude", latitude);
String a = jsonObject.toString();
- String b = Utils.getMachine(context);
- String c = Utils.getHardware(context);
- String d = Utils.getSerial();
- UpdateAdminSn updateAdminSn = NetWorkManager.getUpdateAdminSnControl();
+ String machine = Utils.getMachine(context);
+ String hardware = Utils.getHardware(context);
+ Log.e(TAG, "updateAdminInfo: getHardware = " + hardware);
+ UpdateAdminSn updateAdminSn = NetInterfaceManager.getInstance().getUpdateAdminSnControl();
updateAdminSn.sendAdminSn(Utils.getSerial(),
jsonObject.toJSONString(),
- Utils.getMachine(context),
- Utils.getHardware(context)
+ machine,
+ hardware
).subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer() {
@@ -528,7 +568,6 @@ public class HTTPInterface {
@Override
public void onNext(@NonNull BaseResponse baseResponse) {
-// Log.e("updateAdminInfo", "onNext: " + baseResponse.toString());
Log.e("updateAdminInfo", "onNext: " + baseResponse.msg);
}
@@ -545,15 +584,16 @@ public class HTTPInterface {
});
}
+ /**
+ * @param context 获取所有可以安装的包名
+ */
+ @SuppressLint("NewApi")
public static void getAllappPackage(final Context context) {
- QueryAllApp queryAllApp = NetWorkManager.getQueryAllAppControl();
- queryAllApp.getAllApp(Utils.getSerial())
- .subscribeOn(Schedulers.io())
- .observeOn(AndroidSchedulers.mainThread())
+ NetInterfaceManager.getInstance().getQueryAllAppControl()
.subscribe(new Observer>>() {
@Override
public void onSubscribe(@NonNull Disposable d) {
-
+ Log.e("getAllappPackage", "onSubscribe: ");
}
@Override
@@ -563,14 +603,14 @@ public class HTTPInterface {
Log.e("getAllappPackage", "onNext: " + listBaseResponse.msg);
List appInfoList = listBaseResponse.data;
if (null != appInfoList && appInfoList.size() != 0) {
- String s = "";
+ HashSet allAppPkg = new HashSet<>();
for (AppInfo appInfo : appInfoList) {
- s += appInfo.getApp_package() + ",";
+ allAppPkg.add(appInfo.getApp_package());
}
- if (s.endsWith(",")) {
- s = s.substring(0, s.length() - 1);
- }
- ApkUtils.writeAppPackageList(context, s);
+ String allPkgSet = String.join(",", allAppPkg);
+ SPUtils.put(context, "only_jgy_shortcut_list", allPkgSet);
+ ApkUtils.writeAppPackageList(context, allPkgSet);
+ HTTPInterface.getAppStart(context, appInfoList);
} else {
ApkUtils.writeAppPackageList(context, "Invalid");
}
@@ -587,16 +627,13 @@ public class HTTPInterface {
@Override
public void onComplete() {
-
+ Log.e("getAllappPackage", "onComplete: ");
}
});
}
public static void getForceInstall(final Context context) {
- ForceInstall forceInstall = NetWorkManager.getForceInstallControl();
- forceInstall.getForceInstall(Utils.getSerial())
- .subscribeOn(Schedulers.io())
- .observeOn(AndroidSchedulers.mainThread())
+ NetInterfaceManager.getInstance().getForceInstallControl()
.subscribe(new Observer>>() {
@Override
public void onSubscribe(@NonNull Disposable d) {
@@ -612,8 +649,8 @@ public class HTTPInterface {
getForceInstallState(context, appInfos);
}
} else {
- boolean qch_force_app = Settings.System.putString(context.getContentResolver(), "qch_force_app", "invalid");
- Log.e("fht", "qch_force_app:" + qch_force_app + ":" + "invalid");
+ boolean qch_force_app = JGYUtils.putString(context.getContentResolver(), "qch_force_app", "invalid");
+ Log.e(TAG, "qch_force_app:" + qch_force_app + ":" + "invalid");
}
}
@@ -629,14 +666,13 @@ public class HTTPInterface {
});
}
- private static void getForceInstallState(Context context, List list) {
+ @SuppressLint("NewApi")
+ synchronized public static void getForceInstallState(Context context, List list) {
if (null != list && list.size() != 0) {
- String packageList = "";
+ HashSet forceAppSet = new HashSet<>();
PackageManager pm = context.getPackageManager();
for (AppInfo appInfo : list) {
- if (!packageList.contains(appInfo.getApp_package())) {
- packageList += appInfo.getApp_package() + ",";
- }
+ forceAppSet.add(appInfo.getApp_package());
PackageInfo info = null;
try {
info = pm.getPackageInfo(appInfo.getApp_package(), 0);
@@ -659,19 +695,17 @@ public class HTTPInterface {
FileUtils.ariaDownload(context, appInfo.getApp_url(), jsonObject);
}
}
- if (packageList.endsWith(",")) {
- packageList = packageList.substring(0, packageList.length() - 1);
- boolean qch_force_app = Settings.System.putString(context.getContentResolver(), "qch_force_app", packageList);
- Log.e("fht", "qch_force_app:" + qch_force_app + ":" + packageList);
- }
+ String packageList = String.join(",", forceAppSet);
+ Log.e(TAG, "getForceInstallState: " + packageList);
+ boolean qch_force_app = JGYUtils.putString(context.getContentResolver(), "qch_force_app", packageList);
} else {
- boolean qch_force_app = Settings.System.putString(context.getContentResolver(), "qch_force_app", "invalid");
- Log.e("fht", "qch_force_app:" + qch_force_app + ":" + "invalid");
+ boolean qch_force_app = JGYUtils.putString(context.getContentResolver(), "qch_force_app", "invalid");
+ Log.e(TAG, "getForceInstallState:" + qch_force_app + ":" + "invalid");
}
}
public static void checkUpdate(final Context context, String packageName, String versionCode) {
- NewestAppUpdate newestAppUpdate = NetWorkManager.getNewestAppUpdateControl();
+ NewestAppUpdate newestAppUpdate = NetInterfaceManager.getInstance().getNewestAppUpdateControl();
newestAppUpdate.getAppUpdate(packageName, versionCode, JGYUtils.getInstance().checkAppPlatform())
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
@@ -737,22 +771,20 @@ public class HTTPInterface {
}
public static void getSystemSettings(final Context context) {
- Setting setting = NetWorkManager.getsettingControl();
- setting.getSetting(Utils.getSerial())
- .subscribeOn(Schedulers.io())
- .observeOn(AndroidSchedulers.mainThread())
- .subscribe(new Observer>() {
+ NetInterfaceManager.getInstance().getsettingControl()
+ .subscribe(new Observer() {
@Override
public void onSubscribe(@NonNull Disposable d) {
}
@Override
- public void onNext(@NonNull BaseResponse systemSettingsBaseResponse) {
- int code = systemSettingsBaseResponse.code;
+ public void onNext(@NonNull BaseResponse BaseResponse) {
+ int code = BaseResponse.code;
if (code == 200) {
- SystemSettings settings = systemSettingsBaseResponse.data;
- Utils.setSystemSetting(context, settings.toString());
+ JSONObject jsonObject = (JSONObject) JSON.toJSON(BaseResponse.data);
+ Log.e("getSystemSettings", "onNext: " + jsonObject);
+ ControlManager.getInstance().setSystemSetting(context, jsonObject.toJSONString());
}
}
@@ -770,10 +802,8 @@ public class HTTPInterface {
synchronized public static void getTimeControl(final Context context) {
- TimeControl timeControl = NetWorkManager.getTimeControl();
- timeControl.getTimeControl(Utils.getSerial())
- .subscribeOn(Schedulers.io())
- .observeOn(AndroidSchedulers.mainThread())
+ NetInterfaceManager.getInstance()
+ .getTimeControl()
.subscribe(new Observer() {
@Override
public void onSubscribe(Disposable d) {
@@ -782,20 +812,33 @@ public class HTTPInterface {
@Override
public void onNext(BaseResponse baseResponse) {
+ Log.e(TAG, "onNext: ");
int code = baseResponse.code;
if (code == 200) {
JSONObject jsonObject = (JSONObject) JSON.toJSON(baseResponse.data);
- String start_time = jsonObject.getString("start_time");
- String end_time = jsonObject.getString("end_time");
- TimeUtils.ContralTime c = TimeUtils.String2ContralTime(context, start_time + "-" + end_time);
- if (null != c) {
- Log.e("getTimeControl", "200:" + c.toString());
+ JSONObject work = jsonObject.getJSONObject("work");
+ String work_start_time = work.getString("start_time");
+ String work_end_time = work.getString("end_time");
+ JSONObject rest = jsonObject.getJSONObject("rest");
+ String rest_start_time = rest.getString("start_time");
+ String rest_end_time = rest.getString("end_time");
+ TimeUtils.ContralTime workingTime = TimeUtils.String2WorkingTime(context, work_start_time + "-" + work_end_time);
+ TimeUtils.ContralTime weekTime = TimeUtils.String2WeekTime(context, rest_start_time + "-" + rest_end_time);
+ if (null != workingTime) {
+ Log.e("getTimeControl", "200:" + workingTime.toString());
+ }
+ if (null != weekTime) {
+ Log.e("getTimeControl", "200:" + weekTime.toString());
}
} else {
TimeUtils.setEmpty(context);
- TimeUtils.ContralTime c = TimeUtils.getDefaltContralTime(context);
- if (null != c) {
- Log.e("getTimeControl", c.toString());
+ TimeUtils.ContralTime workingTime = TimeUtils.getWorkingDayContralTime(context);
+ if (null != workingTime) {
+ Log.e("getTimeControl", workingTime.toString());
+ }
+ TimeUtils.ContralTime weekTime = TimeUtils.getWeekDayContralTime(context);
+ if (null != weekTime) {
+ Log.e("getTimeControl", weekTime.toString());
}
}
}
@@ -808,461 +851,178 @@ public class HTTPInterface {
@Override
public void onComplete() {
Intent intent = new Intent();
- intent.setAction(InitJpushServer.TimeChangedReceiver.ACTION_UPDATE);
+ intent.setAction(ManagerService.ACTION_UPDATE);
context.sendBroadcast(intent);
}
});
}
+ public static void sendAppUsed(Context context) {
+ String statistics = Utils.getAppUsedStatistics(context);
+ Log.e(TAG, "sendAppUsed: " + statistics);
+ NetInterfaceManager.getInstance().getAppUsedControl()
+ .getAppUsed(Utils.getSerial(), statistics)
+ .subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribe(new Observer() {
+ @Override
+ public void onSubscribe(Disposable d) {
+ Log.e("sendAppUsed", "onSubscribe: ");
+ }
- //获取设备信息接口
-// public static synchronized void checkDevicesInfo(final Handler handler) {
-// OkGo.get(UrlAddress.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);
-// Message message = new Message();
-// message.obj = userInfo;
-// if (code == 200) {
-// message.what = 1;
-// handler.sendMessage(message);
-// } else if (code == -200) {
-// message.what = 0;
-// handler.sendMessage(message);
-// } else if (code == -250) {
-// ToastUtil.show(msg);
-// handler.sendEmptyMessage(2);
-// //设备验证
-// }
-// } catch (Exception ex) {
-// Log.e("checkDevicesInfo", ex.getMessage());
-// }
-// }
-//
-// @Override
-// public void onError(Response response) {
-// super.onError(response);
-// Log.e("onError", response.getException().toString());
-//
-// }
-// });
-// }
-//
-// public static synchronized void checkDevicesInfo(final Context context) {
-// OkGo.get(UrlAddress.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) {
-// SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
-// Date date = new Date(System.currentTimeMillis());
-// String times = simpleDateFormat.format(date);
-// OkGo.post(UrlAddress.APPLOG)
-// .params("sn", Utils.getSerial())
-// .params("app_name", appname)
-// .params("use_time", time)
-// .params("status", status)
-// .params("createtime", times)
-// .execute(new StringCallback() {
-// @Override
-// public void onSuccess(Response response) {
-// Log.e("onSuccess", "sendTimeLog");
-// try {
-// JSONObject bodyObject = JSON.parseObject(response.body());
-// Log.e("onSuccess", bodyObject.toString());
-//
-// Integer code = (bodyObject.getInteger("code"));
-// String msg = bodyObject.getString("msg");
-// String data = bodyObject.getString("data");
-// UserInfo userInfo = JSON.parseObject(data, UserInfo.class);
-// Message message = new Message();
-// message.obj = userInfo;
-// if (code == 200) {
-//
-// } else if (code == -200) {
-//
-// } else if (code == -250) {
-//
-// }
-// } catch (Exception ex) {
-// Log.e("checkDevicesInfo", ex.getMessage());
-// }
-// }
-//
-// @Override
-// public void onError(Response response) {
-// super.onError(response);
-// Log.e("onError", response.getException().toString());
-//
-// }
-// });
-// }
-//
-// synchronized public static void checkUpdateByPackage(final Handler handler, String packageName, String versionCode) {
-// OkGo.post(UrlAddress.GET_APP_UPDATE)
-// .params("code", versionCode)
-// .params("package", packageName)
-// .execute(new StringCallback() {
-// @Override
-// public void onSuccess(Response response) {
-// try {
-// JSONObject body = JSON.parseObject(response.body());
-// int code = body.getInteger("code");
-// String msg = body.getString("msg");
-// if (code == 200) {
-// Message message = new Message();
-// JSONObject data = JSON.parseObject(body.getString("data"));
-// if (data != null) {
-// String url = data.getString("downloadurl");
-// String newversion = data.getString("newversion");
-// String content = data.getString("content");
-//
-// message.what = 200;
-// Bundle bundle = new Bundle();
-// bundle.putString("url", url);
-// bundle.putString("versionCode", newversion);
-// bundle.putString("content", content);
-// message.obj = bundle;
-// }
-// handler.sendMessage(message);
-//// Log.e("checkUpdateSN", msg);
-// } else {
-// handler.sendEmptyMessage(-200);
-//// Log.e("checkUpdateSN", msg);
-// }
-// } catch (Exception e) {
-//// Log.e("checkUpdateSN", e.getMessage());
-// }
-// }
-//
-// @Override
-// public void onError(Response response) {
-// super.onError(response);
-// handler.sendEmptyMessage(-300);
-//// Log.e("checkUpdateSN", response.getException().toString());
-// }
-// });
-// }
-//
-// synchronized public static void checkUpdateByself(final Handler handler, String packageName, String versionCode) {
-// OkGo.post(UrlAddress.GET_APP_UPDATE)
-// .params("code", versionCode)
-// .params("package", packageName)
-// .execute(new StringCallback() {
-// @Override
-// public void onSuccess(Response response) {
-// try {
-// JSONObject body = JSON.parseObject(response.body());
-// int code = body.getInteger("code");
-// String msg = body.getString("msg");
-// if (code == 200) {
-// Message message = new Message();
-// JSONObject data = JSON.parseObject(body.getString("data"));
-// if (data != null) {
-// String url = data.getString("downloadurl");
-// String newversion = data.getString("newversion");
-// String content = data.getString("content");
-// message.what = 300;
-// Bundle bundle = new Bundle();
-// bundle.putString("url", url);
-// bundle.putString("versionCode", newversion);
-// bundle.putString("content", content);
-// message.obj = bundle;
-// }
-// handler.sendMessage(message);
-//// Log.e("checkUpdateSN", msg);
-// } else {
-// handler.sendEmptyMessage(-200);
-//// Log.e("checkUpdateSN", msg);
-// }
-// } catch (Exception e) {
-//// Log.e("checkUpdateSN", e.getMessage());
-// }
-// }
-//
-// @Override
-// public void onError(Response response) {
-// super.onError(response);
-// handler.sendEmptyMessage(-300);
-//// Log.e("checkUpdateSN", response.getException().toString());
-// }
-// });
-// }
-//
-// synchronized public static void setAppuninstallInfo(String sn_id, String packageName) {
-// OkGo.post(UrlAddress.SET_APP_UNINSTALL_INFO)
-// .params("sn_id", sn_id)
-// .params("package", packageName)
-// .execute(new StringCallback() {
-// @Override
-// public void onSuccess(Response response) {
-// JSONObject object = JSON.parseObject(response.body());
-// int code = object.getInteger("code");
-// String msg = object.getString("msg");
-// LogUtils.e("setAppinstallInfo", msg);
-// if (code == 200) {
-//
-// } else {
-//
-// }
-// }
-//
-// @Override
-// public void onError(Response response) {
-// super.onError(response);
-// LogUtils.e("setAppinstallInfo", "onError:" + response.getException());
-//
-// }
-// });
-//
-// }
-//
-// synchronized public static void sendStartTime(Context context, long startTime, String packageName, int battery, String random) {
-// String sn_id = (String) SPUtils.get(context, "sn_id", "-1");
-// String member_id = (String) SPUtils.get(context, "member_id", "-1");
-// OkGo.post(UrlAddress.SEND_RUNINGAPPINFO)
-// .params("start_time", startTime)
-// .params("package", packageName)
-// .params("battery", battery)
-// .params("member_id", member_id)
-// .params("sn_id", sn_id)
-// .params("random", random)
-// .execute(new StringCallback() {
-// @Override
-// public void onSuccess(Response response) {
-// String body = response.body();
-// LogUtils.e("sendStartTime", body);
-// }
-//
-// @Override
-// public void onError(Response response) {
-// super.onError(response);
-// LogUtils.e("sendStartTime", response.getException().toString());
-//
-// }
-// });
-// }
-//
-// synchronized public static void getDriveState(int member_id, int sn_id) {
-//
-// OkGo.post(UrlAddress.SEND_DRIVE_STATE)
-// .params("member_id", member_id)
-// .params("sn_id", sn_id)
-// .params("status", 1)
-// .execute(new StringCallback() {
-// @Override
-// public void onSuccess(Response response) {
-//
-// }
-//
-// @Override
-// public void onError(Response response) {
-// super.onError(response);
-//
-// }
-// });
-// }
-//
-// synchronized public static void getAllAppPackageName(final Handler handler) {
-// OkGo.post(UrlAddress.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) {
-//
-// }
-// }
-//
-// @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(UrlAddress.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,com.jiaoguanyi.pager2,com.android.uiuios";
-// 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);
-// } else {
-// Settings.System.putString(context.getContentResolver(), "qch_app_forbid", "com.info.sn,com.android.uiuios,com.appstore.uiui,com.uiuios.updatetools,com.jiaoguanyi.pager2,com.android.uiuios");
-//
-// }
-// } catch (Exception e) {
-// Log.e("getAllAppPackageName", e.getMessage());
-// }
-// }
-//
-// @Override
-// public void onError(Response response) {
-// super.onError(response);
-// Log.e("getAllAppPackageName", response.getException().getMessage());
-// }
-// });
-// }
-//
-//
-// public static void setBrowser(final Context context) {
-// OkGo.post(UrlAddress.SET_BROWSER_URL)
-// .params("sn", Utils.getSerial())
-// .execute(new StringCallback() {
-// @Override
-// public void onSuccess(Response response) {
-// try {
-// JSONObject jsonObject = JSON.parseObject(response.body());
-// int code = jsonObject.getInteger("code");
-// String msg = jsonObject.getString("msg");
-// if (code == 200) {
-// JSONObject data = JSON.parseObject(jsonObject.getString("data"));
-// 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);
-// } 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);
-// } else {
-// Settings.System.putString(context.getContentResolver(), "qch_webblack_url", " ");
-// }
-// } else {
-// Log.e("fht", "setBrowserList" + msg);
-// }
-// } catch (JSONException e) {
-// Log.e("fht", "setBrowserList" + e.getMessage());
-//
-// }
-// }
-// });
-// }
-//
-// public static void get_settings(final Context context) {
-// OkGo.get(UrlAddress.GET_SETTINGS)
-// .params("sn", Utils.getSerial())
-// .execute(new StringCallback() {
-// @Override
-// public void onSuccess(Response response) {
-// JSONObject jsonObject = JSON.parseObject(response.body());
-// int code = jsonObject.getInteger("code");
-// if (code == 200) {
-// String data = jsonObject.getString("data");
-// Utils.setSystemSetting(context, data);
-// }
-// }
-//
-// @Override
-// public void onError(Response response) {
-// super.onError(response);
-// }
-// });
-// }
-//
-//
-//
-// public static void get_forceinstall(Context context) {
-// OkGo.get(UrlAddress.GET_FORCE_INSTALL)
-// .params("sn", Utils.getSerial())
-// .execute(new StringCallback() {
-// @Override
-// public void onSuccess(Response response) {
-//
-// }
-//
-// @Override
-// public void onError(Response response) {
-// super.onError(response);
-// }
-// });
-// }
+ @Override
+ public void onNext(BaseResponse response) {
+ Log.e("sendAppUsed", "onNext: ");
+ Log.e("sendAppUsed", "onNext: " + JSONObject.toJSONString(response));
+ }
+ @Override
+ public void onError(Throwable e) {
+ Log.e("sendAppUsed", "onError: " + e.getMessage());
+ }
+
+ @Override
+ public void onComplete() {
+ Log.e("sendAppUsed", "onComplete: ");
+ }
+ });
+ }
+
+ public static void sendRunningApp(Context context) {
+ String packageName = ApkUtils.getTaskPackname(context);
+ long time = 0;
+ StatisticsInfo statisticsInfo = new StatisticsInfo(context, 1);
+ List datalist = statisticsInfo.getShowList();
+ for (AppInformation information : datalist) {
+ if (packageName.equals(information.getPackageName())) {
+ time = information.getUsedTimebyDay();
+ }
+ }
+ JsonObject jsonObject = new JsonObject();
+ jsonObject.addProperty("app_package", packageName);
+ jsonObject.addProperty("version_name", ApkUtils.getAPPVersionName(context, packageName));
+ jsonObject.addProperty("start_time", time / 1000);
+ String jsonString = jsonObject.toString();
+ Log.e(TAG, "sendRunningApp: " + jsonString);
+ NetInterfaceManager.getInstance().getRunningAppObservable(jsonString)
+ .subscribe(new Observer() {
+ @Override
+ public void onSubscribe(Disposable d) {
+ Log.e("sendRunningApp", "onSubscribe: ");
+ }
+
+ @Override
+ public void onNext(BaseResponse baseResponse) {
+ Log.e("sendRunningApp", "onNext: " + baseResponse.msg);
+ }
+
+ @Override
+ public void onError(Throwable e) {
+ Log.e("sendRunningApp", "onError: " + e.getMessage());
+ }
+
+ @Override
+ public void onComplete() {
+ Log.e("sendRunningApp", "onComplete: ");
+ }
+ });
+ }
+
+ public static void getAppInside() {
+ NetInterfaceManager.getInstance().getAppInsideControl()
+ .subscribe(new Observer() {
+ @Override
+ public void onSubscribe(Disposable d) {
+ Log.e("getAppInside", "onSubscribe: ");
+ }
+
+ @Override
+ public void onNext(BaseResponse baseResponse) {
+ String jsonString = JSON.toJSONString(baseResponse.data);
+ Log.e("getAppInside", "onNext: " + jsonString);
+ if (baseResponse.code == 200) {
+ JSONObject jsonObject = JSON.parseObject(jsonString);
+ String ids = jsonObject.getString("ids");
+ String packages = jsonObject.getString("package");
+ JGYUtils.getInstance().writeDeselectIDtoSystem(ids, packages);
+ } else {
+ Log.e("getAppInside", "onNext: " + baseResponse.msg);
+ }
+ }
+
+ @Override
+ public void onError(Throwable e) {
+ Log.e("getAppInside", "onError: " + e.getMessage());
+ }
+
+ @Override
+ public void onComplete() {
+ Log.e("getAppInside", "onComplete: ");
+ }
+ });
+ }
+
+ private static List factoryApp = new ArrayList() {{
+ this.add("com.gankao.gkwxhd");
+ this.add("com.jiaoguanyi.os");
+ }};
+
+ public static void getAPPinfo(Context context) {
+ Observable.create((ObservableOnSubscribe>) emitter -> {
+ PackageManager pm = context.getPackageManager();
+ List list = pm.getInstalledPackages(0);
+ List uploadInfos = new ArrayList<>();
+ Intent intent = new Intent(Intent.ACTION_MAIN);
+ intent.addCategory(Intent.CATEGORY_LAUNCHER);
+ List appsWithLauncher = pm.queryIntentActivities(intent, 0);
+ HashSet pkgs = new HashSet<>();
+ for (ResolveInfo info : appsWithLauncher) {
+ pkgs.add(info.activityInfo.packageName);
+ }
+ Log.e(TAG, "getAPPinfo: " + pkgs);
+ for (PackageInfo info : list) {
+ if (!pkgs.contains(info.packageName)) {
+ continue;
+ }
+// if (((info.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) == 1) && !factoryApp.contains(info.packageName)) {
+// continue;
+// }
+ AppUploadInfo uploadInfo = new AppUploadInfo();
+ uploadInfo.setApp_package(info.packageName);
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
+ uploadInfo.setApp_version_code(info.getLongVersionCode());
+ } else {
+ uploadInfo.setApp_version_code(info.versionCode);
+ }
+ uploadInfos.add(uploadInfo);
+ }
+ emitter.onNext(uploadInfos);
+ })
+ .subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribe(new Observer>() {
+ @Override
+ public void onSubscribe(Disposable d) {
+ Log.e("getAPPinfo", "onSubscribe: ");
+ }
+
+ @Override
+ public void onNext(List appUploadInfos) {
+ String json = JSONArray.toJSONString(appUploadInfos);
+ Log.e("getAPPinfo", "onNext: " + json);
+ HTTPInterface.SendAppInstall(json);
+ }
+
+ @Override
+ public void onError(Throwable e) {
+ Log.e("getAPPinfo", "onError: " + e.getMessage());
+ }
+
+ @Override
+ public void onComplete() {
+ Log.e("getAPPinfo", "onComplete: ");
+ }
+ });
+ }
}
diff --git a/app/src/main/java/com/info/sn/network/NetWorkManager.java b/app/src/main/java/com/info/sn/network/NetWorkManager.java
deleted file mode 100644
index ea7ad6a..0000000
--- a/app/src/main/java/com/info/sn/network/NetWorkManager.java
+++ /dev/null
@@ -1,268 +0,0 @@
-package com.info.sn.network;
-
-import android.os.Environment;
-
-import com.info.sn.network.api.APPJump;
-import com.info.sn.network.api.AddAppInstall;
-import com.info.sn.network.api.Applog;
-import com.info.sn.network.api.BindDevices;
-import com.info.sn.network.api.Browser;
-import com.info.sn.network.api.ForceInstall;
-import com.info.sn.network.api.Label;
-import com.info.sn.network.api.NewestAppUpdate;
-import com.info.sn.network.api.QueryAllApp;
-import com.info.sn.network.api.QuerySnAppStart;
-import com.info.sn.network.api.SNInfo;
-import com.info.sn.network.api.ScreenLock;
-import com.info.sn.network.api.Setting;
-import com.info.sn.network.api.TimeControl;
-import com.info.sn.network.api.UpdateAdminSn;
-import com.info.sn.network.api.UploadScreenshot;
-
-import java.io.File;
-import java.util.concurrent.TimeUnit;
-
-import okhttp3.Cache;
-import okhttp3.OkHttpClient;
-import retrofit2.CallAdapter;
-import retrofit2.Converter;
-import retrofit2.Retrofit;
-import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory;
-import retrofit2.converter.gson.GsonConverterFactory;
-
-public class NetWorkManager {
-
- private static final String ROOT_URL = UrlAddress.ROOT_URL;
-
- private static final long cacheSize = 1024 * 1024 * 20;// 缓存文件最大限制大小20M
- private static String cacheDirectory = Environment.getExternalStorageDirectory() + "/okttpcaches"; // 设置缓存文件路径
- private static Cache cache = new Cache(new File(cacheDirectory), cacheSize); //
- private static final OkHttpClient client;
-
- static {
- //如果无法生存缓存文件目录,检测权限使用已经加上,检测手机是否把文件读写权限禁止了
- OkHttpClient.Builder builder = new OkHttpClient.Builder();
- builder.connectTimeout(8, TimeUnit.SECONDS); // 设置连接超时时间
- builder.writeTimeout(8, TimeUnit.SECONDS);// 设置写入超时时间
- builder.readTimeout(8, TimeUnit.SECONDS);// 设置读取数据超时时间
- builder.retryOnConnectionFailure(true);// 设置进行连接失败重试
- builder.cache(cache);// 设置缓存
- client = builder.build();
- }
-
- private static CallAdapter.Factory rxJavaCallAdapterFactory = RxJava2CallAdapterFactory.create();
- private static Converter.Factory gsonConverterFactory = GsonConverterFactory.create();
-
- private static SNInfo snInfoControl;
- private static Applog applogControl;
- private static Setting settingControl;
- private static ForceInstall forceInstallControl;
- private static BindDevices bindDevicesControl;
- private static AddAppInstall addAppInstallControl;
- private static Browser browserControl;
- private static Label labelControl;
- private static QuerySnAppStart appStartControl;
- private static APPJump appJumpControl;
- private static UpdateAdminSn updateAdminSnControl;
- private static QueryAllApp queryAllAppControl;
- private static NewestAppUpdate newestAppUpdateControl;
- private static UploadScreenshot uploadScreenshotControl;
- private static ScreenLock getScreenLockControl;
- private static TimeControl getTimeControl;
-
-
- public static SNInfo getsnInfoControl() {
- if (null == snInfoControl) {
- Retrofit retrofit = new Retrofit.Builder()
- .client(client)
- .baseUrl(ROOT_URL)
- .addConverterFactory(gsonConverterFactory)
- .addCallAdapterFactory(rxJavaCallAdapterFactory)
- .build();
- snInfoControl = retrofit.create(SNInfo.class);
- }
- return snInfoControl;
- }
-
- public static Setting getsettingControl() {
- if (null == settingControl) {
- Retrofit retrofit = new Retrofit.Builder()
- .client(client)
- .baseUrl(ROOT_URL)
- .addConverterFactory(gsonConverterFactory)
- .addCallAdapterFactory(rxJavaCallAdapterFactory)
- .build();
- settingControl = retrofit.create(Setting.class);
- }
- return settingControl;
- }
-
- public static ForceInstall getForceInstallControl() {
- if (null == forceInstallControl) {
- Retrofit retrofit = new Retrofit.Builder()
- .client(client)
- .baseUrl(ROOT_URL)
- .addConverterFactory(gsonConverterFactory)
- .addCallAdapterFactory(rxJavaCallAdapterFactory)
- .build();
- forceInstallControl = retrofit.create(ForceInstall.class);
- }
- return forceInstallControl;
- }
-
-
- public static BindDevices getbindDevicesControl() {
- if (null == bindDevicesControl) {
- Retrofit retrofit = new Retrofit.Builder()
- .client(client)
- .baseUrl(ROOT_URL)
- .addConverterFactory(gsonConverterFactory)
- .addCallAdapterFactory(rxJavaCallAdapterFactory)
- .build();
- bindDevicesControl = retrofit.create(BindDevices.class);
- }
- return bindDevicesControl;
- }
-
- public static AddAppInstall getAddAppInstallControl() {
- if (null == addAppInstallControl) {
- Retrofit retrofit = new Retrofit.Builder()
- .client(client)
- .baseUrl(ROOT_URL)
- .addConverterFactory(gsonConverterFactory)
- .addCallAdapterFactory(rxJavaCallAdapterFactory)
- .build();
- addAppInstallControl = retrofit.create(AddAppInstall.class);
- }
- return addAppInstallControl;
- }
-
- public static Browser getBrowserControl() {
- if (null == browserControl) {
- Retrofit retrofit = new Retrofit.Builder()
- .client(client)
- .baseUrl(ROOT_URL)
- .addConverterFactory(gsonConverterFactory)
- .addCallAdapterFactory(rxJavaCallAdapterFactory)
- .build();
- browserControl = retrofit.create(Browser.class);
- }
- return browserControl;
- }
-
- public static Label getLabelControl() {
- if (null == labelControl) {
- Retrofit retrofit = new Retrofit.Builder()
- .client(client)
- .baseUrl(ROOT_URL)
- .addConverterFactory(gsonConverterFactory)
- .addCallAdapterFactory(rxJavaCallAdapterFactory)
- .build();
- labelControl = retrofit.create(Label.class);
- }
- return labelControl;
- }
-
- public static QuerySnAppStart getAppStartControl() {
- if (null == appStartControl) {
- Retrofit retrofit = new Retrofit.Builder()
- .client(client)
- .baseUrl(ROOT_URL)
- .addConverterFactory(gsonConverterFactory)
- .addCallAdapterFactory(rxJavaCallAdapterFactory)
- .build();
- appStartControl = retrofit.create(QuerySnAppStart.class);
- }
- return appStartControl;
- }
-
- public static APPJump getAppJumpControl() {
- if (null == appJumpControl) {
- Retrofit retrofit = new Retrofit.Builder()
- .client(client)
- .baseUrl(ROOT_URL)
- .addConverterFactory(gsonConverterFactory)
- .addCallAdapterFactory(rxJavaCallAdapterFactory)
- .build();
- appJumpControl = retrofit.create(APPJump.class);
- }
- return appJumpControl;
- }
-
- public static UpdateAdminSn getUpdateAdminSnControl() {
- if (null == updateAdminSnControl) {
- Retrofit retrofit = new Retrofit.Builder()
- .client(client)
- .baseUrl(ROOT_URL)
- .addConverterFactory(gsonConverterFactory)
- .addCallAdapterFactory(rxJavaCallAdapterFactory)
- .build();
- updateAdminSnControl = retrofit.create(UpdateAdminSn.class);
- }
- return updateAdminSnControl;
- }
- public static QueryAllApp getQueryAllAppControl() {
- if (null == queryAllAppControl) {
- Retrofit retrofit = new Retrofit.Builder()
- .client(client)
- .baseUrl(ROOT_URL)
- .addConverterFactory(gsonConverterFactory)
- .addCallAdapterFactory(rxJavaCallAdapterFactory)
- .build();
- queryAllAppControl = retrofit.create(QueryAllApp.class);
- }
- return queryAllAppControl;
- }
-
- public static NewestAppUpdate getNewestAppUpdateControl() {
- if (null == newestAppUpdateControl) {
- Retrofit retrofit = new Retrofit.Builder()
- .client(client)
- .baseUrl(ROOT_URL)
- .addConverterFactory(gsonConverterFactory)
- .addCallAdapterFactory(rxJavaCallAdapterFactory)
- .build();
- newestAppUpdateControl = retrofit.create(NewestAppUpdate.class);
- }
- return newestAppUpdateControl;
- }
-
- public static UploadScreenshot getUploadScreenshotControl() {
- if (null == uploadScreenshotControl) {
- Retrofit retrofit = new Retrofit.Builder()
- .client(client)
- .baseUrl(ROOT_URL)
- .addConverterFactory(gsonConverterFactory)
- .addCallAdapterFactory(rxJavaCallAdapterFactory)
- .build();
- uploadScreenshotControl = retrofit.create(UploadScreenshot.class);
- }
- return uploadScreenshotControl;
- }
-
- public static ScreenLock getScreenLockControl() {
- if (null == getScreenLockControl) {
- Retrofit retrofit = new Retrofit.Builder()
- .client(client)
- .baseUrl(ROOT_URL)
- .addConverterFactory(gsonConverterFactory)
- .addCallAdapterFactory(rxJavaCallAdapterFactory)
- .build();
- getScreenLockControl = retrofit.create(ScreenLock.class);
- }
- return getScreenLockControl;
- }
- public static TimeControl getTimeControl() {
- if (null == getTimeControl) {
- Retrofit retrofit = new Retrofit.Builder()
- .client(client)
- .baseUrl(ROOT_URL)
- .addConverterFactory(gsonConverterFactory)
- .addCallAdapterFactory(rxJavaCallAdapterFactory)
- .build();
- getTimeControl = retrofit.create(TimeControl.class);
- }
- return getTimeControl;
- }
-
-}
diff --git a/app/src/main/java/com/info/sn/network/UrlAddress.java b/app/src/main/java/com/info/sn/network/UrlAddress.java
index f1a2f8f..7e7c0db 100644
--- a/app/src/main/java/com/info/sn/network/UrlAddress.java
+++ b/app/src/main/java/com/info/sn/network/UrlAddress.java
@@ -1,44 +1,69 @@
package com.info.sn.network;
public class UrlAddress {
- public static final String ROOT_URL = "http://homework.uiuios.com/android/";
//主页接口
- public static final String SNINFO = ROOT_URL + "sn/getSnInfo";
+ public static final String ROOT_URL = "http://homework.uiuios.com/android/";
//设备信息接口
+ public static final String SNINFO = ROOT_URL + "sn/getSnInfo";
+ //发送app信息
public static final String APPLOG = ROOT_URL + "App/getApplog";
-
- public final static String GET_APP_UPDATE = ROOT_URL + "Update/update";
+ //获取正在运行的app
+ public static final String RUN_NEW_APP = "app/runNewApp";
//根据包名获取更新
- public final static String SEND_RUNINGAPPINFO = ROOT_URL + "Monitoring/getAppNow";
+ public final static String GET_APP_UPDATE = ROOT_URL + "Update/update";
//获取当前最顶层应用和电量
+ public final static String SEND_RUNINGAPPINFO = ROOT_URL + "Monitoring/getAppNow";
+ //在线状态
public final static String SEND_DRIVE_STATE = ROOT_URL + "Online/online";
-
- public final static String GET_ALL_PACKAGE = ROOT_URL + "app/queryAllApp";
//获取所有应用
- public final static String BIND_DEVICES = ROOT_URL + "sn/bindSn";
+ public final static String GET_ALL_PACKAGE = ROOT_URL + "app/queryAllApp";
//绑定设备消息
- public final static String GET_SETTINGS = ROOT_URL + "control/getSetting";
+ public final static String BIND_DEVICES = ROOT_URL + "sn/bindSn";
//获取系统设置
- public final static String SET_BROWSER_URL = ROOT_URL + "control/getBrowser";
+ public final static String GET_SETTINGS = ROOT_URL + "control/getSetting";
//浏览器网址管控
- public final static String SET_BROWSER_Label = ROOT_URL + "control/getLabel";
+ public final static String SET_BROWSER_URL = ROOT_URL + "control/getBrowser";
//浏览器书签管控
- public final static String GET_FORCE_INSTALL = ROOT_URL + "app/getForceDownload";
+ public final static String SET_BROWSER_Label = ROOT_URL + "control/getLabel";
//获取强制下载
- public final static String GET_APP_START = ROOT_URL + "sn/querySnAppStart";
+ public final static String GET_FORCE_INSTALL = ROOT_URL + "app/getForceDownload";
//获取app管控
+ public final static String GET_APP_START = ROOT_URL + "sn/querySnAppStart";
+ //发app跳转管控
public final static String GET_APP_JUMP = ROOT_URL + "sn/querySnJump";
//发app跳转管控
+ public final static String QUERY_APP_INSIDE = ROOT_URL + "control/queryAppInside";
+ //发送卸载或者安装信息
public final static String SEND_INSTALLEDORREMOVED = ROOT_URL + "app/addAppInstall";
//发送卸载或者安装信息
public final static String UPDATE_SNINFO = ROOT_URL + "sn/updateAdminSn";
- //发送卸载或者安装信息
- public final static String GET_NEWESTAPPUPDATE = ROOT_URL + "app/newestAppUpdate";
//根据包名获取更新
- public final static String UPLOAD_SCREEN_SNAPSHOT = ROOT_URL + "sn/uploadScreenshot";
+ public final static String GET_NEWESTAPPUPDATE = ROOT_URL + "app/newestAppUpdate";
//上传屏幕截图
- public final static String GET_SCREEN_LOCK = ROOT_URL + "sn/getScreenshot";
+ public final static String UPLOAD_SCREEN_SNAPSHOT = ROOT_URL + "sn/uploadScreenshot";
//获取屏幕管控
- public final static String GET_TIME_CONTROL = ROOT_URL + "sn/getTimeControl";
+ public final static String GET_SCREEN_LOCK = ROOT_URL + "sn/getScreenshot";
//获取时间管控
+ public final static String GET_TIME_CONTROL = ROOT_URL + "sn/getTimeControl";
+ //获取用户头像和信息
+ public static final String GET_USER_AVATAR_INFO = "sn/getUserAvatarInfo";
+ //上传设备赶考的UID
+ public static final String POST_USER_SAVESNUID = "sn/saveSnUid";
+ //获取app使用信息
+ public static final String UPLOAD_APP_USE_INFO = "sn/uploadAppUseInfo";
+ //获取小程序二维码
+ public static final String GET_APPLET_QRCODE = "file/getAppletQrCode";
+
+
+
+
+ //赶考
+ public static final String GANKAN_ROOT_URL = "https://www.gankao.com/api/service/";
+ //创建/查询用户
+ public static final String CREATE_USER = "createUser";
+ //用户授权/激活权限
+ public static final String ACTIVE_USER = "activeUser";
+ //获得可用的权限产品规格
+ public static final String QUERY_AVAILABLE_PRODUCT_SPECIFICATIONS = "queryAvailableProductSpecifications";
+
}
diff --git a/app/src/main/java/com/info/sn/network/api/APPJump.java b/app/src/main/java/com/info/sn/network/api/APPJump.java
index 6692afd..5d81b40 100644
--- a/app/src/main/java/com/info/sn/network/api/APPJump.java
+++ b/app/src/main/java/com/info/sn/network/api/APPJump.java
@@ -1,7 +1,7 @@
package com.info.sn.network.api;
-import com.info.sn.bean.AppJump;
-import com.info.sn.bean.BaseResponse;
+import com.info.sn.bean.zuoye.AppJump;
+import com.info.sn.bean.zuoye.BaseResponse;
import com.info.sn.network.UrlAddress;
import java.util.List;
diff --git a/app/src/main/java/com/info/sn/network/api/ActiveUserApi.java b/app/src/main/java/com/info/sn/network/api/ActiveUserApi.java
new file mode 100644
index 0000000..7f957bc
--- /dev/null
+++ b/app/src/main/java/com/info/sn/network/api/ActiveUserApi.java
@@ -0,0 +1,20 @@
+package com.info.sn.network.api;
+
+import com.info.sn.bean.gankao.GankaoBaseResponse;
+import com.info.sn.network.UrlAddress;
+
+import io.reactivex.Observable;
+import retrofit2.http.GET;
+import retrofit2.http.Query;
+
+public interface ActiveUserApi {
+ @GET(UrlAddress
+ .ACTIVE_USER)
+ Observable activeUser(
+ @Query("app_id") String app_id,
+ @Query("timestamp") String timestamp,
+ @Query("token") String token,
+ @Query("uid") String uid,
+ @Query("specification_id") int specification_id
+ );
+}
diff --git a/app/src/main/java/com/info/sn/network/api/AddAppInstall.java b/app/src/main/java/com/info/sn/network/api/AddAppInstall.java
index 3060ed8..1f94337 100644
--- a/app/src/main/java/com/info/sn/network/api/AddAppInstall.java
+++ b/app/src/main/java/com/info/sn/network/api/AddAppInstall.java
@@ -1,6 +1,6 @@
package com.info.sn.network.api;
-import com.info.sn.bean.BaseResponse;
+import com.info.sn.bean.zuoye.BaseResponse;
import com.info.sn.network.UrlAddress;
import io.reactivex.Observable;
@@ -15,5 +15,4 @@ public interface AddAppInstall {
@Field("sn") String sn,
@Field("app") String jsonString
);
-
}
diff --git a/app/src/main/java/com/info/sn/network/api/AppUsedApi.java b/app/src/main/java/com/info/sn/network/api/AppUsedApi.java
new file mode 100644
index 0000000..c2c189a
--- /dev/null
+++ b/app/src/main/java/com/info/sn/network/api/AppUsedApi.java
@@ -0,0 +1,18 @@
+package com.info.sn.network.api;
+
+import com.info.sn.bean.zuoye.BaseResponse;
+import com.info.sn.network.UrlAddress;
+
+import io.reactivex.Observable;
+import retrofit2.http.Field;
+import retrofit2.http.FormUrlEncoded;
+import retrofit2.http.POST;
+
+public interface AppUsedApi {
+ @FormUrlEncoded
+ @POST(UrlAddress.UPLOAD_APP_USE_INFO)
+ Observable getAppUsed(
+ @Field("sn") String sn,
+ @Field("appInfo") String appinfo
+ );
+}
diff --git a/app/src/main/java/com/info/sn/network/api/Applog.java b/app/src/main/java/com/info/sn/network/api/Applog.java
index 25f120c..1e9c5c0 100644
--- a/app/src/main/java/com/info/sn/network/api/Applog.java
+++ b/app/src/main/java/com/info/sn/network/api/Applog.java
@@ -1,9 +1,8 @@
package com.info.sn.network.api;
-import com.info.sn.bean.BaseResponse;
+import com.info.sn.bean.zuoye.BaseResponse;
import com.info.sn.network.UrlAddress;
-
import io.reactivex.Observable;
import retrofit2.http.GET;
import retrofit2.http.Query;
diff --git a/app/src/main/java/com/info/sn/network/api/BindDevices.java b/app/src/main/java/com/info/sn/network/api/BindDevices.java
index ac7143b..0fc1b41 100644
--- a/app/src/main/java/com/info/sn/network/api/BindDevices.java
+++ b/app/src/main/java/com/info/sn/network/api/BindDevices.java
@@ -1,6 +1,6 @@
package com.info.sn.network.api;
-import com.info.sn.bean.BaseResponse;
+import com.info.sn.bean.zuoye.BaseResponse;
import com.info.sn.network.UrlAddress;
import io.reactivex.Observable;
diff --git a/app/src/main/java/com/info/sn/network/api/Browser.java b/app/src/main/java/com/info/sn/network/api/Browser.java
index 6559a6a..8d18b89 100644
--- a/app/src/main/java/com/info/sn/network/api/Browser.java
+++ b/app/src/main/java/com/info/sn/network/api/Browser.java
@@ -1,6 +1,6 @@
package com.info.sn.network.api;
-import com.info.sn.bean.BaseResponse;
+import com.info.sn.bean.zuoye.BaseResponse;
import com.info.sn.network.UrlAddress;
import io.reactivex.Observable;
diff --git a/app/src/main/java/com/info/sn/network/api/Label.java b/app/src/main/java/com/info/sn/network/api/BrowserLabel.java
similarity index 69%
rename from app/src/main/java/com/info/sn/network/api/Label.java
rename to app/src/main/java/com/info/sn/network/api/BrowserLabel.java
index 1b95244..dd4bd04 100644
--- a/app/src/main/java/com/info/sn/network/api/Label.java
+++ b/app/src/main/java/com/info/sn/network/api/BrowserLabel.java
@@ -1,19 +1,15 @@
package com.info.sn.network.api;
-import com.info.sn.bean.BaseResponse;
-import com.info.sn.bean.BrowserLabel;
+import com.info.sn.bean.zuoye.BaseResponse;
import com.info.sn.network.UrlAddress;
-import java.util.List;
-
import io.reactivex.Observable;
import retrofit2.http.GET;
import retrofit2.http.Query;
-public interface Label {
+public interface BrowserLabel {
@GET(UrlAddress.SET_BROWSER_Label)
Observable getLabel(
@Query("sn") String sn
);
-
}
diff --git a/app/src/main/java/com/info/sn/network/api/CreateUserApi.java b/app/src/main/java/com/info/sn/network/api/CreateUserApi.java
new file mode 100644
index 0000000..b2b2613
--- /dev/null
+++ b/app/src/main/java/com/info/sn/network/api/CreateUserApi.java
@@ -0,0 +1,18 @@
+package com.info.sn.network.api;
+
+import com.info.sn.bean.gankao.GankaoBaseResponse;
+import com.info.sn.network.UrlAddress;
+
+import io.reactivex.Observable;
+import retrofit2.http.GET;
+import retrofit2.http.Query;
+
+public interface CreateUserApi {
+ @GET(UrlAddress.CREATE_USER)
+ Observable createUser(
+ @Query("app_id") String app_id,
+ @Query("timestamp") String timestamp,
+ @Query("uid") String uid,
+ @Query("token") String token
+ );
+}
diff --git a/app/src/main/java/com/info/sn/network/api/ForceInstall.java b/app/src/main/java/com/info/sn/network/api/ForceInstall.java
index 4cded8a..781a037 100644
--- a/app/src/main/java/com/info/sn/network/api/ForceInstall.java
+++ b/app/src/main/java/com/info/sn/network/api/ForceInstall.java
@@ -1,7 +1,7 @@
package com.info.sn.network.api;
-import com.info.sn.bean.AppInfo;
-import com.info.sn.bean.BaseResponse;
+import com.info.sn.bean.zuoye.AppInfo;
+import com.info.sn.bean.zuoye.BaseResponse;
import com.info.sn.network.UrlAddress;
import java.util.List;
@@ -13,7 +13,6 @@ import retrofit2.http.Query;
public interface ForceInstall {
@GET(UrlAddress.GET_FORCE_INSTALL)
Observable>> getForceInstall(
- @Query("sn") String sn
+ @Query("sn")String sn
);
-
}
diff --git a/app/src/main/java/com/info/sn/network/api/NewestAppUpdate.java b/app/src/main/java/com/info/sn/network/api/NewestAppUpdate.java
deleted file mode 100644
index f770c32..0000000
--- a/app/src/main/java/com/info/sn/network/api/NewestAppUpdate.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package com.info.sn.network.api;
-
-
-import com.info.sn.bean.AppInfo;
-import com.info.sn.bean.BaseResponse;
-import com.info.sn.network.UrlAddress;
-
-import io.reactivex.Observable;
-import retrofit2.Response;
-import retrofit2.http.GET;
-import retrofit2.http.Query;
-
-public interface NewestAppUpdate {
- @GET(UrlAddress.GET_NEWESTAPPUPDATE)
- Observable> getAppUpdate(
- @Query("packageName") String packageName,
- @Query("versionCode") String versionCode,
- @Query("type") int type
- );
-}
diff --git a/app/src/main/java/com/info/sn/network/api/NewestAppUpdate.kt b/app/src/main/java/com/info/sn/network/api/NewestAppUpdate.kt
new file mode 100644
index 0000000..adb555a
--- /dev/null
+++ b/app/src/main/java/com/info/sn/network/api/NewestAppUpdate.kt
@@ -0,0 +1,17 @@
+package com.info.sn.network.api
+
+import com.info.sn.bean.zuoye.AppInfo
+import com.info.sn.bean.zuoye.BaseResponse
+import com.info.sn.network.UrlAddress
+import io.reactivex.Observable
+import retrofit2.http.GET
+import retrofit2.http.Query
+
+interface NewestAppUpdate {
+ @GET(UrlAddress.GET_NEWESTAPPUPDATE)
+ fun getAppUpdate(
+ @Query("packageName") packageName: String?,
+ @Query("versionCode") versionCode: String?,
+ @Query("type") type: Int
+ ): Observable?>?
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/info/sn/network/api/QRCodeApi.java b/app/src/main/java/com/info/sn/network/api/QRCodeApi.java
new file mode 100644
index 0000000..ccf2e9c
--- /dev/null
+++ b/app/src/main/java/com/info/sn/network/api/QRCodeApi.java
@@ -0,0 +1,12 @@
+package com.info.sn.network.api;
+
+import com.info.sn.bean.zuoye.BaseResponse;
+import com.info.sn.network.UrlAddress;
+
+import io.reactivex.Observable;
+import retrofit2.http.GET;
+
+public interface QRCodeApi {
+ @GET(UrlAddress.GET_APPLET_QRCODE)
+ Observable getQRCodeApi();
+}
diff --git a/app/src/main/java/com/info/sn/network/api/QueryAllApp.java b/app/src/main/java/com/info/sn/network/api/QueryAllApp.java
deleted file mode 100644
index 07a4ec6..0000000
--- a/app/src/main/java/com/info/sn/network/api/QueryAllApp.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package com.info.sn.network.api;
-
-import com.info.sn.bean.AppInfo;
-import com.info.sn.bean.BaseResponse;
-import com.info.sn.network.UrlAddress;
-
-import java.util.List;
-
-import io.reactivex.Observable;
-import retrofit2.http.GET;
-import retrofit2.http.Query;
-
-public interface QueryAllApp {
- @GET(UrlAddress.GET_ALL_PACKAGE)
- Observable>> getAllApp(
- @Query("sn") String sn
- );
-}
diff --git a/app/src/main/java/com/info/sn/network/api/QueryAllApp.kt b/app/src/main/java/com/info/sn/network/api/QueryAllApp.kt
new file mode 100644
index 0000000..976bb24
--- /dev/null
+++ b/app/src/main/java/com/info/sn/network/api/QueryAllApp.kt
@@ -0,0 +1,15 @@
+package com.info.sn.network.api
+
+import com.info.sn.bean.zuoye.AppInfo
+import com.info.sn.bean.zuoye.BaseResponse
+import com.info.sn.network.UrlAddress
+import io.reactivex.Observable
+import retrofit2.http.GET
+import retrofit2.http.Query
+
+interface QueryAllApp {
+ @GET(UrlAddress.GET_ALL_PACKAGE)
+ fun getAllApp(
+ @Query("sn") sn: String?
+ ): Observable?>?>?
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/info/sn/network/api/QueryAppInside.java b/app/src/main/java/com/info/sn/network/api/QueryAppInside.java
new file mode 100644
index 0000000..056df51
--- /dev/null
+++ b/app/src/main/java/com/info/sn/network/api/QueryAppInside.java
@@ -0,0 +1,15 @@
+package com.info.sn.network.api;
+
+import com.info.sn.bean.zuoye.BaseResponse;
+import com.info.sn.network.UrlAddress;
+
+import io.reactivex.Observable;
+import retrofit2.http.GET;
+import retrofit2.http.Query;
+
+public interface QueryAppInside {
+ @GET(UrlAddress.QUERY_APP_INSIDE)
+ Observable getAppInside(
+ @Query("sn") String sn
+ );
+}
diff --git a/app/src/main/java/com/info/sn/network/api/QueryProductApi.java b/app/src/main/java/com/info/sn/network/api/QueryProductApi.java
new file mode 100644
index 0000000..1c7d1ee
--- /dev/null
+++ b/app/src/main/java/com/info/sn/network/api/QueryProductApi.java
@@ -0,0 +1,17 @@
+package com.info.sn.network.api;
+
+import com.info.sn.bean.gankao.GankaoBaseResponse;
+import com.info.sn.network.UrlAddress;
+
+import io.reactivex.Observable;
+import retrofit2.http.GET;
+import retrofit2.http.Query;
+
+public interface QueryProductApi {
+ @GET(UrlAddress.QUERY_AVAILABLE_PRODUCT_SPECIFICATIONS)
+ Observable activeUser(
+ @Query("app_id") String app_id,
+ @Query("timestamp") String timestamp,
+ @Query("token") String token
+ );
+}
diff --git a/app/src/main/java/com/info/sn/network/api/QuerySnAppStart.java b/app/src/main/java/com/info/sn/network/api/QuerySnAppStart.java
index 5b46c8e..14f3e12 100644
--- a/app/src/main/java/com/info/sn/network/api/QuerySnAppStart.java
+++ b/app/src/main/java/com/info/sn/network/api/QuerySnAppStart.java
@@ -1,7 +1,7 @@
package com.info.sn.network.api;
-import com.info.sn.bean.AppStart;
-import com.info.sn.bean.BaseResponse;
+import com.info.sn.bean.zuoye.AppStart;
+import com.info.sn.bean.zuoye.BaseResponse;
import com.info.sn.network.UrlAddress;
import java.util.List;
@@ -12,7 +12,8 @@ import retrofit2.http.Query;
public interface QuerySnAppStart {
@GET(UrlAddress.GET_APP_START)
- Observable>> getAppStatu(
+ Observable>>
+ getAppStatu(
@Query("sn") String sn
);
}
diff --git a/app/src/main/java/com/info/sn/network/api/RunningApp.java b/app/src/main/java/com/info/sn/network/api/RunningApp.java
new file mode 100644
index 0000000..f80f62a
--- /dev/null
+++ b/app/src/main/java/com/info/sn/network/api/RunningApp.java
@@ -0,0 +1,19 @@
+package com.info.sn.network.api;
+
+
+import com.info.sn.bean.zuoye.BaseResponse;
+import com.info.sn.network.UrlAddress;
+
+import io.reactivex.Observable;
+import retrofit2.http.Field;
+import retrofit2.http.FormUrlEncoded;
+import retrofit2.http.POST;
+
+public interface RunningApp {
+ @FormUrlEncoded
+ @POST(UrlAddress.RUN_NEW_APP)
+ Observable sendAppInfo(
+ @Field("sn") String sn,
+ @Field("app") String app
+ );
+}
diff --git a/app/src/main/java/com/info/sn/network/api/SNInfo.java b/app/src/main/java/com/info/sn/network/api/SNInfoApi.java
similarity index 71%
rename from app/src/main/java/com/info/sn/network/api/SNInfo.java
rename to app/src/main/java/com/info/sn/network/api/SNInfoApi.java
index 5d03f30..bb7f87d 100644
--- a/app/src/main/java/com/info/sn/network/api/SNInfo.java
+++ b/app/src/main/java/com/info/sn/network/api/SNInfoApi.java
@@ -1,14 +1,14 @@
package com.info.sn.network.api;
-import com.info.sn.bean.BaseResponse;
-import com.info.sn.bean.UserInfo;
+import com.info.sn.bean.zuoye.BaseResponse;
+import com.info.sn.bean.zuoye.UserInfo;
import com.info.sn.network.UrlAddress;
import io.reactivex.Observable;
import retrofit2.http.GET;
import retrofit2.http.Query;
-public interface SNInfo {
+public interface SNInfoApi {
@GET(UrlAddress.SNINFO)
Observable> getsninfo(
@Query("sn") String sn
diff --git a/app/src/main/java/com/info/sn/network/api/SaveSnUidApi.java b/app/src/main/java/com/info/sn/network/api/SaveSnUidApi.java
new file mode 100644
index 0000000..c990880
--- /dev/null
+++ b/app/src/main/java/com/info/sn/network/api/SaveSnUidApi.java
@@ -0,0 +1,18 @@
+package com.info.sn.network.api;
+
+import com.info.sn.bean.zuoye.Response;
+import com.info.sn.network.UrlAddress;
+
+import io.reactivex.Observable;
+import retrofit2.http.Field;
+import retrofit2.http.FormUrlEncoded;
+import retrofit2.http.POST;
+
+public interface SaveSnUidApi {
+ @FormUrlEncoded
+ @POST(UrlAddress.POST_USER_SAVESNUID)
+ Observable saveSnUid(
+ @Field("sn") String sn,
+ @Field("uid") String uid
+ );
+}
diff --git a/app/src/main/java/com/info/sn/network/api/ScreenLock.java b/app/src/main/java/com/info/sn/network/api/ScreenLock.java
index 7c92b7f..9656520 100644
--- a/app/src/main/java/com/info/sn/network/api/ScreenLock.java
+++ b/app/src/main/java/com/info/sn/network/api/ScreenLock.java
@@ -1,6 +1,6 @@
package com.info.sn.network.api;
-import com.info.sn.bean.BaseResponse;
+import com.info.sn.bean.zuoye.BaseResponse;
import com.info.sn.network.UrlAddress;
import io.reactivex.Observable;
@@ -10,6 +10,6 @@ import retrofit2.http.Query;
public interface ScreenLock {
@GET(UrlAddress.GET_SCREEN_LOCK)
Observable getScreenshot(
- @Query("sn") String sn
+ @Query("sn")String sn
);
}
diff --git a/app/src/main/java/com/info/sn/network/api/ScreenState.java b/app/src/main/java/com/info/sn/network/api/ScreenState.java
new file mode 100644
index 0000000..952d22f
--- /dev/null
+++ b/app/src/main/java/com/info/sn/network/api/ScreenState.java
@@ -0,0 +1,18 @@
+package com.info.sn.network.api;
+
+import com.info.sn.BuildConfig;
+import com.info.sn.bean.zuoye.BaseResponse;
+
+import io.reactivex.Observable;
+import retrofit2.http.Field;
+import retrofit2.http.FormUrlEncoded;
+import retrofit2.http.POST;
+
+public interface ScreenState {
+ @FormUrlEncoded
+ @POST(BuildConfig.SCREEN_URL)
+ Observable setScreenState(
+ @Field("sn")String sn ,
+ @Field("online") int stateCode
+ );
+}
diff --git a/app/src/main/java/com/info/sn/network/api/Setting.java b/app/src/main/java/com/info/sn/network/api/Setting.java
index a910b33..3aa75a1 100644
--- a/app/src/main/java/com/info/sn/network/api/Setting.java
+++ b/app/src/main/java/com/info/sn/network/api/Setting.java
@@ -1,7 +1,6 @@
package com.info.sn.network.api;
-import com.info.sn.bean.BaseResponse;
-import com.info.sn.bean.SystemSettings;
+import com.info.sn.bean.zuoye.BaseResponse;
import com.info.sn.network.UrlAddress;
import io.reactivex.Observable;
@@ -10,7 +9,7 @@ import retrofit2.http.Query;
public interface Setting {
@GET(UrlAddress.GET_SETTINGS)
- Observable> getSetting(
+ Observable getSetting(
@Query("sn") String sn
);
}
diff --git a/app/src/main/java/com/info/sn/network/api/SettingKT.kt b/app/src/main/java/com/info/sn/network/api/SettingKT.kt
new file mode 100644
index 0000000..455b4ae
--- /dev/null
+++ b/app/src/main/java/com/info/sn/network/api/SettingKT.kt
@@ -0,0 +1,15 @@
+package com.info.sn.network.api
+
+import com.info.sn.bean.zuoye.BaseResponse
+import com.info.sn.bean.zuoye.SystemSettings
+import com.info.sn.network.UrlAddress
+import io.reactivex.Observable
+import retrofit2.http.GET
+import retrofit2.http.Query
+
+interface SettingKT {
+ @GET(UrlAddress.GET_SETTINGS)
+ fun getSetting(
+ @Query("sn") sn: String
+ ): Observable>
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/info/sn/network/api/TimeControl.java b/app/src/main/java/com/info/sn/network/api/TimeControl.java
index d677c5b..a6e9b35 100644
--- a/app/src/main/java/com/info/sn/network/api/TimeControl.java
+++ b/app/src/main/java/com/info/sn/network/api/TimeControl.java
@@ -1,6 +1,6 @@
package com.info.sn.network.api;
-import com.info.sn.bean.BaseResponse;
+import com.info.sn.bean.zuoye.BaseResponse;
import com.info.sn.network.UrlAddress;
import io.reactivex.Observable;
@@ -9,7 +9,8 @@ import retrofit2.http.Query;
public interface TimeControl {
@GET(UrlAddress.GET_TIME_CONTROL)
- Observable getTimeControl(
+ Observable
+ getTimeControl(
@Query("sn") String sn
);
}
diff --git a/app/src/main/java/com/info/sn/network/api/UpdateAdminSn.java b/app/src/main/java/com/info/sn/network/api/UpdateAdminSn.java
index ec0a1c8..255ca2c 100644
--- a/app/src/main/java/com/info/sn/network/api/UpdateAdminSn.java
+++ b/app/src/main/java/com/info/sn/network/api/UpdateAdminSn.java
@@ -1,6 +1,6 @@
package com.info.sn.network.api;
-import com.info.sn.bean.BaseResponse;
+import com.info.sn.bean.zuoye.BaseResponse;
import com.info.sn.network.UrlAddress;
import io.reactivex.Observable;
@@ -12,10 +12,9 @@ public interface UpdateAdminSn {
@FormUrlEncoded
@POST(UrlAddress.UPDATE_SNINFO)
Observable sendAdminSn(
- @Field("sn")String sn,
- @Field("address")String address,
- @Field("machine")String machine,
- @Field("hardware")String hardware
+ @Field("sn") String sn,
+ @Field("address") String address,
+ @Field("machine") String machine,
+ @Field("hardware") String hardware
);
-
}
diff --git a/app/src/main/java/com/info/sn/network/api/UploadScreenshot.java b/app/src/main/java/com/info/sn/network/api/UploadScreenshot.java
index 2ceaea8..d372a9e 100644
--- a/app/src/main/java/com/info/sn/network/api/UploadScreenshot.java
+++ b/app/src/main/java/com/info/sn/network/api/UploadScreenshot.java
@@ -1,12 +1,10 @@
package com.info.sn.network.api;
-import com.info.sn.bean.BaseResponse;
+import com.info.sn.bean.zuoye.BaseResponse;
import com.info.sn.network.UrlAddress;
import io.reactivex.Observable;
import okhttp3.MultipartBody;
-import retrofit2.http.Field;
-import retrofit2.http.FormUrlEncoded;
import retrofit2.http.Multipart;
import retrofit2.http.POST;
import retrofit2.http.Part;
@@ -18,5 +16,5 @@ public interface UploadScreenshot {
Observable uploadScreenshot(
@Query("sn") String sn,
@Part MultipartBody.Part file
- );
+ ) ;
}
diff --git a/app/src/main/java/com/info/sn/network/api/UserInfoApi.java b/app/src/main/java/com/info/sn/network/api/UserInfoApi.java
new file mode 100644
index 0000000..9f05cac
--- /dev/null
+++ b/app/src/main/java/com/info/sn/network/api/UserInfoApi.java
@@ -0,0 +1,18 @@
+package com.info.sn.network.api;
+
+import com.info.sn.bean.zuoye.BaseResponse;
+import com.info.sn.bean.zuoye.UserAvatarInfo;
+import com.info.sn.network.UrlAddress;
+
+import io.reactivex.Observable;
+import retrofit2.http.Field;
+import retrofit2.http.FormUrlEncoded;
+import retrofit2.http.POST;
+
+public interface UserInfoApi {
+ @FormUrlEncoded
+ @POST(UrlAddress.GET_USER_AVATAR_INFO)
+ Observable> getUserAvatarInfo(
+ @Field("sn") String sn
+ );
+}
diff --git a/app/src/main/java/com/info/sn/network/api/UserInfoControl.java b/app/src/main/java/com/info/sn/network/api/UserInfoControl.java
new file mode 100644
index 0000000..59bbcad
--- /dev/null
+++ b/app/src/main/java/com/info/sn/network/api/UserInfoControl.java
@@ -0,0 +1,18 @@
+package com.info.sn.network.api;
+
+import com.info.sn.bean.zuoye.BaseResponse;
+import com.info.sn.bean.zuoye.UserAvatarInfo;
+import com.info.sn.network.UrlAddress;
+
+import io.reactivex.Observable;
+import retrofit2.http.Field;
+import retrofit2.http.FormUrlEncoded;
+import retrofit2.http.POST;
+
+public interface UserInfoControl {
+ @FormUrlEncoded
+ @POST(UrlAddress.GET_USER_AVATAR_INFO)
+ Observable> getUserAvatarInfo(
+ @Field("sn") String sn
+ );
+}
diff --git a/app/src/main/java/com/info/sn/receiver/APKinstallReceiver.java b/app/src/main/java/com/info/sn/receiver/APKinstallReceiver.java
index 827dabc..b63fdcf 100644
--- a/app/src/main/java/com/info/sn/receiver/APKinstallReceiver.java
+++ b/app/src/main/java/com/info/sn/receiver/APKinstallReceiver.java
@@ -1,22 +1,27 @@
package com.info.sn.receiver;
+import android.annotation.SuppressLint;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
+import android.content.pm.ResolveInfo;
import android.os.Build;
+import android.text.TextUtils;
import android.util.Log;
-import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
-import com.info.sn.bean.AppUploadInfo;
+import com.info.sn.bean.zuoye.AppUploadInfo;
import com.info.sn.network.HTTPInterface;
import com.info.sn.utils.ApkUtils;
+import com.info.sn.utils.CacheUtils;
+import com.info.sn.utils.JGYUtils;
import java.util.ArrayList;
import java.util.List;
+import java.util.concurrent.TimeUnit;
import io.reactivex.Observable;
import io.reactivex.ObservableEmitter;
@@ -27,65 +32,89 @@ import io.reactivex.disposables.Disposable;
import io.reactivex.schedulers.Schedulers;
public class APKinstallReceiver extends BroadcastReceiver {
+ private static String TAG = APKinstallReceiver.class.getSimpleName();
+ @SuppressLint("StaticFieldLeak")
+ private static Context mContext;
+ private static NewAppListener newAppListener;
- private String TAG = APKinstallReceiver.class.getSimpleName();
+ static {
+ sendAppInfo();
+ }
@Override
public void onReceive(final Context context, Intent intent) {
+ mContext = context;
// TODO: This method is called when the BroadcastReceiver is receiving
// an Intent broadcast.
String action = intent.getAction();
- if (action.equals(Intent.ACTION_PACKAGE_ADDED)
- || action.equals(Intent.ACTION_PACKAGE_REPLACED)
- || action.equals(Intent.ACTION_PACKAGE_REMOVED)) {
- String packageName = intent.getDataString().replace("package:", "");
- Observable.create(new ObservableOnSubscribe>() {
- @Override
- public void subscribe(ObservableEmitter> emitter) throws Exception {
- PackageManager pm = context.getPackageManager();
- List list = pm.getInstalledPackages(0);
- List uploadInfos = new ArrayList<>();
- for (PackageInfo info : list) {
- if ((info.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) == 1) {
- continue;
- }
- AppUploadInfo uploadInfo = new AppUploadInfo();
- uploadInfo.setApp_package(info.packageName);
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
- uploadInfo.setApp_version_code(info.getLongVersionCode());
- } else {
- uploadInfo.setApp_version_code(info.versionCode);
- }
- uploadInfos.add(uploadInfo);
- }
- emitter.onNext(uploadInfos);
- }
- })
- .subscribeOn(Schedulers.io())
- .observeOn(AndroidSchedulers.mainThread())
- .subscribe(new Observer>() {
- @Override
- public void onSubscribe(Disposable d) {
+ ApkUtils.addShortcut(context);
+ JGYUtils.getInstance().cleanLauncherCache();
+ Log.e(TAG, "onReceive: " + "action = " + action);
+ String state;
+ if (TextUtils.isEmpty(action)) {
+ Log.e(TAG, "onReceive: " + "action is empty ");
+ return;
+ }
+ String packageName = intent.getDataString().replace("package:", "");
+ switch (action) {
+ case Intent.ACTION_PACKAGE_ADDED:
+ state = "安装了:";
+ break;
+ case Intent.ACTION_PACKAGE_REPLACED:
+ cleanLauncher3Cache();
+ state = "重装了:";
+ break;
+ case Intent.ACTION_PACKAGE_REMOVED:
+ state = "卸载了:";
+ break;
+ default:
+ state = "未知:";
+ break;
+ }
+ Log.e(TAG, "sendAppInfo: " + state + packageName);
+ newAppListener.setNewAppListener(packageName);
- }
+ }
- @Override
- public void onNext(List appUploadInfos) {
- String json = JSONArray.toJSONString(appUploadInfos);
- Log.e(TAG, "onNext: " + json);
- HTTPInterface.SendAppInstall(json);
- }
-
- @Override
- public void onError(Throwable e) {
-
- }
-
- @Override
- public void onComplete() {
-
- }
- });
+ private void cleanLauncher3Cache() {
+ try {
+ new CacheUtils().cleanApplicationUserData(mContext, "com.android.launcher3");
+ } catch (Exception e) {
+ Log.e(TAG, "onReceive: " + e.getMessage());
+ e.printStackTrace();
}
}
+
+
+ public interface NewAppListener {
+ void setNewAppListener(String packageName);
+ }
+
+ private static void sendAppInfo() {
+ Observable.create((ObservableEmitter emitter) -> newAppListener = emitter::onNext)
+ .throttleLast(5, TimeUnit.SECONDS)
+ .subscribe(new Observer() {
+ @Override
+ public void onSubscribe(Disposable d) {
+
+ }
+
+ @Override
+ public void onNext(String s) {
+ HTTPInterface.getAPPinfo(mContext);
+ HTTPInterface.getForceInstall(mContext);
+ HTTPInterface.getAllappPackage(mContext);
+ }
+
+ @Override
+ public void onError(Throwable e) {
+
+ }
+
+ @Override
+ public void onComplete() {
+ Log.e(TAG, "onComplete: ");
+ }
+ });
+ }
}
diff --git a/app/src/main/java/com/info/sn/receiver/BootReceiver.java b/app/src/main/java/com/info/sn/receiver/BootReceiver.java
index 6709da3..b1d2a01 100644
--- a/app/src/main/java/com/info/sn/receiver/BootReceiver.java
+++ b/app/src/main/java/com/info/sn/receiver/BootReceiver.java
@@ -6,9 +6,9 @@ import android.content.Intent;
import android.util.Log;
import com.info.sn.service.GuardService;
-import com.info.sn.service.InitJpushServer;
+import com.info.sn.service.MainService;
+import com.info.sn.service.ManagerService;
import com.info.sn.service.MyDownloadService;
-import com.info.sn.service.ScreenLockService;
import com.info.sn.service.StepService;
@@ -32,12 +32,11 @@ public class BootReceiver extends BroadcastReceiver {
) {
// Intent i = new Intent(context, InitJpushServer.class);
// context.startService(i);
+ context.startService(new Intent(context, MainService.class));
context.startService(new Intent(context, GuardService.class));
context.startService(new Intent(context, StepService.class));
- context.startService(new Intent(context, InitJpushServer.class));
context.startService(new Intent(context, MyDownloadService.class));
- context.startService(new Intent(context, ScreenLockService.class));
-
+ context.startService(new Intent(context, ManagerService.class));
}
}
}
diff --git a/app/src/main/java/com/info/sn/receiver/MyJPushReceiver.java b/app/src/main/java/com/info/sn/receiver/MyJPushReceiver.java
new file mode 100644
index 0000000..9d459cb
--- /dev/null
+++ b/app/src/main/java/com/info/sn/receiver/MyJPushReceiver.java
@@ -0,0 +1,920 @@
+package com.info.sn.receiver;
+
+import android.annotation.SuppressLint;
+import android.bluetooth.BluetoothAdapter;
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.content.pm.PackageManager;
+import android.os.Bundle;
+import android.os.CountDownTimer;
+import android.os.Environment;
+import android.os.Handler;
+import android.text.TextUtils;
+import android.util.Log;
+import android.view.Gravity;
+import android.view.WindowManager;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.arialyy.aria.core.Aria;
+import com.arialyy.aria.core.download.DownloadEntity;
+import com.info.sn.bean.zuoye.BaseResponse;
+import com.info.sn.jpush.Logger;
+import com.info.sn.manager.ControlManager;
+import com.info.sn.network.HTTPInterface;
+import com.info.sn.manager.NetInterfaceManager;
+import com.info.sn.network.api.BindDevices;
+import com.info.sn.network.api.UploadScreenshot;
+import com.info.sn.service.ManagerService;
+import com.info.sn.utils.ApkUtils;
+import com.info.sn.utils.CacheUtils;
+import com.info.sn.utils.CmdUtil;
+import com.info.sn.manager.DeviceManager;
+import com.info.sn.utils.JGYUtils;
+import com.info.sn.utils.SPUtils;
+import com.info.sn.utils.ServiceAliveUtils;
+import com.info.sn.utils.ToastUtil;
+import com.info.sn.utils.Utils;
+import com.info.sn.dialog.CustomDialog;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.List;
+
+import cn.jpush.android.api.JPushInterface;
+import io.reactivex.Observable;
+import io.reactivex.ObservableEmitter;
+import io.reactivex.ObservableOnSubscribe;
+import io.reactivex.Observer;
+import io.reactivex.android.schedulers.AndroidSchedulers;
+import io.reactivex.annotations.NonNull;
+import io.reactivex.disposables.Disposable;
+import io.reactivex.schedulers.Schedulers;
+import okhttp3.MediaType;
+import okhttp3.MultipartBody;
+import okhttp3.RequestBody;
+
+/**
+ * 自定义接收器
+ *
+ * 如果不定义这个 Receiver,则:
+ * 1) 默认用户会打开主界面
+ * 2) 接收不到自定义消息
+ */
+public class MyJPushReceiver extends BroadcastReceiver {
+ private static final String TAG = "MyJPushReceiver";
+
+ //定义接收极光推送消息的类型。
+ //1.获取设备在线信息
+ private static final String JIGUANG_GET_DRIVELINE = "1";
+ // 2.获取当前正在运行得应用和电量
+ private static final String JIGUANG_GET_STARTTIME = "2";
+ // 3.数据线传输管控
+ private static final String JIGUANG_USB_STATE = "3";
+ // 4.TF卡管控
+ private static final String JIGUANG_TFCARD_STATE = "4";
+ // 5.蓝牙管控
+ private static final String JIGUANG_BLUETOOTH_STATE = "5";
+ // 6.浏览器上网管控
+ private static final String JIGUANG_BROWSER_URLPATH = "6";
+ // 7.应用联网管控
+ private static final String JIGUANG_APP_NETWORKSTATE = "7";
+ // 8.应用锁管控
+ private static final String JIGUANG_APP_LOCKEDSTATE = "8";
+ // 9.强制安装应用
+ private static final String JIGUANG_FORCE_INSTALLAPK = "9";
+ // 10.强制卸载应用
+ private static final String JIGUANG_FORCE_UNINSTALLAPK = "10";
+ // 11.绑定设备
+ private static final String JIGUANG_BIND_DEVIVES = "11";
+ //12.影音格式管控
+ private static final String JIGUANG_TFMEDIA = "12";
+ //13.摄像头管控
+ private static final String JIGUANG_CAMRERA = "13";
+ //14.电话管控管控
+ private static final String JIGUANG_PHONE = "14";
+ //15.禁止升级
+ private static final String JIGUANG_DISABLE_UPDATAE = "15";
+ //16.app内部网址管控
+ private static final String JIGUANG_APP_WEBSITE = "16";
+ //设备恢复出厂设置
+ private static final String JIGUANG_RESET_DEVICES = "17";
+ //浏览器书签
+ private static final String JIGUANG_BROWSER_LABEL = "18";
+ //APP联网自启管控
+ private static final String JIGUANG_APP_NET_AUTO = "19";
+ //系统管控
+ private static final String JIGUANG_SYSTEM_SETTING = "21";
+ //重启
+ private static final String JIGUANG_REBOOT_DEVICES = "22";
+ //获取app管控设置
+ private static final String JIGUANG_APP_SETTING = "23";
+ //强制停止应用
+ private static final String JIGUANG_FORCE_KILL = "24";
+ //锁屏
+ private static final String JIGUANG_LOCK_SCREEN = "25";
+ //截图
+ private static final String JIGUANG_SNAPSHOT = "26";
+ //时间管控
+ private static final String JIGUANG_TIME_CONTROL = "27";
+ //热点管控
+ private static final String JIGUANG_HOTSPOT_CONTROL = "29";
+ //禁止恢复出厂设置
+ private static final String JIGUANG_RESTORE_CONTROL = "30";
+ //浏览器禁止输入
+ private static final String JIGUANG_BROWSER_CONTROL = "32";
+ //开发人员选项
+ private static final String JIGUANG_DEVELOPER_CONTROL = "33";
+ //清除应用缓存
+ private static final String JIGUANG_CLEAN_APP_CACHE = "34";
+ //几个桌面图标
+ private static final String JIGUANG_APP_RECORDER = "35";
+ private static final String JIGUANG_APP_FILE_MANAGER = "36";
+ private static final String JIGUANG_APP_GALLERY = "37";
+ private static final String JIGUANG_APP_MUSIC = "38";
+ //搜题开关
+ private static final String JIGUANG_SEARCH_TOPIC = "39";
+ //电话白名单推送
+ private static final String JIGUANG_PHONE_LIST = "49";
+
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ Bundle bundle = intent.getExtras();
+ if (JPushInterface.ACTION_REGISTRATION_ID.equals(intent.getAction())) {
+ String regId = bundle.getString(JPushInterface.EXTRA_REGISTRATION_ID);
+ Logger.d(TAG, "[MyJPushReceiver] 接收Registration Id : " + regId);
+ //send the Registration Id to your server...
+ } else if (JPushInterface.ACTION_MESSAGE_RECEIVED.equals(intent.getAction())) {
+ Logger.e(TAG, "[MyJPushReceiver] 接收到推送下来的自定义消息: " + bundle.getString(JPushInterface.EXTRA_MESSAGE));
+ processCustomMessage(context, bundle);
+ } else if (JPushInterface.ACTION_NOTIFICATION_RECEIVED.equals(intent.getAction())) {
+ Logger.d(TAG, "[MyJPushReceiver] 接收到推送下来的通知");
+ int notifactionId = bundle.getInt(JPushInterface.EXTRA_NOTIFICATION_ID);
+ Logger.d(TAG, "[MyJPushReceiver] 接收到推送下来的通知的ID: " + notifactionId);
+ } else if (JPushInterface.ACTION_NOTIFICATION_OPENED.equals(intent.getAction())) {
+// Logger.d(TAG, "[MyJPushReceiver] 用户点击打开了通知");
+// //打开自定义的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, "[MyJPushReceiver] 用户收到到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, "[MyJPushReceiver]" + intent.getAction() + " connected state change to " + connected);
+ } else {
+ Logger.d(TAG, "[MyJPushReceiver] Unhandled intent - " + intent.getAction());
+ }
+ }
+
+ //send msg to MainActivityOld
+ private void processCustomMessage(Context context, Bundle bundle) {
+ String message = bundle.getString(JPushInterface.EXTRA_MESSAGE);
+ 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);
+ Log.e(TAG, "processCustomMessage: " + message);
+ switch (message) {
+ case JIGUANG_GET_DRIVELINE:
+ ToastUtil.debugShow("收到推送消息: 获取在线信息");
+// HTTPInterface.getDriveState(member_id, sn_id);
+ break;
+ case JIGUANG_GET_STARTTIME:
+ ToastUtil.debugShow("收到推送消息: 获取运行应用");
+ sendStartTime(context, extras);
+ break;
+ case JIGUANG_USB_STATE:
+ ToastUtil.debugShow("收到推送消息: USB连接模式管控");
+ setUsbState(context, extras);
+ break;
+ case JIGUANG_TFCARD_STATE:
+ ToastUtil.debugShow("收到推送消息: TF卡管控");
+ setTfcardState(context, extras);
+ break;
+ case JIGUANG_BLUETOOTH_STATE:
+ ToastUtil.debugShow("收到推送消息: 蓝牙管控");
+ setBluetoothState(context, extras);
+ break;
+ case JIGUANG_BROWSER_URLPATH:
+ ToastUtil.debugShow("收到推送消息: 浏览器上网管控");
+// setBrowserUrlpath(context, extras);
+ try {
+ new CacheUtils().cleanApplicationUserData(context, "com.android.browser");
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ HTTPInterface.getBrowserWhiteList(context);
+ HTTPInterface.getBrowserLabel(context);
+ break;
+ case JIGUANG_APP_NETWORKSTATE:
+ ToastUtil.debugShow("收到推送消息: 应用联网管控");
+ setAppNetworkstate(context, extras);
+ HTTPInterface.getAppInside();
+ break;
+ case JIGUANG_APP_LOCKEDSTATE:
+ ToastUtil.debugShow("收到推送消息: 应用锁管控");
+ setAppLockedstate(context, extras);
+ break;
+ case JIGUANG_FORCE_INSTALLAPK:
+ ToastUtil.debugShow("收到推送消息: 强制安装应用");
+ HTTPInterface.getAllappPackage(context);
+ HTTPInterface.getForceInstall(context);
+ intallApk(context, extras);
+ break;
+ case JIGUANG_FORCE_UNINSTALLAPK:
+ ToastUtil.debugShow("收到推送消息: 强制卸载应用");
+ unintallApk(context, extras);
+ break;
+ case JIGUANG_BIND_DEVIVES:
+ ToastUtil.debugShow("收到推送消息: 绑定设备");
+ bindService(context, extras);
+ break;
+ case JIGUANG_TFMEDIA:
+ ToastUtil.debugShow("收到推送消息: 影音格式管控");
+ setTFmedia(context, extras);
+ break;
+ case JIGUANG_CAMRERA:
+ ToastUtil.debugShow("收到推送消息: 摄像头管控");
+ setCameta(context, extras);
+ break;
+ case JIGUANG_PHONE:
+ ToastUtil.debugShow("收到推送消息: 电话管控");
+ setPhone(context, extras);
+ break;
+ case JIGUANG_DISABLE_UPDATAE:
+ ToastUtil.debugShow("收到推送消息: 禁止升级");
+ setAppUpdate(context, extras);
+ break;
+ case JIGUANG_APP_WEBSITE:
+ ToastUtil.debugShow("收到推送消息: app内部网址管控");
+// HTTPInterface.getAppJump(context);
+ break;
+ case JIGUANG_REBOOT_DEVICES:
+ ToastUtil.debugShow("收到推送消息: 重启");
+ DeviceManager.rebootDevices();
+ break;
+ case JIGUANG_APP_NET_AUTO:
+ ToastUtil.debugShow("收到推送消息: APP联网自启管控");
+ Handler.getMain().postDelayed(new Runnable() {
+ @Override
+ public void run() {
+ HTTPInterface.getAllappPackage(context);
+ }
+ }, 2000);
+ break;
+ case JIGUANG_BROWSER_LABEL:
+ try {
+ new CacheUtils().cleanApplicationUserData(context, "com.android.browser");
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ ToastUtil.debugShow("收到推送消息: 浏览器书签");
+ HTTPInterface.getBrowserWhiteList(context);
+ HTTPInterface.getBrowserLabel(context);
+ break;
+ case JIGUANG_SYSTEM_SETTING:
+ ToastUtil.debugShow("收到推送消息: 系统管控");
+ ControlManager.getInstance().setSystemSetting(context, extras);
+ break;
+ case JIGUANG_RESET_DEVICES:
+ ToastUtil.debugShow("收到推送消息: 设备恢复出厂设置");
+ DeviceManager.doMasterClear();
+ break;
+ case JIGUANG_APP_SETTING:
+ ToastUtil.debugShow("收到推送消息: 获取app管控设置");
+ Handler.getMain().postDelayed(new Runnable() {
+ @Override
+ public void run() {
+ HTTPInterface.getAllappPackage(context);
+ }
+ }, 2000);
+ break;
+ case JIGUANG_FORCE_KILL:
+ ToastUtil.debugShow("收到推送消息: 强制停止应用");
+ JSONObject killJSONObject = JSON.parseObject(extras);
+ String packages = killJSONObject.getString("app_package");
+ JGYUtils.getInstance().killBackgroundProcesses(context, packages);
+ Log.e(TAG, extras);
+ break;
+ case JIGUANG_LOCK_SCREEN:
+ ToastUtil.debugShow("收到推送消息: 锁屏");
+ setLock_screen(context, extras);
+ Log.e(TAG, extras);
+ break;
+ case JIGUANG_SNAPSHOT:
+ ToastUtil.debugShow("收到推送消息: 截图");
+ doscreenshot(context);
+ Log.e(TAG, extras);
+ break;
+ case JIGUANG_TIME_CONTROL:
+ ToastUtil.debugShow("收到推送消息: 时间管控");
+ timeControl(context, extras);
+ break;
+ case JIGUANG_HOTSPOT_CONTROL:
+ ToastUtil.debugShow("收到推送消息: 热点管控");
+ setHotspot(context, extras);
+ break;
+ case JIGUANG_RESTORE_CONTROL:
+ ToastUtil.debugShow("收到推送消息: 恢复出厂设置管控");
+ setRestore(context, extras);
+ break;
+ case JIGUANG_BROWSER_CONTROL:
+ ToastUtil.debugShow("收到推送消息: 浏览器禁止输入");
+ setBrowserInput(context, extras);
+ break;
+ case JIGUANG_DEVELOPER_CONTROL:
+ ToastUtil.debugShow("收到推送消息: 开发人员选项");
+ ControlManager.getInstance().setDeveloperOptions(context, extras);
+ break;
+ case JIGUANG_CLEAN_APP_CACHE:
+ ToastUtil.debugShow("收到推送消息: 清除应用缓存");
+ cleanAppCache(context, extras);
+ break;
+ case JIGUANG_APP_RECORDER:
+ case JIGUANG_APP_FILE_MANAGER:
+ case JIGUANG_APP_GALLERY:
+ case JIGUANG_APP_MUSIC:
+ ToastUtil.debugShow("收到推送消息: 系统APP管控");
+ hideDesktopIcon(context);
+ break;
+ case JIGUANG_SEARCH_TOPIC:
+ ToastUtil.debugShow("收到推送消息: 搜题开关");
+ searchTopic(context, extras);
+ break;
+ case JIGUANG_PHONE_LIST:
+ ToastUtil.debugShow("收到推送消息: 电话白名单管控");
+ setPhone(context, extras);
+ break;
+ default:
+ break;
+ }
+ }
+
+ private int changeNum(int paramInt) {
+ return paramInt == 1 ? 0 : 1;
+ }
+
+ synchronized private void sendStartTime(Context context, String jsonString) {
+ HTTPInterface.updateAdminInfo(context);
+ HTTPInterface.sendRunningApp(context);
+ HTTPInterface.sendAppUsed(context);
+ }
+
+ synchronized private void setUsbState(Context context, String jsonString) {
+ if (!TextUtils.isEmpty(jsonString)) {
+ JSONObject jsonObject = JSON.parseObject(jsonString);
+ String setting_usb = jsonObject.getString("setting_usb");
+ boolean qch_usb_choose = JGYUtils.putString(context.getContentResolver(), "qch_usb_choose", setting_usb);
+ Log.e("setUsbState:", JGYUtils.getString(context.getContentResolver(), "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;
+ default:
+ usbStatus = "qch_action_usb_usb_charge";
+ break;
+ }
+ Intent usbIntent = new Intent(usbStatus).setPackage("com.android.settings");
+ context.sendBroadcast(usbIntent);
+ } else {
+ ToastUtil.debugShow("setUsbState jsonString is NULL");
+ }
+ }
+
+ synchronized private void setTfcardState(Context context, String jsonString) {
+ if (!TextUtils.isEmpty(jsonString)) {
+ JSONObject extra = JSON.parseObject(jsonString);
+ int is_tf = extra.getInteger("setting_memory");
+ boolean qch_sdcard_forbid_on = JGYUtils.putInt(context.getContentResolver(), "qch_sdcard_forbid_on", changeNum(is_tf));
+ if (qch_sdcard_forbid_on) {
+ Log.e("setTfcardState:", JGYUtils.getString(context.getContentResolver(), "qch_sdcard_forbid_on"));
+ } else {
+ ToastUtil.debugShow("setTfcardState failed,state:" + is_tf);
+ }
+ } else {
+ ToastUtil.debugShow("setTfcardState jsonString is NULL");
+ }
+ }
+
+ private BluetoothAdapter mBluetoothAdapter;
+
+ synchronized private void setBluetoothState(Context context, String jsonString) {
+ if (!TextUtils.isEmpty(jsonString)) {
+ if (null == mBluetoothAdapter) {
+ mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();//获取默认蓝牙适配器
+ }
+ JSONObject extra = JSON.parseObject(jsonString);
+ int is_bluetooth = changeNum(extra.getInteger("setting_bluetooth"));
+ Log.e(TAG, "qch_bht_forbid_on:" + is_bluetooth);
+ try {
+ //写入系统数据库
+ boolean qch_bht_forbid_on = JGYUtils.putInt(context.getContentResolver(), "qch_bht_forbid_on", is_bluetooth);
+ Log.e(TAG, "qch_bht_forbid_on:" + qch_bht_forbid_on);
+ BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
+ if (qch_bht_forbid_on) {
+ //成功
+ if (null == mBluetoothAdapter) {
+ mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
+ //获取默认蓝牙适配器
+ }
+ //蓝牙总开关开启
+ JGYUtils.putString(context.getContentResolver(), "qch_bhtvideo_forbid_on", "Empty");
+ JGYUtils.putInt(context.getContentResolver(), "qch_bt_forbid_on", is_bluetooth);
+ //设置关闭时关闭蓝牙
+ mBluetoothAdapter.disable();
+ }
+ } catch (Exception e) {
+ Log.e(TAG, "setBluetooth: " + e.getMessage());
+ }
+ } else {
+ ToastUtil.debugShow("setBluetoothState jsonString is NULL");
+ }
+ }
+
+ synchronized private void setAppNetworkstate(Context context, String jsonString) {
+ if (!TextUtils.isEmpty(jsonString)) {
+ JSONObject extra = JSON.parseObject(jsonString);
+ String package0 = extra.getString("package0");
+ String package1 = extra.getString("package1");
+ if (package0.length() != 0) {
+ boolean qch_jgy_network_allow = JGYUtils.putString(context.getContentResolver(), "qch_jgy_network_allow", package0);
+ Log.e("fht", "qch_jgy_network_allow::" + qch_jgy_network_allow + ":" + JGYUtils.getString(context.getContentResolver(), "qch_jgy_network_allow"));
+ } else {
+ boolean qch_jgy_network_allow = JGYUtils.putString(context.getContentResolver(), "qch_jgy_network_allow", "invalid");
+ Log.e("fht", "qch_jgy_network_allow::" + qch_jgy_network_allow + ":" + JGYUtils.getString(context.getContentResolver(), "qch_jgy_network_allow"));
+ }
+ if (package1.length() != 0) {
+ boolean qch_jgy_network_disallow = JGYUtils.putString(context.getContentResolver(), "qch_jgy_network_disallow", package1);
+ Log.e("fht", "qch_jgy_network_disallow::" + qch_jgy_network_disallow + ":" + JGYUtils.getString(context.getContentResolver(), "qch_jgy_network_disallow"));
+ } else {
+ boolean qch_jgy_network_disallow = JGYUtils.putString(context.getContentResolver(), "qch_jgy_network_disallow", "invalid");
+ Log.e("fht", "qch_jgy_network_disallow::" + qch_jgy_network_disallow + ":" + JGYUtils.getString(context.getContentResolver(), "qch_jgy_network_disallow"));
+ }
+ } else {
+ ToastUtil.debugShow("setAppNetworkstate jsonString is NULL");
+ }
+ }
+
+ synchronized private void setAppLockedstate(Context context, String jsonString) {
+ if (!TextUtils.isEmpty(jsonString)) {
+ JSONObject extra = JSON.parseObject(jsonString);
+ String packageName = extra.getString("package");
+ int is_lock = extra.getInteger("is_lock");
+ ToastUtil.debugShow("收到应用锁管控消息:包名" + packageName + "is_lock_state:" + is_lock);
+ PackageManager pm = context.getPackageManager();
+ //后台为0可能传过来null
+ if (is_lock == 1) {
+ pm.setApplicationEnabledSetting(packageName, PackageManager.COMPONENT_ENABLED_STATE_DISABLED, 0);
+ } else {
+ pm.setApplicationEnabledSetting(packageName, PackageManager.COMPONENT_ENABLED_STATE_DEFAULT, 0);
+ }
+ } else {
+ ToastUtil.debugShow("setAppLockedstate jsonString is NULL");
+ }
+ }
+
+ //静默安装应用,使用okgo,断网会出现问题,等待修改使用aria
+ synchronized private void intallApk(Context context, String jsonString) {
+ if (TextUtils.isEmpty(jsonString)) {
+ return;
+ }
+// HTTPInterface.getAllAppPackageName(context);
+ JSONObject extra = JSON.parseObject(jsonString);
+ final String packages = extra.getString("package");
+ ToastUtil.debugShow("收到应用安装消息:包名" + packages);
+ String url = extra.getString("url");
+ if (TextUtils.isEmpty(url)) {
+ return;
+ }
+ if (Aria.download(this).taskExists(url)) {
+
+ List entity = Aria.download(this).getDownloadEntity(url);
+ for (DownloadEntity downloadEntity : entity) {
+ Aria.download(this).load(downloadEntity.getId()).cancel(true);
+ }
+ }
+ File file = new File(Environment.getExternalStoragePublicDirectory("Download") + "/Sninfo/apk");
+ file.mkdirs();
+ Aria.download(this)
+ .load(url)
+ .setFilePath(file.getAbsolutePath() + "/" + packages + ".apk")
+ .ignoreFilePathOccupy()
+ .setExtendField(packages).create();
+ Aria.download(this).resumeAllTask();
+
+ }
+
+ synchronized private void unintallApk(Context context, String jsonString) {
+ int sn_id = (int) SPUtils.get(context, "sn_id", -1);
+ JSONObject object = JSON.parseObject(jsonString);
+ String packageName = object.getString("app_package");
+ ToastUtil.debugShow("收到应用卸载消息:包名" + packageName);
+ if (!packageName.equals("") && !packageName.equals(context.getApplicationContext().getPackageName())) {
+ if (!ApkUtils.isAvailable(context.getApplicationContext(), packageName)) {
+// HTTPInterface.setAppuninstallInfo(sn_id, packageName);
+ } else {
+ ApkUtils.uninstallApp(context, packageName);
+ }
+ }
+ }
+
+ synchronized void bindService(final Context context, String jsonString) {
+ ToastUtil.debugShow("收到绑定设备请求");
+ JSONObject object = JSON.parseObject(jsonString);
+ String userName = object.getString("member_name");
+ final String id = object.getString("id");
+ String phoneNum = object.getString("member_phone");
+ final CustomDialog dialog = new CustomDialog(context);
+ dialog.setMessage(phoneNum + "的用户请求绑定你的平板")
+ .setTitle("绑定请求")
+ .setPositive("允许")
+ .setNegtive("拒绝")
+// .setSingle(true)
+ .setOnClickBottomListener(new CustomDialog.OnClickBottomListener() {
+ @Override
+ public void onPositiveClick() {
+ bind(context, id, 1);
+ dialog.dismiss();
+ }
+
+ @Override
+ public void onNegtiveClick() {
+ bind(context, id, 0);
+ ToastUtil.show("设备取消绑定");
+ dialog.dismiss();
+ }
+ });
+ dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
+ dialog.show();
+ dialog.getWindow().setGravity(Gravity.CENTER);
+ dialog.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM);
+ dialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE);
+
+ new CountDownTimer(30000, 1000) {
+
+ @Override
+ public void onTick(long l) {
+ String value = String.valueOf((int) (l / 1000));
+ dialog.setNegtiveText("拒绝" + "(" + value + ")");
+ }
+
+ @Override
+ public void onFinish() {
+ bind(context, id, 0);
+ dialog.dismiss();
+ }
+ }.start();
+ }
+
+ synchronized private void bind(final Context context, String id, int type) {
+ BindDevices bindDevices = NetInterfaceManager.getInstance().getbindDevicesControl();
+ bindDevices.getBindDevices(Utils.getSerial(), id, type)
+ .subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribe(new Observer() {
+ @Override
+ public void onSubscribe(@NonNull Disposable d) {
+
+ }
+
+ @Override
+ public void onNext(@NonNull BaseResponse baseResponse) {
+ int code = baseResponse.code;
+ String msg = baseResponse.msg;
+// Log.e("bind", baseResponse.toString());
+ if (code == 200) {
+ ToastUtil.show("绑定成功");
+ } else if (code == 301) {
+ ToastUtil.show(msg);
+ }
+ }
+
+ @Override
+ public void onError(@NonNull Throwable e) {
+ Log.e("bind", e.getMessage());
+ }
+
+ @Override
+ public void onComplete() {
+
+ }
+ });
+ }
+
+ 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";
+
+ @SuppressLint("NewApi")
+ private void setTFmedia(Context context, String jsonString) {
+ JSONObject jsonObject = JSON.parseObject(jsonString);
+ //影音管控开关
+ int setting_tfmedia = jsonObject.getInteger("setting_tfmedia");
+ Log.e("SystemSetting", "qch_tfmedia_forbid---------" + setting_tfmedia);
+
+ if (setting_tfmedia == 1) {
+ JGYUtils.putInt(context.getContentResolver(), "qch_tfmedia_forbid", 0);
+ } else {
+ String s = JGYUtils.getString(context.getContentResolver(), "qch_tfmedia_filetypes");//影音管控
+ Log.e("SystemSetting", "qch_tfmedia_filetypes old" + s);
+ JGYUtils.putInt(context.getContentResolver(), "qch_tfmedia_forbid", 1);
+ String setting_tfmedia_format = jsonObject.getString("setting_tfmedia_format");
+ HashSet types = new HashSet<>(Arrays.asList(setting_tfmedia_format.split(",")));
+ types.removeIf(TextUtils::isEmpty);
+ boolean b = JGYUtils.putString(context.getContentResolver(), "qch_tfmedia_filetypes", String.join(",", types));//影音管控
+ Log.e("SystemSetting", "qch_tfmedia_filetypes---------" + b + ":" + types);
+ }
+ }
+
+ private void setCameta(Context context, String jsonString) {
+ JSONObject jsonObject = JSON.parseObject(jsonString);
+ //摄像头开关
+ int setting_camera = changeNum(jsonObject.getInteger("setting_camera"));
+ JGYUtils.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 1:
+ cameraStatus = "qch_camera_open";
+ break;
+ case 0:
+ cameraStatus = "qch_camera_forbid";
+ break;
+ default:
+ cameraStatus = "qch_camera_forbid";
+ break;
+ }
+ Intent cameraIntent = new Intent(cameraStatus).setPackage("com.android.settings");
+ context.sendBroadcast(cameraIntent);
+ }
+
+ private void setPhone(Context context, String jsonString) {
+ HTTPInterface.getSystemSettings(context);
+ }
+
+ @SuppressLint("NewApi")
+ private void setAppUpdate(Context context, String jsonString) {
+ JSONObject jsonObject = JSON.parseObject(jsonString);
+ String is_upgrade = jsonObject.getString("is_upgrade");
+ String packageName = jsonObject.getString("package");
+ String nowApplist = JGYUtils.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);
+ }
+ }
+ JGYUtils.putString(context.getContentResolver(), "qch_app_forbid", String.join(",", applist));
+ Log.e("setAppUpdate", JGYUtils.getString(context.getContentResolver(), "qch_app_forbid"));
+ }
+
+ private void setLock_screen(Context context, String jsonString) {
+ String type = "0";
+ JSONObject jSONObject = JSON.parseObject(jsonString);
+ type = jSONObject.getString("type");
+
+ if (!ServiceAliveUtils.isServiceAlice(context, ManagerService.class.getName())) {
+ context.startService(new Intent(context, ManagerService.class));
+ }
+ Intent intent = new Intent();
+// intent.putExtra("name", name);
+ if (type.equals("1")) {
+ intent.setAction(ManagerService.ACTION_LOCK);
+ } else if (type.equals("0")) {
+ intent.setAction(ManagerService.ACTION_UNLOCK);
+ }
+ context.sendBroadcast(intent);
+ }
+
+ public void doscreenshot(final Context context) {
+ final long time = System.currentTimeMillis();
+ Observable.create(new ObservableOnSubscribe() {
+ @Override
+ public void subscribe(ObservableEmitter e) throws Exception {
+ String filepath = context.getExternalFilesDir("db").getAbsolutePath();
+ int n = CmdUtil.execute("screencap -p " + filepath + File.separator + time + ".png").code;
+ e.onNext(n);
+ }
+ }).subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribe(new Observer() {
+ @Override
+ public void onSubscribe(Disposable d) {
+
+ }
+
+ @Override
+ public void onNext(Integer integer) {
+ if (integer == 0) {
+ uplaodImage(context, time);
+ } else {
+ Log.e("doss", "失败");
+ }
+ }
+
+ @Override
+ public void onError(Throwable e) {
+ Log.e("doss", "Throwable=" + e.getMessage());
+ }
+
+ @Override
+ public void onComplete() {
+
+ }
+ });
+ }
+
+ /**
+ * 实时获取电量
+ */
+ public static int getSystemBattery(Context context) {
+ int level = 0;
+ Intent batteryInfoIntent = context.getApplicationContext().registerReceiver(null,
+ new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
+ level = batteryInfoIntent.getIntExtra("level", 0);
+ int batterySum = batteryInfoIntent.getIntExtra("scale", 100);
+ int percentBattery = 100 * level / batterySum;
+ Log.i("getSystemBattery", "level = " + level);
+ Log.i("getSystemBattery", "batterySum = " + batterySum);
+ Log.i("getSystemBattery", "percent is " + percentBattery + "%");
+ return percentBattery;
+ }
+
+ synchronized private void setBrowserUrlpath(Context context, String jsonString) {
+ if (!TextUtils.isEmpty(jsonString)) {
+ JSONObject extra = JSON.parseObject(jsonString);
+ String white = extra.getString("white");
+ if (white != null && !white.equals("")) {
+ boolean whiteList = JGYUtils.putString(context.getContentResolver(), "DeselectBrowserArray", white);
+ Log.e("SystemSetting", "setBrowserList-whiteList" + whiteList + ":" + white);
+ } else {
+ JGYUtils.putString(context.getContentResolver(), "DeselectBrowserArray", " ");
+ }
+ Log.e("whiteList", JGYUtils.getString(context.getContentResolver(), "DeselectBrowserArray"));
+ String black = extra.getString("black");
+ if (black != null && !black.equals("")) {
+ boolean blackList = JGYUtils.putString(context.getContentResolver(), "qch_webblack_url", black);
+ Log.e("SystemSetting", "setBrowserList-blackList" + blackList + ":" + black);
+ } else {
+ JGYUtils.putString(context.getContentResolver(), "qch_webblack_url", " ");
+ }
+ Log.e("blackList", JGYUtils.getString(context.getContentResolver(), "qch_webblack_url"));
+ } else {
+ boolean setBrowserUrlpath = JGYUtils.putString(context.getContentResolver(), "DeselectBrowserArray", "invalid");
+ ToastUtil.debugShow("setBrowserUrlpath jsonString is NULL,set default: " + setBrowserUrlpath);
+ }
+ }
+
+
+ private void uplaodImage(final Context context, long time) {
+ String filepath = context.getExternalFilesDir("db").getAbsolutePath();
+// String filepath = mContext.getFileStreamPath("screenshot").getAbsolutePath();
+ //放在app内部data下面
+ File file = new File(filepath + File.separator + time + ".png");
+ //不要直接使用常用图片格式
+ if (!file.exists()) {
+ Log.e("uplaodImage", "File does not exists");
+ return;
+ }
+ UploadScreenshot uploadScreenshot = NetInterfaceManager.getInstance().getUploadScreenshotControl();
+ RequestBody requestFile = RequestBody.create(MediaType.parse("multipart/form-data"), file);
+ MultipartBody.Part body = MultipartBody.Part.createFormData("file", file.getName(), requestFile);
+ uploadScreenshot.uploadScreenshot(Utils.getSerial(), body)
+ .subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribe(new Observer() {
+ @Override
+ public void onSubscribe(Disposable d) {
+
+ }
+
+ @Override
+ public void onNext(BaseResponse baseResponse) {
+ int code = baseResponse.code;
+ if (code == 200) {
+ Log.e(TAG, "onNext: " + baseResponse.msg);
+ } else {
+ Log.e(TAG, code + ": " + baseResponse.msg);
+ }
+ }
+
+ @Override
+ public void onError(Throwable e) {
+ Log.e("uplaod", "onError: " + e.getMessage());
+ }
+
+ @Override
+ public void onComplete() {
+
+ }
+ });
+
+ }
+
+ private void timeControl(Context context, String jsonString) {
+ HTTPInterface.getTimeControl(context);
+ }
+
+ /**
+ * @param context
+ * @param jsonString 设置热点开关
+ */
+ private void setHotspot(Context context, String jsonString) {
+ JSONObject jsonObject = JSON.parseObject(jsonString);
+ int setting_hotspot = changeNum(jsonObject.getInteger("setting_hotspot"));//热点
+ try {
+ if (setting_hotspot == 1) {
+ Intent intent = new Intent();
+ intent.setAction("qch_hotspot_close");
+ intent.setPackage("com.android.settings");
+ context.sendStickyBroadcast(intent);
+ }
+ boolean qch_hotspot_forbid_on = JGYUtils.putInt(context.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 void setRestore(Context context, String jsonString) {
+ JSONObject jsonObject = JSON.parseObject(jsonString);
+ int mode = jsonObject.getInteger("qch_restore");
+ boolean qch_restore_forbid_on = JGYUtils.putInt(context.getContentResolver(), "qch_restore_forbid_on", changeNum(mode));
+ Log.e(TAG, "qch_restore_forbid_on:" + qch_restore_forbid_on);
+ }
+
+ private void setBrowserInput(Context context, String jsonString) {
+ JSONObject jsonObject = JSON.parseObject(jsonString);
+ int setting_browserInput = changeNum(jsonObject.getInteger("setting_browserInput"));
+ JGYUtils.putInt(context.getContentResolver(), "qch_Browser_input", setting_browserInput);
+ }
+
+ private void setDeveloper(Context context, String jsonString) {
+ JSONObject jsonObject = JSON.parseObject(jsonString);
+ int dev_mode = changeNum(jsonObject.getInteger("dev_mode"));
+ Log.e(TAG, "getDeveloper: " + dev_mode);
+ if (!DeviceManager.isDebugMode()) {
+ JGYUtils.putInt(context.getContentResolver(), "qch_Developeroptions", dev_mode);
+ if (dev_mode == 1) {
+ Intent intent = new Intent();
+ intent.setAction("qch_developeroptions_close");
+ intent.setPackage("com.android.settings");
+ context.sendBroadcast(intent);
+ Log.e(TAG, "getDeveloper: " + "关闭开发者模式");
+ ToastUtil.debugShow("关闭开发者模式");
+ } else {
+ Log.e(TAG, "getDeveloper: " + "打开开发者模式");
+ ToastUtil.debugShow("打开开发者模式");
+ }
+ }
+ }
+
+ private void cleanAppCache(Context context, String jsonString) {
+ JSONObject jsonObject = JSON.parseObject(jsonString);
+ String pkg = jsonObject.getString("package");
+ if (TextUtils.isEmpty(pkg)) {
+ Log.e(TAG, "cleanAppCache: pkg is null");
+ return;
+ }
+ try {
+ new CacheUtils().cleanApplicationUserData(context, pkg);
+ } catch (Exception e) {
+ e.printStackTrace();
+ Log.e(TAG, "cleanAppCache: " + e.getMessage());
+ }
+ }
+
+ private void hideDesktopIcon(Context context) {
+ HTTPInterface.getSystemSettings(context);
+ }
+
+ private void searchTopic(Context context, String jsonString) {
+ Log.e(TAG, "searchTopic: " + jsonString);
+ JSONObject jsonObject = JSON.parseObject(jsonString);
+ int search_topic = jsonObject.getInteger("search_topic");
+ SPUtils.put(context, "search_topic", search_topic);
+ JGYUtils.updateForbidList(context);
+ }
+
+}
diff --git a/app/src/main/java/com/info/sn/service/GuardService.java b/app/src/main/java/com/info/sn/service/GuardService.java
index 0d96bc8..4a4bf49 100644
--- a/app/src/main/java/com/info/sn/service/GuardService.java
+++ b/app/src/main/java/com/info/sn/service/GuardService.java
@@ -13,11 +13,11 @@ import android.content.Context;
import android.content.Intent;
import android.content.ServiceConnection;
import android.os.IBinder;
+import android.util.Log;
import androidx.annotation.Nullable;
import com.info.sn.KeepAliveConnection;
-import com.info.sn.utils.LogUtils;
import com.info.sn.utils.ServiceAliveUtils;
@@ -32,8 +32,8 @@ public class GuardService extends Service {
private ServiceConnection mServiceConnection = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName componentName, IBinder iBinder) {
- LogUtils.e(TAG, "GuardService:建立链接");
- boolean isServiceRunning = ServiceAliveUtils.isServiceAlice(getClass().getName());
+ Log.e(TAG, "GuardService:建立链接");
+ boolean isServiceRunning = ServiceAliveUtils.isServiceAlice(GuardService.this, getClass().getName());
if (!isServiceRunning) {
Intent i = new Intent(GuardService.this, MyDownloadService.class);
startService(i);
@@ -62,6 +62,5 @@ public class GuardService extends Service {
bindService(new Intent(this, StepService.class), mServiceConnection, Context.BIND_IMPORTANT);
return START_STICKY;
}
-
}
diff --git a/app/src/main/java/com/info/sn/service/InitJpushServer.java b/app/src/main/java/com/info/sn/service/InitJpushServer.java
deleted file mode 100644
index 3e8dceb..0000000
--- a/app/src/main/java/com/info/sn/service/InitJpushServer.java
+++ /dev/null
@@ -1,335 +0,0 @@
-package com.info.sn.service;
-
-import android.app.Service;
-import android.content.BroadcastReceiver;
-import android.content.Context;
-import android.content.Intent;
-import android.content.IntentFilter;
-import android.graphics.Color;
-import android.graphics.PixelFormat;
-import android.os.Build;
-import android.os.IBinder;
-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.ViewGroup;
-import android.view.WindowManager;
-import android.widget.Button;
-import android.widget.TextView;
-
-import com.alibaba.fastjson.JSON;
-import com.alibaba.fastjson.JSONObject;
-import com.info.sn.KeepAliveConnection;
-import com.info.sn.R;
-import com.info.sn.bean.BaseResponse;
-import com.info.sn.network.HTTPInterface;
-import com.info.sn.network.NetWorkManager;
-import com.info.sn.network.api.ScreenLock;
-import com.info.sn.utils.SPUtils;
-import com.info.sn.utils.TimeUtils;
-import com.info.sn.utils.Utils;
-
-import cn.jpush.android.api.JPushInterface;
-import io.reactivex.Observer;
-import io.reactivex.android.schedulers.AndroidSchedulers;
-import io.reactivex.disposables.Disposable;
-import io.reactivex.schedulers.Schedulers;
-
-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 new KeepAliveConnection.Stub() {
- };
- }
-
-
- @Override
- public void onCreate() {
- super.onCreate();
- registReceiver();
- registerTimeReceiver();
- }
-
- @Override
- public void onDestroy() {
- super.onDestroy();
- if (null != mTimeChangedReceiver) {
- unregisterReceiver(mTimeChangedReceiver);
- }
- if (null != lockScreenReceiver) {
- unregisterReceiver(lockScreenReceiver);
- }
- }
-
- @Override
- public int onStartCommand(Intent intent, int flags, int startId) {
- JPushInterface.init(this);
-// HTTPInterface.checkDevicesInfo(InitJpushServer.this);
- HTTPInterface.getAllappPackage(InitJpushServer.this);
- HTTPInterface.getForceInstall(InitJpushServer.this);
- HTTPInterface.checkUpdate(InitJpushServer.this);
- HTTPInterface.checkUpdate(InitJpushServer.this, "com.appstore.uiui");
- getScreenLockState();
- HTTPInterface.getTimeControl(InitJpushServer.this);
- return START_STICKY;
- }
-
- private void getScreenLockState() {
- ScreenLock getScreenLock = NetWorkManager.getScreenLockControl();
- getScreenLock.getScreenshot(Utils.getSerial())
- .subscribeOn(Schedulers.io())
- .observeOn(AndroidSchedulers.mainThread())
- .subscribe(new Observer() {
- @Override
- public void onSubscribe(Disposable d) {
-
- }
-
- @Override
- public void onNext(BaseResponse baseResponse) {
- int code = baseResponse.code;
- if (code == 200) {
- JSONObject jsonObject = (JSONObject) JSON.toJSON(baseResponse.data);
- int is_screen_lock = jsonObject.getInteger("is_screen_lock");
- if (is_screen_lock == 1) {
- if (!timelocked) {
- showFloatingWindow("屏幕已锁定");
- }
- screenlocked = true;
- SPUtils.put(InitJpushServer.this, LOCK_STATE, 1);
- } else {
- if (!timelocked) {
- hideFloatingWindow();
- }
- screenlocked = false;
- SPUtils.put(InitJpushServer.this, LOCK_STATE, 0);
- }
- } else {
- if (!timelocked) {
- hideFloatingWindow();
- }
- screenlocked = false;
- SPUtils.put(InitJpushServer.this, LOCK_STATE, 0);
- }
- }
-
- @Override
- public void onError(Throwable e) {
- Log.e("getScreenLockState", "onError: " + e.getMessage());
- int is_screen_lock = (int) SPUtils.get(InitJpushServer.this, LOCK_STATE, 0);
- if (is_screen_lock == 1) {
- if (!timelocked) {
- showFloatingWindow("屏幕已锁定");
- }
- screenlocked = true;
- } else {
- if (!timelocked) {
- hideFloatingWindow();
- }
- screenlocked = false;
- }
- }
-
- @Override
- public void onComplete() {
-
- }
- });
-
-
- }
-
-
- private static WindowManager windowManager;
- private View topView;
- boolean screenlocked = false;
- boolean timelocked = false;
-
- private static final String LOCK_STATE = "SCRENN_LOOCKED_STATE";
-
- 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_screen_lock, null);
- TextView textView = topView.findViewById(R.id.textView);
- textView.setText(name);
- } else {
- if (topView.getTag().equals("added")) {
- TextView textView = topView.findViewById(R.id.textView);
- textView.setText(name);
- return;
- }
- }
-// topView.setAlpha(0.8f);
- // 设置LayoutParam
- WindowManager.LayoutParams layoutParams = new WindowManager.LayoutParams();
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
- layoutParams.type = WindowManager.LayoutParams.TYPE_KEYGUARD_DIALOG;
- //TYPE_SYSTEM_OVERLAY可以下滑通知栏
-// layoutParams.type = WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY;
- } else {
- layoutParams.type = WindowManager.LayoutParams.TYPE_PHONE;
- }
- layoutParams.flags |= WindowManager.LayoutParams.FLAG_BLUR_BEHIND
- | WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED
- | WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN;
- layoutParams.format = PixelFormat.RGBA_8888;
- layoutParams.width = ViewGroup.LayoutParams.MATCH_PARENT;
- layoutParams.height = ViewGroup.LayoutParams.MATCH_PARENT;
- //systemUiVisibility 关闭通知栏和导航栏
- layoutParams.systemUiVisibility =
- View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
- | View.SYSTEM_UI_FLAG_IMMERSIVE
- | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN;
- 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)) {
- getScreenLockState();
- return;
- }
- if (ACTION_LOCK.equals(action)) {
-// String name = intent.getStringExtra("name");
- String name = "屏幕已锁定";
- if (!timelocked) {
- showFloatingWindow(name);
- }
- screenlocked = true;
- } else if (ACTION_UNLOCK.equals(action)) {
- if (!timelocked) {
- hideFloatingWindow();
- }
- screenlocked = false;
- }
- }
- }
-
-
- private TimeChangedReceiver mTimeChangedReceiver;
-
- //监听时间和日期变化
- public void registerTimeReceiver() {
- mTimeChangedReceiver = new TimeChangedReceiver();
- IntentFilter filter = new IntentFilter();
- filter.setPriority(IntentFilter.SYSTEM_HIGH_PRIORITY);
- filter.addAction(Intent.ACTION_DATE_CHANGED);
- filter.addAction(Intent.ACTION_TIME_CHANGED);
- filter.addAction(Intent.ACTION_TIMEZONE_CHANGED);
- filter.addAction(Intent.ACTION_TIME_TICK);
- filter.addAction(TimeChangedReceiver.ACTION_UPDATE);
- registerReceiver(mTimeChangedReceiver, filter);
- }
-
- public class TimeChangedReceiver extends BroadcastReceiver {
- public static final String ACTION_UPDATE = "TimeChangedReceiver_update";
-
- @Override
- public void onReceive(Context context, Intent intent) {
- if (Intent.ACTION_DATE_CHANGED.equals(intent.getAction())) {
- Log.e("fht", "TimeChangedReceiver:" + "data changed");
- } else if (Intent.ACTION_TIME_CHANGED.equals(intent.getAction())) {
- Log.e("fht", "TimeChangedReceiver:" + "time changed");
- } else if (Intent.ACTION_TIMEZONE_CHANGED.equals(intent.getAction())) {
- Log.e("fht", "TimeChangedReceiver:" + "timezone changed");
- } else if (Intent.ACTION_TIME_TICK.equals(intent.getAction())) {
- Log.e("fht", "TimeChangedReceiver:" + "time tick");
- } else if (ACTION_UPDATE.equals(intent.getAction())) {
- Log.e("fht", "TimeChangedReceiver:" + "date update");
- }
- long nowTime = System.currentTimeMillis();
- TimeUtils.ContralTime contralTime = TimeUtils.getDefaltContralTime(InitJpushServer.this);
- if (null != contralTime) {
- if (contralTime.inControlTime(nowTime)) {
- if (!screenlocked) {
- showFloatingWindow("管控时间:" + contralTime.toString());
- } else {
- TextView textView = topView.findViewById(R.id.textView);
- textView.setText("管控时间:" + contralTime.toString());
- }
- timelocked = true;
- } else {
- getScreenLockState();
- if (!screenlocked) {
- hideFloatingWindow();
- }
- timelocked = false;
- }
- } else {
- if (!screenlocked) {
- hideFloatingWindow();
- }
- getScreenLockState();
- timelocked = false;
- }
-// String packages = ForegroundAppUtil.getForegroundPackageName(context);
-// if (!packages.equals("com.estrongs.android.pop")) {
-// ApkUtils.openApp(context, "com.estrongs.android.pop");
-// }
-// Log.e("TimeChangedReceiver", "packages:" + packages);
- }
- }
-}
diff --git a/app/src/main/java/com/info/sn/service/MainService.java b/app/src/main/java/com/info/sn/service/MainService.java
new file mode 100644
index 0000000..1d21520
--- /dev/null
+++ b/app/src/main/java/com/info/sn/service/MainService.java
@@ -0,0 +1,305 @@
+package com.info.sn.service;
+
+import android.app.Service;
+import android.content.Intent;
+import android.content.pm.PackageManager;
+import android.graphics.Bitmap;
+import android.os.IBinder;
+import android.os.SystemClock;
+import android.util.Log;
+
+import com.blankj.utilcode.util.NetworkUtils;
+import com.info.sn.activity.main.MainActivity;
+import com.info.sn.activity.main.MainContact;
+import com.info.sn.activity.main.MainPresenter;
+import com.info.sn.bean.zuoye.BaseResponse;
+import com.info.sn.bean.zuoye.UserInfo;
+import com.info.sn.bean.gankao.AvailableProduct;
+import com.info.sn.jpush.TagAliasOperatorHelper;
+import com.info.sn.manager.ControlManager;
+import com.info.sn.network.HTTPInterface;
+import com.info.sn.utils.SPUtils;
+import com.info.sn.utils.ToastUtil;
+import com.info.sn.utils.Utils;
+import com.trello.rxlifecycle2.LifecycleProvider;
+import com.trello.rxlifecycle2.LifecycleTransformer;
+import com.trello.rxlifecycle2.RxLifecycle;
+import com.trello.rxlifecycle2.android.ActivityEvent;
+import com.trello.rxlifecycle2.android.RxLifecycleAndroid;
+
+import java.util.List;
+import java.util.concurrent.TimeUnit;
+
+import cn.jpush.android.api.JPushInterface;
+import io.reactivex.Observable;
+import io.reactivex.ObservableEmitter;
+import io.reactivex.ObservableOnSubscribe;
+import io.reactivex.Observer;
+import io.reactivex.disposables.Disposable;
+import io.reactivex.subjects.BehaviorSubject;
+
+import static com.info.sn.jpush.TagAliasOperatorHelper.ACTION_SET;
+import static com.info.sn.jpush.TagAliasOperatorHelper.sequence;
+
+/**
+ * @author jgy02
+ */
+public class MainService extends Service implements MainContact.MainView, NetworkUtils.OnNetworkStatusChangedListener, LifecycleProvider {
+ private String TAG = MainService.class.getSimpleName();
+ private Start start;
+ private MainPresenter mPresenter = new MainPresenter(this);
+
+ //执行所有请求的时间
+ long runningTime = 0;
+
+ //MainService上次执行时间
+ long startCommandTime = 0;
+
+ private final BehaviorSubject