update:2021.01.27

fix:修复应用安装信息上传
add:时间管控,顶部app管控
This commit is contained in:
2021-01-27 16:11:05 +08:00
parent 5428846475
commit 32a61c38c3
29 changed files with 1579 additions and 306 deletions

View File

@@ -15,8 +15,8 @@ android {
applicationId "com.info.sn" applicationId "com.info.sn"
minSdkVersion 23 minSdkVersion 23
targetSdkVersion 28 targetSdkVersion 28
versionCode 27 versionCode 31
versionName "1.2.7" versionName "1.3.1"
multiDexEnabled true multiDexEnabled true
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
ndk { ndk {
@@ -146,8 +146,8 @@ dependencies {
//implementation 'com.blankj:utilcode:1.26.0' //implementation 'com.blankj:utilcode:1.26.0'
implementation 'com.arialyy.aria:core:3.8.5' implementation 'com.arialyy.aria:core:3.8.15'
annotationProcessor 'com.arialyy.aria:compiler:3.8.5' annotationProcessor 'com.arialyy.aria:compiler:3.8.15'
implementation "org.java-websocket:Java-WebSocket:1.4.1" implementation "org.java-websocket:Java-WebSocket:1.4.1"

View File

@@ -59,7 +59,15 @@
<service <service
android:name=".service.InitJpushServer" android:name=".service.InitJpushServer"
android:enabled="true" android:enabled="true"
android:exported="true"></service> android:exported="true">
<intent-filter android:priority="1000">
<action android:name="android.intent.action.USER_PRESENT" />
<action android:name="android.intent.action.SCREEN_ON" />
<action android:name="android.intent.action.SCREEN_OFF" />
<data android:scheme="package" />
</intent-filter>
</service>
<activity android:name=".activity.MainActivity" <activity android:name=".activity.MainActivity"
android:launchMode="singleTask" android:launchMode="singleTask"
@@ -198,7 +206,8 @@
<category android:name="com.info.sn" /> <category android:name="com.info.sn" />
</intent-filter> </intent-filter>
</activity> <!-- Since JCore2.0.0 Required SDK核心功能 --> </activity>
<activity android:name=".activity.TopActivity" /> <!-- Since JCore2.0.0 Required SDK核心功能 -->
<!-- 这个Service要继承JCommonService --> <!-- 这个Service要继承JCommonService -->
<service <service
android:name=".jpush.PushService" android:name=".jpush.PushService"

View File

@@ -52,6 +52,7 @@ import com.info.sn.service.StepService;
import com.info.sn.utils.ApkUtils; import com.info.sn.utils.ApkUtils;
import com.info.sn.utils.LogUtils; import com.info.sn.utils.LogUtils;
import com.info.sn.utils.SPUtils; import com.info.sn.utils.SPUtils;
import com.info.sn.utils.TimeUtils;
import com.info.sn.utils.ToastUtil; import com.info.sn.utils.ToastUtil;
import com.info.sn.utils.Utils; import com.info.sn.utils.Utils;
@@ -124,6 +125,8 @@ public class MainActivity extends CheckPermissionsActivity implements AMapLocati
// HTTPInterface.setBrowser(MainActivity.this); // HTTPInterface.setBrowser(MainActivity.this);
delay(MainActivity.this); delay(MainActivity.this);
// HTTPInterface.get_settings(MainActivity.this); // HTTPInterface.get_settings(MainActivity.this);
TimeUtils.ContralTime c2 = TimeUtils.getDefaltContralTime(MainActivity.this);
Log.e("fht", "time:" + TimeUtils.getNowTime());
} }
private void initAmap() { private void initAmap() {
@@ -165,10 +168,10 @@ public class MainActivity extends CheckPermissionsActivity implements AMapLocati
HTTPInterface.getAllappPackage(MainActivity.this); HTTPInterface.getAllappPackage(MainActivity.this);
HTTPInterface.setBrowser(context); HTTPInterface.setBrowser(context);
HTTPInterface.getBrowserLabel(context); HTTPInterface.getBrowserLabel(context);
getSystemSettings(context); HTTPInterface.getSystemSettings(context);
HTTPInterface.getForceInstall(context); HTTPInterface.getForceInstall(context);
HTTPInterface.getAppStart(context); HTTPInterface.getAppStart(context);
HTTPInterface.getAppJump(context); // HTTPInterface.getAppJump(context);
} }
@Override @Override
@@ -179,7 +182,6 @@ public class MainActivity extends CheckPermissionsActivity implements AMapLocati
@Override @Override
public void onComplete() { public void onComplete() {
Log.e("delay", "onComplete: "); Log.e("delay", "onComplete: ");
} }
}); });
} }
@@ -407,41 +409,6 @@ public class MainActivity extends CheckPermissionsActivity implements AMapLocati
}); });
} }
private void getSystemSettings(final Context context) {
Setting setting = NetWorkManager.getsettingControl();
setting.getSetting(Utils.getSerial())
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<BaseResponse<SystemSettings>>() {
@Override
public void onSubscribe(@NonNull Disposable d) {
}
@Override
public void onNext(@NonNull BaseResponse<SystemSettings> systemSettingsBaseResponse) {
int code = systemSettingsBaseResponse.code;
if (code == 200) {
SystemSettings settings = systemSettingsBaseResponse.data;
Utils.setSystemSetting(context, settings.toString());
}
}
@Override
public void onError(@NonNull Throwable e) {
Log.e(TAG, "onError: " + e.getMessage());
}
@Override
public void onComplete() {
}
});
}
@Override @Override
public boolean onKeyDown(int keyCode, KeyEvent event) { public boolean onKeyDown(int keyCode, KeyEvent event) {

View File

@@ -0,0 +1,33 @@
package com.info.sn.activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.KeyEvent;
import androidx.appcompat.app.AppCompatActivity;
import com.info.sn.R;
public class TopActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_top);
}
@Override
protected void onDestroy() {
super.onDestroy();
startActivity(new Intent(this, this.getClass()));
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_DOWN) {
return false;
}
return super.onKeyDown(keyCode, event);
}
}

View File

@@ -1,7 +1,10 @@
package com.info.sn.base; package com.info.sn.base;
import android.app.ActivityManager;
import android.app.Application; import android.app.Application;
import android.content.Context; import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Handler; import android.os.Handler;
import android.os.Looper; import android.os.Looper;
import android.util.Log; import android.util.Log;
@@ -14,6 +17,8 @@ import com.arialyy.aria.core.Aria;
import com.info.sn.BuildConfig; import com.info.sn.BuildConfig;
import com.info.sn.activity.MainActivity; import com.info.sn.activity.MainActivity;
import com.info.sn.network.HTTPInterface; import com.info.sn.network.HTTPInterface;
import com.info.sn.receiver.APKinstallReceiver;
import com.info.sn.receiver.BootReceiver;
import com.info.sn.utils.LogUtils; import com.info.sn.utils.LogUtils;
import com.info.sn.utils.SPUtils; import com.info.sn.utils.SPUtils;
import com.info.sn.utils.ToastUtil; import com.info.sn.utils.ToastUtil;
@@ -32,6 +37,9 @@ public class MyApplication extends Application {
@Override @Override
public void onCreate() { public void onCreate() {
super.onCreate(); super.onCreate();
if (!getPackageName().equals(getCurrentProcessName())) {
return;
}
app = this; app = this;
if (!BuildConfig.DEBUG) { if (!BuildConfig.DEBUG) {
catchException(); catchException();
@@ -40,7 +48,25 @@ public class MyApplication extends Application {
context = getApplicationContext(); context = getApplicationContext();
Aria.init(this); Aria.init(this);
Aria.download(this).resumeAllTask(); Aria.download(this).resumeAllTask();
registAppReceive();
registBootReceive();
}
/**
* 获取当前进程名
*/
private String getCurrentProcessName() {
int pid = android.os.Process.myPid();
String processName = "";
ActivityManager manager = (ActivityManager) getApplicationContext().getSystemService
(Context.ACTIVITY_SERVICE);
for (ActivityManager.RunningAppProcessInfo process : manager.getRunningAppProcesses()) {
if (process.pid == pid) {
processName = process.processName;
}
}
return processName;
} }
private void catchException() { private void catchException() {
@@ -144,4 +170,30 @@ public class MyApplication extends Application {
locationClient.startLocation(); locationClient.startLocation();
} }
private APKinstallReceiver apKinstallReceiver;
private void registAppReceive() {
if (null == apKinstallReceiver) {
apKinstallReceiver = new APKinstallReceiver();
}
IntentFilter filter = new IntentFilter();
filter.setPriority(IntentFilter.SYSTEM_HIGH_PRIORITY);
filter.addAction(Intent.ACTION_PACKAGE_ADDED);
filter.addAction(Intent.ACTION_PACKAGE_REPLACED);
filter.addAction(Intent.ACTION_PACKAGE_REMOVED);
filter.addDataScheme("package");
registerReceiver(apKinstallReceiver, filter);
}
private BootReceiver bootReceiver;
private void registBootReceive() {
if (null == bootReceiver){
bootReceiver = new BootReceiver();
IntentFilter filter = new IntentFilter();
filter.setPriority(IntentFilter.SYSTEM_HIGH_PRIORITY);
filter.addAction(Intent.ACTION_USER_PRESENT);
registerReceiver(bootReceiver, filter);
}
}
} }

View File

@@ -9,6 +9,10 @@ public class AppStart implements Serializable {
private int is_network; private int is_network;
private int is_upgrade; private int is_upgrade;
private int is_slide; private int is_slide;
private int is_lock;
private String visit;
private String address;
public String getApp_package() { public String getApp_package() {
return app_package; return app_package;
@@ -49,4 +53,28 @@ public class AppStart implements Serializable {
public void setIs_slide(int is_slide) { public void setIs_slide(int is_slide) {
this.is_slide = is_slide; this.is_slide = is_slide;
} }
public int getIs_lock() {
return is_lock;
}
public void setIs_lock(int is_lock) {
this.is_lock = is_lock;
}
public String getVisit() {
return visit;
}
public void setVisit(String visit) {
this.visit = visit;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
} }

View File

@@ -0,0 +1,24 @@
package com.info.sn.bean;
import java.io.Serializable;
public class AppUploadInfo implements Serializable {
String app_package;
long app_version_code;
public String getApp_package() {
return app_package;
}
public void setApp_package(String app_package) {
this.app_package = app_package;
}
public long getApp_version_code() {
return app_version_code;
}
public void setApp_version_code(long app_version_code) {
this.app_version_code = app_version_code;
}
}

View File

@@ -21,15 +21,17 @@ import android.view.WindowManager;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.arialyy.aria.core.Aria; import com.arialyy.aria.core.Aria;
import com.arialyy.aria.core.download.DownloadEntity; import com.arialyy.aria.core.download.DownloadEntity;
import com.info.sn.BuildConfig;
import com.info.sn.activity.MainActivity;
import com.info.sn.bean.BaseResponse; import com.info.sn.bean.BaseResponse;
import com.info.sn.network.HTTPInterface; import com.info.sn.network.HTTPInterface;
import com.info.sn.network.NetWorkManager; import com.info.sn.network.NetWorkManager;
import com.info.sn.network.api.BindDevices; 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.ApkUtils;
import com.info.sn.utils.CmdUtil;
import com.info.sn.utils.LogUtils; import com.info.sn.utils.LogUtils;
import com.info.sn.utils.SPUtils; import com.info.sn.utils.SPUtils;
import com.info.sn.utils.ServiceAliveUtils;
import com.info.sn.utils.ToastUtil; import com.info.sn.utils.ToastUtil;
import com.info.sn.utils.Utils; import com.info.sn.utils.Utils;
import com.info.sn.view.CustomDialog; import com.info.sn.view.CustomDialog;
@@ -46,11 +48,17 @@ import java.util.SortedMap;
import java.util.TreeMap; import java.util.TreeMap;
import cn.jpush.android.api.JPushInterface; 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.Observer;
import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.annotations.NonNull; import io.reactivex.annotations.NonNull;
import io.reactivex.disposables.Disposable; import io.reactivex.disposables.Disposable;
import io.reactivex.schedulers.Schedulers; import io.reactivex.schedulers.Schedulers;
import okhttp3.MediaType;
import okhttp3.MultipartBody;
import okhttp3.RequestBody;
/** /**
* 自定义接收器 * 自定义接收器
@@ -60,7 +68,7 @@ import io.reactivex.schedulers.Schedulers;
* 2) 接收不到自定义消息 * 2) 接收不到自定义消息
*/ */
public class MyReceiver extends BroadcastReceiver { public class MyReceiver extends BroadcastReceiver {
private static final String TAG = "JIGUANG-Example"; private static final String TAG = "MyReceiver";
@Override @Override
public void onReceive(Context context, Intent intent) { public void onReceive(Context context, Intent intent) {
@@ -182,6 +190,16 @@ public class MyReceiver extends BroadcastReceiver {
//系统管控 //系统管控
private static final String JIGUANG_REBOOT_DEVICES = "22"; 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 //send msg to MainActivity
private void processCustomMessage(Context context, Bundle bundle) { private void processCustomMessage(Context context, Bundle bundle) {
@@ -259,7 +277,7 @@ public class MyReceiver extends BroadcastReceiver {
setAppUpdate(context, extras); setAppUpdate(context, extras);
break; break;
case JIGUANG_APP_WEBSITE: case JIGUANG_APP_WEBSITE:
HTTPInterface.getAppJump(context); // HTTPInterface.getAppJump(context);
break; break;
case JIGUANG_REBOOT_DEVICES: case JIGUANG_REBOOT_DEVICES:
Utils.rebootDevices(context); Utils.rebootDevices(context);
@@ -276,32 +294,42 @@ public class MyReceiver extends BroadcastReceiver {
case JIGUANG_RESET_DEVICES: case JIGUANG_RESET_DEVICES:
Utils.doMasterClear(context); Utils.doMasterClear(context);
break; 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) { private int changeNum(int paramInt) {
switch (paramInt) { return paramInt == 1 ? 0 : 1;
default:
return 1;
case 0:
return 1;
case 1:
break;
}
return 0;
} }
private void setPhone(Context context, String json) { private void setPhone(Context context, String json) {
com.alibaba.fastjson.JSONObject jsonObject = JSON.parseObject(json); // com.alibaba.fastjson.JSONObject jsonObject = JSON.parseObject(json);
int setting_phone = jsonObject.getInteger("setting_phone"); // int setting_phone = jsonObject.getInteger("setting_phone");
Log.e("setting_phone", String.valueOf(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_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_on = Settings.System.putInt(context.getContentResolver(), "qch_white_list_on", setting_phone);
boolean qch_white_list_Array = Settings.System.putString(context.getContentResolver(), "qch_white_list_Array", "981964879"); // 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---------" + setting_phone);
Log.e("SystemSetting", "qch_call_forbid---------" + qch_call_forbid); // 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_on);
Log.e("SystemSetting", "qch_call_forbid---------" + qch_white_list_Array); // Log.e("SystemSetting", "qch_call_forbid---------" + qch_white_list_Array);
HTTPInterface.getSystemSettings(context);
} }
private void setCameta(Context context, String json) { private void setCameta(Context context, String json) {
@@ -313,10 +341,13 @@ public class MyReceiver extends BroadcastReceiver {
Log.e("SystemSetting", "setting_camera---------" + setting_camera); Log.e("SystemSetting", "setting_camera---------" + setting_camera);
String cameraStatus = ""; String cameraStatus = "";
switch (setting_camera) { switch (setting_camera) {
case 0: case 1:
cameraStatus = "qch_camera_open"; cameraStatus = "qch_camera_open";
break; break;
case 1: case 0:
cameraStatus = "qch_camera_forbid";
break;
default:
cameraStatus = "qch_camera_forbid"; cameraStatus = "qch_camera_forbid";
break; break;
} }
@@ -330,16 +361,16 @@ public class MyReceiver extends BroadcastReceiver {
com.alibaba.fastjson.JSONObject jsonObject = JSON.parseObject(json); com.alibaba.fastjson.JSONObject jsonObject = JSON.parseObject(json);
//影音管控开关 //影音管控开关
int setting_tfmedia = jsonObject.getInteger("setting_tfmedia"); int setting_tfmedia = jsonObject.getInteger("setting_tfmedia");
Settings.System.putInt(context.getContentResolver(), "qch_tfmedia_forbid", setting_tfmedia);
Log.e("SystemSetting", "qch_tfmedia_forbid---------" + setting_tfmedia); Log.e("SystemSetting", "qch_tfmedia_forbid---------" + setting_tfmedia);
if (setting_tfmedia == 1) { if (setting_tfmedia == 0) {
Settings.System.putInt(context.getContentResolver(), "qch_tfmedia_forbid", 1);
} else {
String s = Settings.System.getString(context.getContentResolver(), "qch_tfmedia_filetypes");//影音管控 String s = Settings.System.getString(context.getContentResolver(), "qch_tfmedia_filetypes");//影音管控
Log.e("SystemSetting", "qch_tfmedia_filetypes old" + s); 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);//影音管控 boolean b = Settings.System.putString(context.getContentResolver(), "qch_tfmedia_filetypes", tftype);//影音管控
Log.e("SystemSetting", "qch_tfmedia_filetypes---------" + b + ":" + tftype); Log.e("SystemSetting", "qch_tfmedia_filetypes---------" + b + ":" + tftype);
} else {
Settings.System.putInt(context.getContentResolver(), "qch_tfmedia_forbid", 0);
} }
} }
@@ -375,16 +406,17 @@ public class MyReceiver extends BroadcastReceiver {
} }
synchronized private void sendStartTime(Context context, String jsonArray) { synchronized private void sendStartTime(Context context, String jsonArray) {
if (jsonArray.length() > 0) { HTTPInterface.updateAdminInfo(context);
try { // if (jsonArray.length() > 0) {
JSONObject extra = new JSONObject(jsonArray); // try {
String random = extra.getString("random"); // JSONObject extra = new JSONObject(jsonArray);
int battery = getSystemBattery(context); // String random = extra.getString("random");
// HTTPInterface.sendStartTime(context, 0, getTaskPackname(context), battery, random); // int battery = getSystemBattery(context);
} catch (JSONException e) { //// HTTPInterface.sendStartTime(context, 0, getTaskPackname(context), battery, random);
e.printStackTrace(); // } catch (JSONException e) {
} // e.printStackTrace();
} // }
// }
} }
/** /**
@@ -431,25 +463,23 @@ public class MyReceiver extends BroadcastReceiver {
if (jsonArray.length() > 0) { if (jsonArray.length() > 0) {
try { try {
JSONObject extra = new JSONObject(jsonArray); JSONObject extra = new JSONObject(jsonArray);
int is_dataline = extra.getInt("is_dataline"); String setting_usb = extra.getString("setting_usb");
if (is_dataline == 1) { boolean qch_usb_choose = Settings.System.putString(context.getContentResolver(), "qch_usb_choose", setting_usb);
boolean qch_usb_choose = Settings.System.putString(context.getContentResolver(), "qch_usb_choose", "usb_charge"); LogUtils.e("setUsbState:", Settings.System.getString(context.getContentResolver(), "qch_usb_choose"));
LogUtils.e("setUsbState:", Settings.System.getString(context.getContentResolver(), "qch_usb_choose"));
} else {
boolean qch_usb_choose = Settings.System.putString(context.getContentResolver(), "qch_usb_choose", "usb_mtp");
LogUtils.e("setUsbState:", Settings.System.getString(context.getContentResolver(), "qch_usb_choose"));
}
String usbStatus = ""; String usbStatus = "";
switch (is_dataline) { switch (setting_usb) {
case 1: case "usb_charge":
usbStatus = "qch_action_usb_usb_charge"; usbStatus = "qch_action_usb_usb_charge";
break; break;
case 0: case "usb_mtp":
usbStatus = "qch_action_usb_usb_mtp"; usbStatus = "qch_action_usb_usb_mtp";
break; break;
// case "usb_midi": // case "usb_midi":
// usbStatus = "qch_action_usb_usb_midi"; // usbStatus = "qch_action_usb_usb_midi";
// break; // break;
default:
usbStatus = "qch_action_usb_usb_charge";
break;
} }
Intent usbIntent = new Intent(usbStatus).setPackage("com.android.settings"); Intent usbIntent = new Intent(usbStatus).setPackage("com.android.settings");
context.sendBroadcast(usbIntent); context.sendBroadcast(usbIntent);
@@ -466,8 +496,8 @@ public class MyReceiver extends BroadcastReceiver {
if (jsonArray.length() > 0) { if (jsonArray.length() > 0) {
try { try {
JSONObject extra = new JSONObject(jsonArray); JSONObject extra = new JSONObject(jsonArray);
int is_tf = extra.getInt("is_tf"); int is_tf = extra.getInt("setting_memory");
boolean qch_sdcard_forbid_on = Settings.System.putInt(context.getContentResolver(), "qch_sdcard_forbid_on", is_tf); boolean qch_sdcard_forbid_on = Settings.System.putInt(context.getContentResolver(), "qch_sdcard_forbid_on", changeNum(is_tf));
if (qch_sdcard_forbid_on) { if (qch_sdcard_forbid_on) {
LogUtils.e("setTfcardState:", Settings.System.getString(context.getContentResolver(), "qch_sdcard_forbid_on")); LogUtils.e("setTfcardState:", Settings.System.getString(context.getContentResolver(), "qch_sdcard_forbid_on"));
} else { } else {
@@ -491,11 +521,11 @@ public class MyReceiver extends BroadcastReceiver {
} }
try { try {
JSONObject extra = new JSONObject(jsonArray); JSONObject extra = new JSONObject(jsonArray);
int is_bluetooth = extra.getInt("is_bluetooth"); int is_bluetooth = extra.getInt("setting_bluetooth");
if (is_bluetooth == 1) { if (is_bluetooth == 0) {
mBluetoothAdapter.disable();//设置关闭时关闭蓝牙 mBluetoothAdapter.disable();//设置关闭时关闭蓝牙
} }
boolean qch_bt_forbid_on = Settings.System.putInt(context.getContentResolver(), "qch_bht_forbid_on", is_bluetooth); boolean qch_bt_forbid_on = Settings.System.putInt(context.getContentResolver(), "qch_bht_forbid_on", changeNum(is_bluetooth));
if (qch_bt_forbid_on) { if (qch_bt_forbid_on) {
LogUtils.e("setBluetoothState:", Settings.System.getString(context.getContentResolver(), "qch_bht_forbid_on")); LogUtils.e("setBluetoothState:", Settings.System.getString(context.getContentResolver(), "qch_bht_forbid_on"));
} else { } else {
@@ -653,7 +683,7 @@ public class MyReceiver extends BroadcastReceiver {
try { try {
JSONObject object = new JSONObject(json); JSONObject object = new JSONObject(json);
String packageName = object.getString("package"); String packageName = object.getString("app_package");
ToastUtil.debugShow("收到应用卸载消息:包名" + packageName); ToastUtil.debugShow("收到应用卸载消息:包名" + packageName);
if (!packageName.equals("") && !packageName.equals(context.getApplicationContext().getPackageName())) { if (!packageName.equals("") && !packageName.equals(context.getApplicationContext().getPackageName())) {
if (!ApkUtils.isAvailable(context.getApplicationContext(), packageName)) { if (!ApkUtils.isAvailable(context.getApplicationContext(), packageName)) {
@@ -816,4 +846,112 @@ public class MyReceiver extends BroadcastReceiver {
} }
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<Integer>() {
@Override
public void subscribe(ObservableEmitter<Integer> 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<Integer>() {
@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<BaseResponse>() {
@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);
}
} }

View File

@@ -15,11 +15,10 @@ import com.google.gson.Gson;
import com.google.gson.JsonObject; import com.google.gson.JsonObject;
import com.info.sn.BuildConfig; import com.info.sn.BuildConfig;
import com.info.sn.bean.AppInfo; import com.info.sn.bean.AppInfo;
import com.info.sn.bean.AppJump;
import com.info.sn.bean.AppStart; import com.info.sn.bean.AppStart;
import com.info.sn.bean.BaseResponse; import com.info.sn.bean.BaseResponse;
import com.info.sn.bean.BrowserBean; import com.info.sn.bean.BrowserBean;
import com.info.sn.network.api.APPJump; import com.info.sn.bean.SystemSettings;
import com.info.sn.network.api.AddAppInstall; import com.info.sn.network.api.AddAppInstall;
import com.info.sn.network.api.Browser; import com.info.sn.network.api.Browser;
import com.info.sn.network.api.ForceInstall; import com.info.sn.network.api.ForceInstall;
@@ -27,13 +26,16 @@ import com.info.sn.network.api.Label;
import com.info.sn.network.api.NewestAppUpdate; import com.info.sn.network.api.NewestAppUpdate;
import com.info.sn.network.api.QueryAllApp; import com.info.sn.network.api.QueryAllApp;
import com.info.sn.network.api.QuerySnAppStart; 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.network.api.UpdateAdminSn;
import com.info.sn.service.InitJpushServer;
import com.info.sn.utils.ApkUtils; import com.info.sn.utils.ApkUtils;
import com.info.sn.utils.FileUtils; import com.info.sn.utils.FileUtils;
import com.info.sn.utils.SPUtils; import com.info.sn.utils.SPUtils;
import com.info.sn.utils.TimeUtils;
import com.info.sn.utils.Utils; import com.info.sn.utils.Utils;
import java.util.Date;
import java.util.List; import java.util.List;
import io.reactivex.Observer; import io.reactivex.Observer;
@@ -43,14 +45,16 @@ import io.reactivex.disposables.Disposable;
import io.reactivex.schedulers.Schedulers; import io.reactivex.schedulers.Schedulers;
public class HTTPInterface { public class HTTPInterface {
public static void SendAppInstall(String jsonString) {
// if (packageName.equals(packages)) {
// Log.e("SendAppInstall", installOrRemove + "return: " + packages);
// return;
// }
public static void SendAppInstall(String packageName, int versionCode, int installOrRemove) {
AddAppInstall addAppInstall = NetWorkManager.getAddAppInstallControl(); AddAppInstall addAppInstall = NetWorkManager.getAddAppInstallControl();
addAppInstall.installorRemove( addAppInstall.installorRemove(
Utils.getSerial(), Utils.getSerial(), jsonString
packageName,
versionCode,
installOrRemove
).subscribeOn(Schedulers.io()) ).subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread()) .observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<BaseResponse>() { .subscribe(new Observer<BaseResponse>() {
@@ -73,6 +77,7 @@ public class HTTPInterface {
@Override @Override
public void onComplete() { public void onComplete() {
Log.e("SendAppInstall", "onComplete: ");
} }
}); });
@@ -229,7 +234,7 @@ public class HTTPInterface {
int code = listBaseResponse.code; int code = listBaseResponse.code;
if (code == 200) { if (code == 200) {
List<AppStart> list = listBaseResponse.data; List<AppStart> list = listBaseResponse.data;
setAotuandNet(context, list); setAppState(context, list);
} else { } else {
setInvalid(context); setInvalid(context);
} }
@@ -247,42 +252,33 @@ public class HTTPInterface {
}); });
} }
private static void setAppState(Context context, List<AppStart> list) {
setAppAutoStart(context, list);
setAppNetwork(context, list);
setAppNUpdate(context, list);
setAppSlide(context, list);
setAppHide(context, list);
setAPPinsideBrowser(context, list);
setAPPIDJump(context, list);
}
private static void setAotuandNet(Context context, List<AppStart> list) {
//应用自启动
private static void setAppAutoStart(Context context, List<AppStart> list) {
String auto_allow = ""; String auto_allow = "";
String auto_not = ""; String auto_not = "";
String network_allow = "";
String network_not = "";
String upgrade_allow = "";
String upgrade_not = "";
String slide_allow = "";
String slide_not = "";
if (null != list && list.size() != 0) { if (null != list && list.size() != 0) {
for (AppStart app : list) { for (AppStart app : list) {
int is_auto = app.getIs_auto(); int is_auto = app.getIs_auto();
int is_network = app.getIs_network();
int is_upgrade = app.getIs_upgrade();
int is_slide = app.getIs_slide();
String app_package = app.getApp_package(); String app_package = app.getApp_package();
if (is_auto == 1) { if (is_auto == 1) {
auto_allow += app_package + ","; if (!auto_allow.contains(app_package)) {
auto_allow += app_package + ",";
}
} else { } else {
auto_not += app_package + ","; if (!auto_not.contains(app_package)) {
} auto_not += app_package + ",";
if (is_network == 1) { }
network_allow += app_package + ",";
} else {
network_not += app_package + ",";
}
if (is_upgrade == 1) {
upgrade_allow += app.getApp_package() + ",";
} else {
upgrade_not += app.getApp_package() + ",";
}
if (is_slide == 1) {
slide_allow += app.getApp_package() + ",";
} else {
slide_not += app.getApp_package() + ",";
} }
} }
if (!TextUtils.isEmpty(auto_allow) && auto_allow.endsWith(",")) { if (!TextUtils.isEmpty(auto_allow) && auto_allow.endsWith(",")) {
@@ -292,6 +288,27 @@ public class HTTPInterface {
if (!TextUtils.isEmpty(auto_not) && auto_not.endsWith(",")) { if (!TextUtils.isEmpty(auto_not) && auto_not.endsWith(",")) {
auto_not = auto_not.substring(0, auto_not.length() - 1); auto_not = auto_not.substring(0, auto_not.length() - 1);
} }
}
}
//应用联网管控
private static void setAppNetwork(Context context, List<AppStart> list) {
String network_allow = "";
String network_not = "";
if (null != list && list.size() != 0) {
for (AppStart app : list) {
int is_network = app.getIs_network();
String app_package = app.getApp_package();
if (is_network == 1) {
if (!network_allow.contains(app_package)) {
network_allow += app_package + ",";
}
} else {
if (!network_not.contains(app_package)) {
network_not += app_package + ",";
}
}
}
if (!TextUtils.isEmpty(network_allow) && network_allow.endsWith(",")) { if (!TextUtils.isEmpty(network_allow) && network_allow.endsWith(",")) {
network_allow = network_allow.substring(0, network_allow.length() - 1); network_allow = network_allow.substring(0, network_allow.length() - 1);
Settings.System.putString(context.getContentResolver(), "qch_jgy_network_allow", network_allow); Settings.System.putString(context.getContentResolver(), "qch_jgy_network_allow", network_allow);
@@ -302,15 +319,54 @@ public class HTTPInterface {
Settings.System.putString(context.getContentResolver(), "qch_jgy_network_disallow", network_not); Settings.System.putString(context.getContentResolver(), "qch_jgy_network_disallow", network_not);
Log.e("fht", "ban::" + network_not); Log.e("fht", "ban::" + network_not);
} }
}
}
//app更新
private static void setAppNUpdate(Context context, List<AppStart> list) {
if (null != list && list.size() != 0) {
String upgrade_allow = "";
String upgrade_not = "";
for (AppStart app : list) {
int is_upgrade = app.getIs_upgrade();
String app_package = app.getApp_package();
if (is_upgrade == 0) {
upgrade_allow += app_package + ",";
} else {
upgrade_not += app_package + ",";
}
}
if (!TextUtils.isEmpty(upgrade_allow) && upgrade_allow.endsWith(",")) { if (!TextUtils.isEmpty(upgrade_allow) && upgrade_allow.endsWith(",")) {
upgrade_allow = upgrade_allow.substring(0, upgrade_allow.length() - 1); upgrade_allow = upgrade_allow.substring(0, upgrade_allow.length() - 1);
} }
if (!TextUtils.isEmpty(upgrade_not) && upgrade_not.endsWith(",")) { if (!TextUtils.isEmpty(upgrade_not) && upgrade_not.endsWith(",")) {
upgrade_not = upgrade_not.substring(0, upgrade_not.length() - 1); 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(",")); Utils.writeDisableUpdateList(context, upgrade_not.split(","), upgrade_allow.split(","));
}
}
//app滑动管控
private static void setAppSlide(Context context, List<AppStart> list) {
String slide_allow = "";
String slide_not = "";
if (null != list && list.size() != 0) {
for (AppStart app : list) {
int is_slide = app.getIs_slide();
String app_package = app.getApp_package();
if (is_slide == 1) {
if (!slide_allow.contains(app_package)) {
slide_allow += app_package + ",";
}
} else {
if (!slide_not.contains(app_package)) {
slide_not += app_package + ",";
}
}
}
if (!TextUtils.isEmpty(slide_allow) && slide_allow.endsWith(",")) { if (!TextUtils.isEmpty(slide_allow) && slide_allow.endsWith(",")) {
slide_allow = slide_allow.substring(0, slide_allow.length() - 1); slide_allow = slide_allow.substring(0, slide_allow.length() - 1);
} }
@@ -328,69 +384,48 @@ public class HTTPInterface {
} }
} }
private static void setInvalid(Context context) { //隐藏显示app
boolean qch_app_power_on = Settings.System.putString(context.getContentResolver(), "qch_app_power_on", "Invalid"); private static void setAppHide(Context context, List<AppStart> list) {
boolean qch_jgy_network_allow = Settings.System.putString(context.getContentResolver(), "qch_jgy_network_allow", "Invalid"); PackageManager pm = context.getPackageManager();
boolean qch_jgy_network_disallow = Settings.System.putString(context.getContentResolver(), "qch_jgy_network_disallow", "Invalid"); if (null != list && list.size() != 0) {
boolean writeSucceed = Settings.System.putString(context.getContentResolver(), "qch_disable_slide", "Invalid"); 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);
} else {
pm.setApplicationEnabledSetting(app_package, PackageManager.COMPONENT_ENABLED_STATE_DEFAULT, 0);
}
} catch (Exception e) {
Log.e("setAppHide", "setAppHide: " + e.getMessage());
}
}
}
} }
//应用内网页管控
public static void getAppJump(final Context context) { public static void setAPPinsideBrowser(Context context, List<AppStart> list) {
APPJump appJump = NetWorkManager.getAppJumpControl();
appJump.getSNJump(Utils.getSerial())
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<BaseResponse<List<AppJump>>>() {
@Override
public void onSubscribe(@NonNull Disposable d) {
}
@Override
public void onNext(@NonNull BaseResponse<List<AppJump>> listBaseResponse) {
int code = listBaseResponse.code;
if (code == 200) {
List<AppJump> list = listBaseResponse.data;
setAPPinsideBrowser(context, list);
} else {
sendAllweb(context);
sendwebUrl(context);
}
}
@Override
public void onError(@NonNull Throwable e) {
Log.e("getAppJump", "onError: " + e.getMessage());
}
@Override
public void onComplete() {
}
});
}
public static void setAPPinsideBrowser(Context context, List<AppJump> list) {
String packageList = ""; String packageList = "";
String urlList = ""; String urlList = "";
for (AppJump appJump : list) { for (AppStart app : list) {
if (TextUtils.isEmpty(appJump.getAddress())) { if (TextUtils.isEmpty(app.getAddress())) {
packageList += appJump.getApp_package() + ","; packageList += app.getApp_package() + ",";
} else { } else {
urlList += appJump.toString() + ";"; urlList += app.getApp_package() + "," + app.getAddress() + ";";
} }
} }
if (!TextUtils.isEmpty(packageList)) { if (!TextUtils.isEmpty(packageList)) {
//app内所有的网页禁止 // //app内所有的网页禁止
packageList = packageList.substring(0, packageList.length() - 1); // packageList = packageList.substring(0, packageList.length() - 1);
//去掉多余的, // //去掉多余的,
Log.e("setAppinsideWeb ", "packageList:" + packageList); // Log.e("setAppinsideWeb ", "packageList:" + packageList);
Intent qch_app_website = new Intent("qch_app_website") // Intent qch_app_website = new Intent("qch_app_website")
.setPackage("com.android.settings"); // .setPackage("com.android.settings");
qch_app_website.putExtra("package_name", packageList); // qch_app_website.putExtra("package_name", packageList);
context.sendBroadcast(qch_app_website); // context.sendBroadcast(qch_app_website);
sendAllweb(context);
} else { } else {
sendAllweb(context); sendAllweb(context);
} }
@@ -408,6 +443,44 @@ public class HTTPInterface {
} }
} }
//应用ID管控
public static void setAPPIDJump(Context context, List<AppStart> list) {
String ids = "";
String packages = "";
if (null != list && list.size() != 0) {
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 + ",";
}
}
if (TextUtils.isEmpty(ids)) {
Settings.System.putString(context.getContentResolver(), "qch_app_forbid_id", "Invalid");
Settings.System.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);
}
}
}
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");
}
private static void sendAllweb(Context context) { private static void sendAllweb(Context context) {
Intent intent = new Intent("qch_app_website") Intent intent = new Intent("qch_app_website")
.setPackage("com.android.settings"); .setPackage("com.android.settings");
@@ -422,7 +495,7 @@ public class HTTPInterface {
context.sendBroadcast(intent); context.sendBroadcast(intent);
} }
public static void updateAdminInfo(Context context) { synchronized public static void updateAdminInfo(Context context) {
String address = String.valueOf(SPUtils.get(context, "AmapAddress", "-")); String address = String.valueOf(SPUtils.get(context, "AmapAddress", "-"));
String longitude = String.valueOf(SPUtils.get(context, "longitude", "0")); String longitude = String.valueOf(SPUtils.get(context, "longitude", "0"));
String latitude = String.valueOf(SPUtils.get(context, "latitude", "0")); String latitude = String.valueOf(SPUtils.get(context, "latitude", "0"));
@@ -449,6 +522,8 @@ public class HTTPInterface {
@Override @Override
public void onNext(@NonNull BaseResponse baseResponse) { public void onNext(@NonNull BaseResponse baseResponse) {
// Log.e("updateAdminInfo", "onNext: " + baseResponse.toString()); // Log.e("updateAdminInfo", "onNext: " + baseResponse.toString());
Log.e("updateAdminInfo", "onNext: " + baseResponse.msg);
} }
@Override @Override
@@ -552,7 +627,9 @@ public class HTTPInterface {
String packageList = ""; String packageList = "";
PackageManager pm = context.getPackageManager(); PackageManager pm = context.getPackageManager();
for (AppInfo appInfo : list) { for (AppInfo appInfo : list) {
packageList += appInfo.getApp_package() + ","; if (!packageList.contains(appInfo.getApp_package())) {
packageList += appInfo.getApp_package() + ",";
}
PackageInfo info = null; PackageInfo info = null;
try { try {
info = pm.getPackageInfo(appInfo.getApp_package(), 0); info = pm.getPackageInfo(appInfo.getApp_package(), 0);
@@ -652,6 +729,85 @@ 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<BaseResponse<SystemSettings>>() {
@Override
public void onSubscribe(@NonNull Disposable d) {
}
@Override
public void onNext(@NonNull BaseResponse<SystemSettings> systemSettingsBaseResponse) {
int code = systemSettingsBaseResponse.code;
if (code == 200) {
SystemSettings settings = systemSettingsBaseResponse.data;
Utils.setSystemSetting(context, settings.toString());
}
}
@Override
public void onError(@NonNull Throwable e) {
Log.e("getSystemSettings", "onError: " + e.getMessage());
}
@Override
public void onComplete() {
}
});
}
synchronized public static void getTimeControl(final Context context) {
TimeControl timeControl = NetWorkManager.getTimeControl();
timeControl.getTimeControl(Utils.getSerial())
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<BaseResponse>() {
@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);
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());
}
} else {
TimeUtils.setEmpty(context);
TimeUtils.ContralTime c = TimeUtils.getDefaltContralTime(context);
if (null != c) {
Log.e("getTimeControl", c.toString());
}
}
}
@Override
public void onError(Throwable e) {
Log.e("getTimeControl", "onError: " + e.getMessage());
}
@Override
public void onComplete() {
Intent intent = new Intent();
intent.setAction(InitJpushServer.TimeChangedReceiver.ACTION_UPDATE);
context.sendBroadcast(intent);
}
});
}
//获取设备信息接口 //获取设备信息接口
// public static synchronized void checkDevicesInfo(final Handler handler) { // public static synchronized void checkDevicesInfo(final Handler handler) {
// OkGo.<String>get(UrlAddress.SNINFO) // OkGo.<String>get(UrlAddress.SNINFO)

View File

@@ -13,8 +13,11 @@ import com.info.sn.network.api.NewestAppUpdate;
import com.info.sn.network.api.QueryAllApp; import com.info.sn.network.api.QueryAllApp;
import com.info.sn.network.api.QuerySnAppStart; import com.info.sn.network.api.QuerySnAppStart;
import com.info.sn.network.api.SNInfo; 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.Setting;
import com.info.sn.network.api.TimeControl;
import com.info.sn.network.api.UpdateAdminSn; import com.info.sn.network.api.UpdateAdminSn;
import com.info.sn.network.api.UploadScreenshot;
import java.io.File; import java.io.File;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
@@ -63,6 +66,10 @@ public class NetWorkManager {
private static UpdateAdminSn updateAdminSnControl; private static UpdateAdminSn updateAdminSnControl;
private static QueryAllApp queryAllAppControl; private static QueryAllApp queryAllAppControl;
private static NewestAppUpdate newestAppUpdateControl; private static NewestAppUpdate newestAppUpdateControl;
private static UploadScreenshot uploadScreenshotControl;
private static ScreenLock getScreenLockControl;
private static TimeControl getTimeControl;
public static SNInfo getsnInfoControl() { public static SNInfo getsnInfoControl() {
if (null == snInfoControl) { if (null == snInfoControl) {
@@ -220,5 +227,42 @@ public class NetWorkManager {
return newestAppUpdateControl; 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;
}
} }

View File

@@ -35,4 +35,10 @@ public class UrlAddress {
//发送卸载或者安装信息 //发送卸载或者安装信息
public final static String GET_NEWESTAPPUPDATE = ROOT_URL + "app/newestAppUpdate"; 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_SCREEN_LOCK = ROOT_URL + "sn/getScreenshot";
//上传屏幕截图
public final static String GET_TIME_CONTROL = ROOT_URL + "sn/getTimeControl";
//上传屏幕截图
} }

View File

@@ -13,9 +13,7 @@ public interface AddAppInstall {
@POST(UrlAddress.SEND_INSTALLEDORREMOVED) @POST(UrlAddress.SEND_INSTALLEDORREMOVED)
Observable<BaseResponse> installorRemove( Observable<BaseResponse> installorRemove(
@Field("sn") String sn, @Field("sn") String sn,
@Field("packageName") String packageName, @Field("app") String jsonString
@Field("versionCode") int versionCode,
@Field("type") int type
); );
} }

View File

@@ -0,0 +1,15 @@
package com.info.sn.network.api;
import com.info.sn.bean.BaseResponse;
import com.info.sn.network.UrlAddress;
import io.reactivex.Observable;
import retrofit2.http.GET;
import retrofit2.http.Query;
public interface ScreenLock {
@GET(UrlAddress.GET_SCREEN_LOCK)
Observable<BaseResponse> getScreenshot(
@Query("sn") String sn
);
}

View File

@@ -0,0 +1,15 @@
package com.info.sn.network.api;
import com.info.sn.bean.BaseResponse;
import com.info.sn.network.UrlAddress;
import io.reactivex.Observable;
import retrofit2.http.GET;
import retrofit2.http.Query;
public interface TimeControl {
@GET(UrlAddress.GET_TIME_CONTROL)
Observable<BaseResponse> getTimeControl(
@Query("sn") String sn
);
}

View File

@@ -0,0 +1,22 @@
package com.info.sn.network.api;
import com.info.sn.bean.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;
import retrofit2.http.Query;
public interface UploadScreenshot {
@Multipart
@POST(UrlAddress.UPLOAD_SCREEN_SNAPSHOT)
Observable<BaseResponse> uploadScreenshot(
@Query("sn") String sn,
@Part MultipartBody.Part file
);
}

View File

@@ -3,24 +3,85 @@ package com.info.sn.receiver;
import android.content.BroadcastReceiver; import android.content.BroadcastReceiver;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.os.Build;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.info.sn.bean.AppUploadInfo;
import com.info.sn.network.HTTPInterface; import com.info.sn.network.HTTPInterface;
import com.info.sn.utils.ApkUtils; import com.info.sn.utils.ApkUtils;
import java.util.ArrayList;
import java.util.List;
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.disposables.Disposable;
import io.reactivex.schedulers.Schedulers;
public class APKinstallReceiver extends BroadcastReceiver { public class APKinstallReceiver extends BroadcastReceiver {
@Override @Override
public void onReceive(Context context, Intent intent) { public void onReceive(final Context context, Intent intent) {
// TODO: This method is called when the BroadcastReceiver is receiving // TODO: This method is called when the BroadcastReceiver is receiving
// an Intent broadcast. // an Intent broadcast.
String action = intent.getAction(); String action = intent.getAction();
if (action.equals(Intent.ACTION_PACKAGE_ADDED) || action.equals(Intent.ACTION_PACKAGE_REPLACED)) { 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:", ""); String packageName = intent.getDataString().replace("package:", "");
int code = ApkUtils.getAppVersionCode(context,packageName); Observable.create(new ObservableOnSubscribe<List<AppUploadInfo>>() {
HTTPInterface.SendAppInstall(packageName,code ,1); @Override
} else if (action.equals(Intent.ACTION_PACKAGE_REMOVED)) { public void subscribe(ObservableEmitter<List<AppUploadInfo>> emitter) throws Exception {
String packageName = intent.getDataString().replace("package:", ""); PackageManager pm = context.getPackageManager();
HTTPInterface.SendAppInstall(packageName,0 ,2); List<PackageInfo> list = pm.getInstalledPackages(0);
List<AppUploadInfo> 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<List<AppUploadInfo>>() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onNext(List<AppUploadInfo> appUploadInfos) {
String json = JSONArray.toJSONString(appUploadInfos);
HTTPInterface.SendAppInstall(json);
}
@Override
public void onError(Throwable e) {
}
@Override
public void onComplete() {
}
});
} }
} }
} }

View File

@@ -33,7 +33,7 @@ public class GuardService extends Service {
@Override @Override
public void onServiceConnected(ComponentName componentName, IBinder iBinder) { public void onServiceConnected(ComponentName componentName, IBinder iBinder) {
LogUtils.e(TAG, "GuardService:建立链接"); LogUtils.e(TAG, "GuardService:建立链接");
boolean isServiceRunning = ServiceAliveUtils.isServiceAlice(); boolean isServiceRunning = ServiceAliveUtils.isServiceAlice(getClass().getName());
if (!isServiceRunning) { if (!isServiceRunning) {
Intent i = new Intent(GuardService.this, MyDownloadService.class); Intent i = new Intent(GuardService.this, MyDownloadService.class);
startService(i); startService(i);

View File

@@ -1,25 +1,39 @@
package com.info.sn.service; package com.info.sn.service;
import android.app.Service; import android.app.Service;
import android.content.BroadcastReceiver;
import android.content.Context; import android.content.Context;
import android.content.Intent; 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.os.IBinder;
import android.provider.Settings;
import android.text.TextUtils;
import android.util.DisplayMetrics;
import android.util.Log; import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.WindowManager;
import android.widget.Button;
import android.widget.TextView;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.info.sn.KeepAliveConnection; import com.info.sn.KeepAliveConnection;
import com.info.sn.activity.MainActivity; import com.info.sn.R;
import com.info.sn.bean.AppInfo;
import com.info.sn.bean.BaseResponse; import com.info.sn.bean.BaseResponse;
import com.info.sn.network.HTTPInterface; import com.info.sn.network.HTTPInterface;
import com.info.sn.network.NetWorkManager; import com.info.sn.network.NetWorkManager;
import com.info.sn.network.api.ForceInstall; import com.info.sn.network.api.ScreenLock;
import com.info.sn.utils.ApkUtils;
import com.info.sn.utils.ForegroundAppUtil;
import com.info.sn.utils.TimeUtils;
import com.info.sn.utils.Utils; import com.info.sn.utils.Utils;
import java.util.List;
import io.reactivex.Observer; import io.reactivex.Observer;
import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.annotations.NonNull;
import io.reactivex.disposables.Disposable; import io.reactivex.disposables.Disposable;
import io.reactivex.schedulers.Schedulers; import io.reactivex.schedulers.Schedulers;
@@ -40,6 +54,19 @@ public class InitJpushServer extends Service {
@Override @Override
public void onCreate() { public void onCreate() {
super.onCreate(); super.onCreate();
registReceiver();
registerTimeReceiver();
}
@Override
public void onDestroy() {
super.onDestroy();
if (null != mTimeChangedReceiver) {
unregisterReceiver(mTimeChangedReceiver);
}
if (null != lockScreenReceiver) {
unregisterReceiver(lockScreenReceiver);
}
} }
@Override @Override
@@ -48,9 +75,234 @@ public class InitJpushServer extends Service {
HTTPInterface.getAllappPackage(InitJpushServer.this); HTTPInterface.getAllappPackage(InitJpushServer.this);
HTTPInterface.getForceInstall(InitJpushServer.this); HTTPInterface.getForceInstall(InitJpushServer.this);
HTTPInterface.checkUpdate(InitJpushServer.this); HTTPInterface.checkUpdate(InitJpushServer.this);
HTTPInterface.checkUpdate(InitJpushServer.this,"com.appstore.uiui"); HTTPInterface.checkUpdate(InitJpushServer.this, "com.appstore.uiui");
getScreenLockState();
HTTPInterface.getTimeControl(InitJpushServer.this);
return START_STICKY; return START_STICKY;
} }
private void getScreenLockState() {
ScreenLock getScreenLock = NetWorkManager.getScreenLockControl();
getScreenLock.getScreenshot(Utils.getSerial())
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<BaseResponse>() {
@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;
} else {
if (!timelocked) {
hideFloatingWindow();
}
screenlocked = false;
}
} else {
if (!timelocked) {
hideFloatingWindow();
}
screenlocked = false;
}
}
@Override
public void onError(Throwable e) {
}
@Override
public void onComplete() {
}
});
}
private static WindowManager windowManager;
private View topView;
boolean screenlocked = false;
boolean timelocked = false;
private void showFloatingWindow(String name) {
if (Settings.canDrawOverlays(this)) {
// 获取WindowManager服务
if (null == windowManager) {
windowManager = (WindowManager) getSystemService(WINDOW_SERVICE);
}
DisplayMetrics dm = new DisplayMetrics();
windowManager.getDefaultDisplay().getRealMetrics(dm);
int width = dm.widthPixels; // 屏幕宽度(像素)
int height = dm.heightPixels; // 屏幕高度(像素)
// 新建悬浮窗控件
final Button button = new Button(getApplicationContext());
button.setText("霸屏测试");
button.setAlpha(0.9f);
button.setBackgroundColor(Color.WHITE);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// windowManager.removeView(button);
}
});
if (null == topView) {
topView = LayoutInflater.from(getApplicationContext()).inflate(R.layout.activity_top, null);
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_APPLICATION_OVERLAY;
} else {
layoutParams.type = WindowManager.LayoutParams.TYPE_PHONE;
}
layoutParams.flags = WindowManager.LayoutParams.FLAG_BLUR_BEHIND;
layoutParams.format = PixelFormat.RGBA_8888;
layoutParams.width = WindowManager.LayoutParams.MATCH_PARENT;
layoutParams.height = WindowManager.LayoutParams.MATCH_PARENT;
layoutParams.x = 0;
layoutParams.y = 0;
// 将悬浮窗控件添加到WindowManager
windowManager.addView(topView, layoutParams);
topView.setTag("added");
}
}
private void hideFloatingWindow() {
if (null == windowManager) {
return;
}
if (null != topView) {
windowManager.removeView(topView);
topView = null;
}
}
private LockScreenReceiver lockScreenReceiver;
private void registReceiver() {
if (null == lockScreenReceiver) {
lockScreenReceiver = new LockScreenReceiver();
IntentFilter filter = new IntentFilter();
filter.setPriority(IntentFilter.SYSTEM_HIGH_PRIORITY);
filter.addAction(LockScreenReceiver.ACTION_LOCK);
filter.addAction(LockScreenReceiver.ACTION_UNLOCK);
registerReceiver(lockScreenReceiver, filter);
}
}
public class LockScreenReceiver extends BroadcastReceiver {
public static final String ACTION_LOCK = "LockScreenReceiver_lockscreen";
public static final String ACTION_UNLOCK = "LockScreenReceiver_unlockscreen";
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (TextUtils.isEmpty(action)) {
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);
}
}
} }

View File

@@ -52,7 +52,7 @@ public class StepService extends Service {
@Override @Override
public void onServiceConnected(ComponentName componentName, IBinder iBinder) { public void onServiceConnected(ComponentName componentName, IBinder iBinder) {
LogUtils.e(TAG, "StepService:建立链接"); LogUtils.e(TAG, "StepService:建立链接");
boolean isServiceRunning = ServiceAliveUtils.isServiceAlice(); boolean isServiceRunning = ServiceAliveUtils.isServiceAlice(getClass().getName());
if (!isServiceRunning) { if (!isServiceRunning) {
Intent i = new Intent(StepService.this, MyDownloadService.class); Intent i = new Intent(StepService.this, MyDownloadService.class);
startService(i); startService(i);

View File

@@ -87,7 +87,7 @@ public class ApkUtils {
public static void openApp(Context context, String packageName) { public static void openApp(Context context, String packageName) {
Intent intent = context.getPackageManager().getLaunchIntentForPackage(packageName); Intent intent = context.getPackageManager().getLaunchIntentForPackage(packageName);
if (intent != null) { if (intent != null) {
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); // intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent); context.startActivity(intent);
} }
} }
@@ -631,12 +631,12 @@ public class ApkUtils {
} catch (Settings.SettingNotFoundException e) { } catch (Settings.SettingNotFoundException e) {
e.printStackTrace(); e.printStackTrace();
} }
PackageManager pm = context.getPackageManager(); // PackageManager pm = context.getPackageManager();
if (hide == 0) { // if (hide == 0) {
pm.setApplicationEnabledSetting(pkage, PackageManager.COMPONENT_ENABLED_STATE_DEFAULT, 0); // pm.setApplicationEnabledSetting(pkage, PackageManager.COMPONENT_ENABLED_STATE_DEFAULT, 0);
} else { // } else {
pm.setApplicationEnabledSetting(pkage, PackageManager.COMPONENT_ENABLED_STATE_DISABLED, 0); // pm.setApplicationEnabledSetting(pkage, PackageManager.COMPONENT_ENABLED_STATE_DISABLED, 0);
} // }
} }
@@ -676,8 +676,10 @@ public class ApkUtils {
continue; continue;
} }
// ApkUtils.getStartActivityName(context, s); // ApkUtils.getStartActivityName(context, s);
installedList += s + ","; if (!installedList.contains(s)) {
Log.e("addShortcut", s); installedList += s + ",";
Log.e("addShortcut", s);
}
} }
if (installedList.length() != 0) { if (installedList.length() != 0) {
installedList = installedList.substring(0, installedList.length() - 1); installedList = installedList.substring(0, installedList.length() - 1);
@@ -697,6 +699,7 @@ public class ApkUtils {
String store = "com.jiaoguanyi.store"; String store = "com.jiaoguanyi.store";
String infosn = "com.info.sn"; String infosn = "com.info.sn";
String appstoreuiui = "com.appstore.uiui"; String appstoreuiui = "com.appstore.uiui";
String desktop = "com.android.uiuios";
String jgy1 = "com.uiuios.jgy1"; String jgy1 = "com.uiuios.jgy1";
String jgy2 = "com.uiuios.jgy2"; String jgy2 = "com.uiuios.jgy2";
if (!TextUtils.isEmpty(result)) { if (!TextUtils.isEmpty(result)) {
@@ -718,6 +721,9 @@ public class ApkUtils {
if (!result.contains(appstoreuiui)) { if (!result.contains(appstoreuiui)) {
result = result + "," + appstoreuiui; result = result + "," + appstoreuiui;
} }
if (!result.contains(desktop)) {
result = result + "," + desktop;
}
boolean qch_app_forbid = Settings.System.putString(context.getContentResolver(), "qch_app_forbid", result); boolean qch_app_forbid = Settings.System.putString(context.getContentResolver(), "qch_app_forbid", result);
Log.e("fht", "qch_app_forbid :" + result + ":" + qch_app_forbid); Log.e("fht", "qch_app_forbid :" + result + ":" + qch_app_forbid);
} else { } else {

View File

@@ -0,0 +1,103 @@
package com.info.sn.utils;
import android.text.TextUtils;
import android.util.Log;
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
public class CmdUtil {
private static final String TAG = "CmdUtil";
private static final String COMMAND_SH = "sh";
private static final String COMMAND_EXIT = "exit\n";
private static final String COMMAND_LINE_END = "\n";
/**
* 运行命令
*
* @param command 命令
* @return 结果
*/
public static Result execute(String command) {
Log.i(TAG, "execute() command = " + command);
Result result = new Result();
if (TextUtils.isEmpty(command)) {
Log.w(TAG, "WARNING: command should not be null or empty");
return result;
}
Process process = null;
DataOutputStream dos = null;
try {
process = Runtime.getRuntime().exec(COMMAND_SH);
dos = new DataOutputStream(process.getOutputStream());
dos.write(command.trim().getBytes());
dos.writeBytes(COMMAND_LINE_END);
dos.flush();
dos.writeBytes(COMMAND_EXIT);
dos.flush();
result.code = process.waitFor();
result.success = readBuffer(new BufferedReader(new InputStreamReader(process.getInputStream())));
result.error = readBuffer(new BufferedReader(new InputStreamReader(process.getErrorStream())));
Log.i(TAG, "result = " + result);
} catch (IOException ioe) {
ioe.printStackTrace();
Log.e(TAG, ioe.getMessage());
} catch (InterruptedException ie) {
ie.printStackTrace();
Log.e(TAG, ie.getMessage());
} finally {
try {
if (null != dos) {
dos.close();
}
} catch (IOException ioe) {
ioe.printStackTrace();
Log.e(TAG, ioe.getMessage());
}
if (null != process) {
process.destroy();
}
}
return result;
}
private static String readBuffer(BufferedReader bufferedReader) throws IOException {
StringBuilder sb = new StringBuilder();
String s;
while ((s = bufferedReader.readLine()) != null) {
sb.append(s);
}
return sb.toString();
}
/**
* Command执行结果
*/
public static final class Result {
public static final int SUCCESS = 0;
public static final int ERROR = -1;
public int code = ERROR;
String error;
String success;
@Override
public String toString() {
return "Result{" +
"code=" + code +
", error='" + error + '\'' +
", success='" + success + '\'' +
'}';
}
}
}

View File

@@ -0,0 +1,114 @@
package com.info.sn.utils;
import android.app.ActivityManager;
import android.app.usage.UsageStats;
import android.app.usage.UsageStatsManager;
import android.content.Context;
import android.content.Intent;
import android.os.Build;
import android.provider.Settings;
import android.text.TextUtils;
import java.util.List;
public class ForegroundAppUtil {
private static final long END_TIME = System.currentTimeMillis();
private static final long TIME_INTERVAL = 7 * 24 * 60 * 60 * 1000L;
private static final long START_TIME = END_TIME - TIME_INTERVAL;
public static String getForegroundPackageName(Context context) {
//系统应用可以直接获取
ActivityManager mActivityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
List<ActivityManager.RunningTaskInfo> runningTaskInfos = mActivityManager.getRunningTasks(1);
return runningTaskInfos.get(0).topActivity.getPackageName();
}
/**
* 获取栈顶的应用包名
*/
public static String getForegroundActivityName(Context context) {
String currentClassName = "";
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
ActivityManager manager = (ActivityManager) context.getApplicationContext().getSystemService(Context.ACTIVITY_SERVICE);
currentClassName = manager.getRunningTasks(1).get(0).topActivity.getPackageName();
} else {
UsageStats initStat = getForegroundUsageStats(context, START_TIME, END_TIME);
if (initStat != null) {
currentClassName = initStat.getPackageName();
}
}
return currentClassName;
}
/**
* 判断当前应用是否在前台
*/
public static boolean isForegroundApp(Context context) {
return TextUtils.equals(getForegroundActivityName(context), context.getPackageName());
}
/**
* 获取时间段内,
*/
public static long getTotleForegroundTime(Context context) {
UsageStats usageStats = getCurrentUsageStats(context, START_TIME, END_TIME);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
return usageStats != null ? usageStats.getTotalTimeInForeground() : 0;
}
return 0;
}
/**
* 获取记录前台应用的UsageStats对象
*/
private static UsageStats getForegroundUsageStats(Context context, long startTime, long endTime) {
UsageStats usageStatsResult = null;
if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
List<UsageStats> usageStatses = getUsageStatsList(context, startTime, endTime);
if (usageStatses == null || usageStatses.isEmpty()) return null;
for (UsageStats usageStats : usageStatses) {
if (usageStatsResult == null || usageStatsResult.getLastTimeUsed() < usageStats.getLastTimeUsed()) {
usageStatsResult = usageStats;
}
}
}
return usageStatsResult;
}
/**
* 获取记录当前应用的UsageStats对象
*/
public static UsageStats getCurrentUsageStats(Context context, long startTime, long endTime) {
if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
List<UsageStats> usageStatses = getUsageStatsList(context, startTime, endTime);
if (usageStatses == null || usageStatses.isEmpty()) return null;
for (UsageStats usageStats : usageStatses) {
if (TextUtils.equals(usageStats.getPackageName(), context.getPackageName())) {
return usageStats;
}
}
}
return null;
}
/**
* 通过UsageStatsManager获取List<UsageStats>集合
*/
public static List<UsageStats> getUsageStatsList(Context context, long startTime, long endTime) {
if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
UsageStatsManager manager = (UsageStatsManager) context.getApplicationContext().getSystemService(Context.USAGE_STATS_SERVICE);
//UsageStatsManager.INTERVAL_WEEKLYUsageStatsManager的参数定义了5个具体查阅源码
List<UsageStats> usageStatses = manager.queryUsageStats(UsageStatsManager.INTERVAL_BEST, startTime, endTime);
if (usageStatses == null || usageStatses.size() == 0) {// 没有权限,获取不到数据
Intent intent = new Intent(Settings.ACTION_USAGE_ACCESS_SETTINGS);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.getApplicationContext().startActivity(intent);
return null;
}
return usageStatses;
}
return null;
}
}

View File

@@ -2,23 +2,24 @@ package com.info.sn.utils;
import android.app.ActivityManager; import android.app.ActivityManager;
import android.content.Context; import android.content.Context;
import android.util.Log;
import com.info.sn.base.MyApplication; import com.info.sn.base.MyApplication;
public class ServiceAliveUtils { public class ServiceAliveUtils {
public static boolean isServiceAlice(String className) {
public static boolean isServiceAlice() {
boolean isServiceRunning = false; boolean isServiceRunning = false;
ActivityManager manager = ActivityManager manager =
(ActivityManager) MyApplication.getAppContext().getSystemService(Context.ACTIVITY_SERVICE); (ActivityManager) MyApplication.getAppContext().getSystemService(Context.ACTIVITY_SERVICE);
if (manager == null) { if (manager == null) {
return true; return false;
} }
for (ActivityManager.RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)) { for (ActivityManager.RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)) {
if ("demo.lgm.com.keepalivedemo.service.DownloadService".equals(service.service.getClassName())) { if (className.equals(service.service.getClassName())) {
isServiceRunning = true; isServiceRunning = true;
} }
} }
Log.e("ServiceAliveUtils", "className isServiceAlice: " + isServiceRunning);
return isServiceRunning; return isServiceRunning;
} }
} }

View File

@@ -0,0 +1,172 @@
package com.info.sn.utils;
import android.content.Context;
import android.content.Intent;
import android.text.TextUtils;
import androidx.annotation.NonNull;
import com.info.sn.service.InitJpushServer;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
public class TimeUtils {
private static DateFormat df = new SimpleDateFormat("HH:mm");
public static final String START_TIME_KEY = "START_TIME";
public static final String END_TIME_KEY = "END_TIME";
public static long dayTime = 60 * 60 * 24 * 1000;
public static String getNowTime() {
long nowTime = System.currentTimeMillis();
DateFormat df = ContralTime.getDf();
return df.format(nowTime);
}
// public static boolean CurrentInTimeScope(ContralTime contralTime) {
// boolean result = true;
// final long aDayInMillis = 1000 * 60 * 60 * 24;
// long currentTimeMillis = System.currentTimeMillis();
//
// }
public static ContralTime String2ContralTime(Context context, @NonNull String timeText) {
DateFormat df = ContralTime.getDf();
String[] time = timeText.trim().split("-");
if (time.length != 2) {
throw new RuntimeException("Time format error!");
}
try {
SPUtils.put(context, START_TIME_KEY, time[0].trim());
SPUtils.put(context, END_TIME_KEY, time[1].trim());
Date startDate = df.parse(time[0].trim());
Date endDate = df.parse(time[1].trim());
ContralTime contralTime = new ContralTime();
// if (date1.getTime() < date2.getTime()) {
contralTime.setStartTime(df.format(startDate));
contralTime.setEndTime(df.format(endDate));
// } else {
// contralTime.setStartTime(df.format(date2));
// contralTime.setEndTime(df.format(date1));
// }
return contralTime;
} catch (ParseException e) {
e.printStackTrace();
return null;
}
}
public static ContralTime getDefaltContralTime(Context context) {
String startTime = (String) SPUtils.get(context, START_TIME_KEY, "00:00");
String endTime = (String) SPUtils.get(context, END_TIME_KEY, "00:00");
if (null == startTime || null == endTime || (startTime.equals("00:00") && endTime.equals("00:00"))) {
return null;
} else {
try {
Date startDate = df.parse(startTime.trim());
Date endDate = df.parse(endTime.trim());
ContralTime contralTime = new ContralTime();
contralTime.setStartTime(df.format(startDate));
contralTime.setEndTime(df.format(endDate));
return contralTime;
} catch (ParseException e) {
e.printStackTrace();
return null;
}
}
}
public static void setEmpty(Context context) {
SPUtils.put(context, START_TIME_KEY, "00:00");
SPUtils.put(context, END_TIME_KEY, "00:00");
Intent intent = new Intent();
intent.setAction(InitJpushServer.TimeChangedReceiver.ACTION_UPDATE);
context.sendBroadcast(intent);
}
public static class ContralTime {
//format HH:mm
static String startTime;
static String endTime;
public ContralTime() {
}
public ContralTime(String startT, String endT) {
startTime = startT;
endTime = endT;
}
public String getStartTime() {
return startTime;
}
public void setStartTime(String startT) {
startTime = startT;
}
public String getEndTime() {
return endTime;
}
public void setEndTime(String endT) {
endTime = endT;
}
public static DateFormat getDf() {
return df;
}
public static void setDf(DateFormat d) {
df = d;
}
public String getNowTimeString(long time) {
return df.format(new Date(time));
}
public boolean inControlTime(long time) {
return inControlTime(df.format(new Date(time)));
}
public boolean inControlTime(String time) {
if (TextUtils.isEmpty(time)) {
throw new RuntimeException("Time is empty");
} else {
if (!time.contains(":")) {
throw new RuntimeException("Time format error");
}
}
try {
Date startDate = df.parse(startTime);
Date endDate = df.parse(endTime);
Date nowDate = df.parse(time);
if (startDate.getTime() > endDate.getTime()) {
//开始时间大于结束时间 列 1600-0100
endDate.setTime(endDate.getTime() + dayTime);
}
if (nowDate.getTime() >= startDate.getTime() && nowDate.getTime() <= endDate.getTime()) {
return true;
} else {
return false;
}
} catch (ParseException e) {
e.printStackTrace();
}
return false;
}
@NonNull
@Override
public String toString() {
return startTime + "\t-\t" + endTime;
}
}
}

View File

@@ -1,86 +1,86 @@
package com.info.sn.utils; package com.info.sn.utils;
import android.annotation.SuppressLint; import android.annotation.SuppressLint;
import android.app.ActivityManager; import android.app.ActivityManager;
import android.app.admin.DevicePolicyManager; import android.app.admin.DevicePolicyManager;
import android.bluetooth.BluetoothAdapter; import android.bluetooth.BluetoothAdapter;
import android.content.ActivityNotFoundException; import android.content.ActivityNotFoundException;
import android.content.ComponentName; import android.content.ComponentName;
import android.content.Context; import android.content.Context;
import android.content.ContextWrapper; import android.content.ContextWrapper;
import android.content.Intent; import android.content.Intent;
import android.content.IntentFilter; import android.content.IntentFilter;
import android.content.SharedPreferences; import android.content.SharedPreferences;
import android.content.pm.ApplicationInfo; import android.content.pm.ApplicationInfo;
import android.content.pm.PackageInfo; import android.content.pm.PackageInfo;
import android.content.pm.PackageManager; import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException; import android.content.pm.PackageManager.NameNotFoundException;
import android.content.pm.ResolveInfo; import android.content.pm.ResolveInfo;
import android.content.res.Resources; import android.content.res.Resources;
import android.graphics.Bitmap; import android.graphics.Bitmap;
import android.graphics.BitmapFactory; import android.graphics.BitmapFactory;
import android.graphics.Canvas; import android.graphics.Canvas;
import android.graphics.Paint; import android.graphics.Paint;
import android.graphics.PorterDuff; import android.graphics.PorterDuff;
import android.graphics.PorterDuffXfermode; import android.graphics.PorterDuffXfermode;
import android.net.ConnectivityManager; import android.net.ConnectivityManager;
import android.net.NetworkInfo; import android.net.NetworkInfo;
import android.net.Uri; import android.net.Uri;
import android.net.wifi.WifiInfo; import android.net.wifi.WifiInfo;
import android.net.wifi.WifiManager; import android.net.wifi.WifiManager;
import android.os.BatteryManager; import android.os.BatteryManager;
import android.os.Build; import android.os.Build;
import android.os.StatFs; import android.os.StatFs;
import android.provider.Settings; import android.provider.Settings;
import android.telephony.TelephonyManager; import android.telephony.TelephonyManager;
import android.text.TextUtils; import android.text.TextUtils;
import android.text.format.Formatter; import android.text.format.Formatter;
import android.util.DisplayMetrics; import android.util.DisplayMetrics;
import android.util.Log; import android.util.Log;
import android.view.MotionEvent; import android.view.MotionEvent;
import android.view.View; import android.view.View;
import android.view.WindowManager; import android.view.WindowManager;
import android.view.inputmethod.InputMethodManager; import android.view.inputmethod.InputMethodManager;
import android.widget.EditText; import android.widget.EditText;
import android.widget.Toast; import android.widget.Toast;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.google.zxing.BarcodeFormat; import com.google.zxing.BarcodeFormat;
import com.google.zxing.EncodeHintType; import com.google.zxing.EncodeHintType;
import com.google.zxing.WriterException; import com.google.zxing.WriterException;
import com.google.zxing.common.BitMatrix; import com.google.zxing.common.BitMatrix;
import com.google.zxing.qrcode.QRCodeWriter; import com.google.zxing.qrcode.QRCodeWriter;
import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel; import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;
import com.info.sn.BuildConfig; import com.info.sn.BuildConfig;
import com.info.sn.R; import com.info.sn.R;
import com.info.sn.bean.SystemSettings; import com.info.sn.bean.SystemSettings;
import java.io.BufferedReader; import java.io.BufferedReader;
import java.io.File; import java.io.File;
import java.io.FileFilter; import java.io.FileFilter;
import java.io.FileReader; import java.io.FileReader;
import java.io.InputStreamReader; import java.io.InputStreamReader;
import java.io.LineNumberReader; import java.io.LineNumberReader;
import java.io.Reader; import java.io.Reader;
import java.lang.reflect.Method; import java.lang.reflect.Method;
import java.net.NetworkInterface; import java.net.NetworkInterface;
import java.net.SocketException; import java.net.SocketException;
import java.security.MessageDigest; import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException; import java.security.NoSuchAlgorithmException;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.Calendar; import java.util.Calendar;
import java.util.Collections; import java.util.Collections;
import java.util.Date; import java.util.Date;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.regex.Pattern; import java.util.regex.Pattern;
import static java.lang.System.getProperty; import static java.lang.System.getProperty;
public class Utils { public class Utils {
@@ -853,6 +853,7 @@ public class Utils {
//MTP模式usb_mtp //MTP模式usb_mtp
//Midi模式usb_midi //Midi模式usb_midi
String setting_usb = settings.getSetting_usb(); String setting_usb = settings.getSetting_usb();
Log.e("SystemSetting", "setting_usb:" + setting_usb);
if (!BuildConfig.DEBUG) { if (!BuildConfig.DEBUG) {
try { try {
boolean qch_usb_choose = Settings.System.putString(mContext.getContentResolver(), "qch_usb_choose", setting_usb); boolean qch_usb_choose = Settings.System.putString(mContext.getContentResolver(), "qch_usb_choose", setting_usb);
@@ -1085,6 +1086,14 @@ public class Utils {
Log.e(TAG, "setIcon: " + e.getMessage()); Log.e(TAG, "setIcon: " + e.getMessage());
} }
} }
/**
* @param context
* @param notList 禁止列表
* @param allowList 允许列表
* @return
*/
static synchronized public boolean writeDisableUpdateList(Context context, String[] notList, String[] allowList) { static synchronized public boolean writeDisableUpdateList(Context context, String[] notList, String[] allowList) {
String now = Settings.System.getString(context.getContentResolver(), "qch_app_forbid"); String now = Settings.System.getString(context.getContentResolver(), "qch_app_forbid");
String[] nowList; String[] nowList;
@@ -1110,7 +1119,7 @@ public class Utils {
} }
} }
} }
for (String s : notList) { for (String s : allowList) {
if (allList.indexOf(s) == -1) { if (allList.indexOf(s) == -1) {
allList.add(s); allList.add(s);
//没找到元素添加到白名单 //没找到元素添加到白名单
@@ -1396,9 +1405,9 @@ public class Utils {
} else { } else {
//10.0的不需要最小电量 //10.0的不需要最小电量
// if (getBatteryLevel(context) >= CommonDatas.MIN_POWER) { // if (getBatteryLevel(context) >= CommonDatas.MIN_POWER) {
Intent intent = new Intent("android.intent.action.MASTER_CLEAR"); Intent intent = new Intent("android.intent.action.MASTER_CLEAR");
// intent.setPackage("com.android.settings"); // intent.setPackage("com.android.settings");
context.sendBroadcast(intent); context.sendBroadcast(intent);
// } else { // } else {
// MySQLData.SetBooleanData(context, CommonDatas.IS_RESET, true); // MySQLData.SetBooleanData(context, CommonDatas.IS_RESET, true);
// } // }

View File

@@ -253,6 +253,7 @@ public class CustomDialog extends Dialog {
public void dismiss() { public void dismiss() {
super.dismiss(); super.dismiss();
Intent intent = new Intent(mContext, MainActivity.class); Intent intent = new Intent(mContext, MainActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
mContext.startActivity(intent); mContext.startActivity(intent);
} }
} }

View File

@@ -0,0 +1,21 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/gray"
tools:context=".activity.TopActivity">
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="TextView"
android:textSize="20sp"
android:textColor="@color/white"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -0,0 +1,21 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/gray"
tools:context=".activity.TopActivity">
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="TextView"
android:textSize="20sp"
android:textColor="@color/white"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -3,4 +3,9 @@
<color name="colorPrimary">#008577</color> <color name="colorPrimary">#008577</color>
<color name="colorPrimaryDark">#00574B</color> <color name="colorPrimaryDark">#00574B</color>
<color name="colorAccent">#D81B60</color> <color name="colorAccent">#D81B60</color>
<color name="white">#ffffff</color>
<color name="black">#000000</color>
<color name="gray">#80808080</color>
</resources> </resources>