version:2.2.3

update:
fix:
add:设置系统默认桌面接口和推送
This commit is contained in:
2021-09-02 18:25:49 +08:00
parent addda19fd5
commit a318e07db9
32 changed files with 1300 additions and 625 deletions

View File

@@ -41,9 +41,28 @@ android {
//新平台正式
newly {
flavorDimensions "default"
versionCode 520
versionCode 623
//versionCode 1037
versionName "2.2.0"
versionName "2.2.3"
/*********************************极光推送************************************/
manifestPlaceholders = [
JPUSH_PKGNAME: "com.jiaoguanyi.appstore",
JPUSH_APPKEY : "20f70bbeb78bad23eddd08d0", //JPush上注册的包名对应的appkey.
JPUSH_CHANNEL: "developer-default", //暂时填写默认值即可.
channel_value: "newly" ,
// AMAP_KEY: "546eb5646a65ac6a5b7d1c7456466e05"
]
/*********************************极光推送end************************************/
buildConfigField "String", "ROOT_URL", '"http://name.jiaoguanyi.cn/api/"'
buildConfigField "String", "WebsocketURL", '"ws://47.119.147.245:2345"'
buildConfigField "String", "SCREEN_URL", '"https://name.jiaoguanyi.cn:2018/wm/is_online"'
}
MTKnewly {
flavorDimensions "default"
versionCode 717
//versionCode 1037
versionName "2.1.7"
/*********************************极光推送************************************/
manifestPlaceholders = [
JPUSH_PKGNAME: "com.jiaoguanyi.appstore",
@@ -61,8 +80,10 @@ android {
//新平台测试
beta {
flavorDimensions "default"
versionCode 530
versionName "2.2.0"
versionCode 2
versionName "1.1"
// versionCode 633
// versionName "2.2.3"
/*********************************极光推送************************************/
manifestPlaceholders = [
JPUSH_PKGNAME: "com.jiaoguanyi.appstore",
@@ -166,10 +187,17 @@ android {
if (variant.buildType.name.endsWith('zhanRuiRelease')) {
variant.setIgnore(variant.getFlavors().get(0).name.equals('official')||variant.getFlavors().get(0).name.equals('zhongyou'))
}
if (variant.buildType.name.endsWith('zhanRuiDebug')) {
variant.setIgnore(variant.getFlavors().get(0).name.equals('official')||variant.getFlavors().get(0).name.equals('zhongyou'))
}
if (name.contains("MTKnewly")){
variant.setIgnore(variant.buildType.name.endsWith("zhanRuiRelease")||variant.buildType.name.endsWith("zhanRuiDebug")||variant.buildType.name.endsWith("zhanRuiUserdebug")
||variant.buildType.name.endsWith("zhanRuiUserdebugReleas"))
}
if (name.endsWith("newlyDebug")||name.endsWith("newlyRelease")){
variant.setIgnore(!name.contains("MTK"))
}
// // Icon recents is Go only
// if (name.contains("WithQuickstepIconRecents") && !name.contains("l3go")) {
// variant.setIgnore(true)
@@ -209,6 +237,16 @@ android {
signingConfig signingConfigs.zhanRuiUserdebug
}
zhanRuiUserdebugReleas.initWith(release)
zhanRuiUserdebugReleas {
manifestPlaceholders = [
AMAP_KEY: "546eb5646a65ac6a5b7d1c7456466e05"
]
buildConfigField "String", "platform", '"ZhanRui"'
debuggable true
signingConfig signingConfigs.zhanRuiUserdebug
}
debug {
buildConfigField "String", "platform", '"MTK"'
manifestPlaceholders = [
@@ -265,36 +303,47 @@ dependencies {
//implementation fileTree(include: ['*.jar'], dir: 'libs')
compileOnly files('src/main/libs/classes.jar')
implementation 'androidx.appcompat:appcompat:1.3.0'
implementation 'androidx.appcompat:appcompat:1.3.1'
implementation 'androidx.recyclerview:recyclerview:1.2.1'
implementation 'androidx.cardview:cardview:1.0.0'
implementation 'androidx.multidex:multidex:2.0.1'
implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
implementation 'androidx.localbroadcastmanager:localbroadcastmanager:1.0.0'
testImplementation 'junit:junit:4.13.1'
androidTestImplementation 'androidx.test.ext:junit:1.1.2'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'
testImplementation 'junit:junit:4.13.2'
androidTestImplementation 'androidx.test.ext:junit:1.1.3'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
implementation 'com.jakewharton:butterknife:10.1.0'
annotationProcessor 'com.jakewharton:butterknife-compiler:10.1.0'
implementation 'uk.co.chrisjenx:calligraphy:2.3.0'
implementation "org.java-websocket:Java-WebSocket:1.4.1"
implementation 'com.squareup.okhttp3:okhttp:4.6.0'
implementation 'com.squareup.okhttp3:okhttp:4.9.1'
implementation 'com.squareup.retrofit2:retrofit:2.9.0'
implementation 'com.squareup.retrofit2:converter-gson:2.9.0'
implementation 'com.squareup.retrofit2:adapter-rxjava2:2.4.0'
implementation 'io.reactivex.rxjava2:rxjava:2.2.5'
implementation 'io.reactivex.rxjava2:rxandroid:2.1.0'
implementation 'io.reactivex.rxjava2:rxjava:2.2.8'
implementation 'io.reactivex.rxjava2:rxandroid:2.1.1'
//implementation "com.uber.autodispose:autodispose:1.3.0"
//implementation "com.uber.autodispose:autodispose-android-archcomponents:1.3.0"
implementation 'com.google.code.gson:gson:2.8.6'
implementation 'com.google.code.gson:gson:2.8.7'
implementation 'com.google.zxing:core:3.3.0'
implementation 'cn.jiguang.sdk:jpush:3.8.6' // 此处以JPush 3.5.6 版本为例。
implementation 'cn.jiguang.sdk:jcore:2.6.0' // 此处以JCore 2.2.8 版本为例。
implementation 'com.alibaba:fastjson:1.2.70'
implementation 'com.alibaba:fastjson:1.2.76'
//逐渐弃用,几年没更新了
implementation 'com.lzy.net:okgo:2.1.4'
implementation 'com.lzy.net:okrx:0.1.2'
//implementation 'com.lzy.net:okserver:1.1.3'
implementation 'com.blankj:utilcode:1.23.7'
//okhttp框架
implementation 'com.github.liujingxing.rxhttp:rxhttp:2.6.5'
//implementation 'com.squareup.okhttp3:okhttp:4.9.1' //rxhttp v2.2.2版本起需要手动依赖okhttp
annotationProcessor 'com.github.liujingxing.rxhttp:rxhttp-compiler:2.6.5' //生成RxHttp类纯Java项目请使用annotationProcessor代替kapt
implementation 'com.github.liujingxing.rxlife:rxlife-coroutine:2.1.0' //管理协程生命周期,页面销毁,关闭请求
//rxjava2 (RxJava2/Rxjava3二选一使用asXxx方法时必须)
//implementation 'io.reactivex.rxjava2:rxjava:2.2.8'
//implementation 'io.reactivex.rxjava2:rxandroid:2.1.1'
implementation 'com.github.liujingxing.rxlife:rxlife-rxjava2:2.1.0' //管理RxJava2生命周期页面销毁关闭请求
implementation 'com.blankj:utilcodex:1.30.6'
implementation 'com.arialyy.aria:core:3.8.15'
annotationProcessor 'com.arialyy.aria:compiler:3.8.15'
//高德地图定位
@@ -321,5 +370,6 @@ preBuild {
}
}
//https://www.pianshen.com/article/93481144911/
//https://blog.csdn.net/dhl_1986/article/details/102856026
//使用系统编译后的framework.jar
}

View File

@@ -95,8 +95,8 @@
<service
android:name=".service.RemoteService"
android:enabled="true"
android:process=":remote"
android:exported="true" />
android:exported="true"
android:process=":remote" />
<service
android:name=".service.LogcatService"
android:enabled="true"

View File

@@ -8,6 +8,7 @@ import android.graphics.Bitmap;
import android.os.Bundle;
import android.os.Handler;
import android.provider.Settings;
import android.util.Log;
import android.view.View;
import android.webkit.WebView;
import android.webkit.WebViewClient;
@@ -22,6 +23,9 @@ import com.mjsheng.myappstore.service.LogcatService;
import com.mjsheng.myappstore.utils.JGYUtils;
import com.mjsheng.myappstore.utils.Logutils;
import com.mjsheng.myappstore.utils.ServiceAliveUtils;
import com.mjsheng.myappstore.utils.Utils;
import cn.jpush.android.api.JPushInterface;
public class HomeActivity extends AppCompatActivity {
@@ -58,7 +62,9 @@ public class HomeActivity extends AppCompatActivity {
sendBroadcast(intent);
}
});
debugTest();
if (BuildConfig.DEBUG) {
debugTest();
}
// return;
}
new Handler().postDelayed(new Runnable() {
@@ -83,7 +89,17 @@ public class HomeActivity extends AppCompatActivity {
String qch_app_forbid = Settings.System.getString(getContentResolver(), "qch_app_forbid");
Logutils.e(TAG, "debugTest: qch_app_forbid:" + qch_app_forbid);
Logutils.e(TAG, "debugTest: ip = " + JGYUtils.getInstance().getIPAddress());
Log.e(TAG, "debugTest: getPackage = " + Utils.getPackage());
Log.e(TAG, "debugTest: getMacAddress = " + Utils.getAndroid10MAC(this));
// Log.e(TAG, "debugTest: iptables = " + CmdUtil.execute("iptables -L -n" ).toString());
Log.e(TAG, "debugTest: " + Utils.getAndroid10MAC(this));
Log.e(TAG, "debugTest: " + JPushInterface.getRegistrationID(this));
Log.e(TAG, "debugTest: " + Utils.getCustomVersion());
Log.e(TAG, "debugTest: " + BuildConfig.VERSION_NAME);
Log.e(TAG, "debugTest: " + Utils.getAPPVersionName(this));
Log.e(TAG, "debugTest: " + Utils.getAndroid7MAC());
Log.e(TAG, "debugTest: launcher3 " + JGYUtils.getInstance().getStartClassName("com.android.launcher3"));
// try {
// new CacheUtils().cleanApplicationUserData(HomeActivity.this, "com.android.launcher3");
// } catch (Exception e) {
@@ -94,6 +110,11 @@ public class HomeActivity extends AppCompatActivity {
// mAm.killBackgroundProcesses("com.android.documentsui");
}
private void testRxhttp() {
// RxHttp.postForm(URLAddress.SET_WHITE_PACKAGE_LIST)
// .add("sn", Utils.getSerial())
// .
}
@SuppressLint("NewApi")
private void hideStatusBar() {

View File

@@ -7,7 +7,9 @@ import android.content.DialogInterface;
import android.content.Intent;
import android.content.IntentFilter;
import android.graphics.Bitmap;
import android.os.SystemClock;
import android.text.TextUtils;
import android.util.Log;
import android.view.KeyEvent;
import android.view.View;
import android.widget.Button;
@@ -17,6 +19,7 @@ import android.widget.TextView;
import androidx.localbroadcastmanager.content.LocalBroadcastManager;
import com.blankj.utilcode.util.NetworkUtils;
import com.google.gson.JsonObject;
import com.mjsheng.myappstore.BuildConfig;
import com.mjsheng.myappstore.R;
@@ -36,6 +39,7 @@ import java.util.concurrent.TimeUnit;
import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;
import cn.jpush.android.api.JPushInterface;
import io.reactivex.ObservableEmitter;
import io.reactivex.ObservableOnSubscribe;
import io.reactivex.Observer;
@@ -44,7 +48,7 @@ import io.reactivex.disposables.Disposable;
import rx.Observable;
import rx.android.schedulers.AndroidSchedulers;
public class MainActivity extends BaseActivity implements MainContact.MainView {
public class MainActivity extends BaseActivity implements MainContact.MainView, NetworkUtils.OnNetworkStatusChangedListener {
private static final String TAG = MainActivity.class.getSimpleName();
@BindView(R.id.imageView)
@@ -114,7 +118,7 @@ public class MainActivity extends BaseActivity implements MainContact.MainView {
String sn = Utils.getSerial();
tv_devsn.setText(sn);
checkSNError(sn);
String macaddr = Utils.getAndroid7MAC();
String macaddr = Utils.getAndroid10MAC(this);
if (TextUtils.isEmpty(macaddr)) {
tv_devmac.setText("获取失败");
} else {
@@ -153,7 +157,10 @@ public class MainActivity extends BaseActivity implements MainContact.MainView {
builder.setCancelable(true);
//设置正面按钮
builder.setPositiveButton("确定", (dialog, which) -> dialog.dismiss());
builder.show();
AlertDialog dialog = builder.create(); //创建AlertDialog对象
if (!this.isFinishing() && !dialog.isShowing()) {
dialog.show();
}
}
//执行所有接口耗时
@@ -161,9 +168,10 @@ public class MainActivity extends BaseActivity implements MainContact.MainView {
@Override
public void initData() {
JPushInterface.init(this);
registerMessageReceiver();
Logutils.e("getMacAddress", Utils.getAndroid7MAC());
timeMillis = System.currentTimeMillis();
Logutils.e("getMacAddress", Utils.getAndroid10MAC(this));
timeMillis = SystemClock.elapsedRealtime();
mPresenter.getLockedState();
}
@@ -201,6 +209,10 @@ public class MainActivity extends BaseActivity implements MainContact.MainView {
*/
@Override
public void setLockedState(boolean loocked) {
//发送设备mac地址和信息
mPresenter.sendMACAddress();
//设置极光推送别名
mPresenter.setJpushAlias();
if (loocked) {
iv_locked.setVisibility(View.VISIBLE);
iv_locked.setImageDrawable(getDrawable(R.drawable.locked));
@@ -210,13 +222,9 @@ public class MainActivity extends BaseActivity implements MainContact.MainView {
//如果正在执行,不执行
return;
}
//发送设备mac地址和信息
mPresenter.sendMACAddress();
//设置极光推送别名
mPresenter.setJpushAlias();
SaveListUtils.getList();
//获取系统管控
mPresenter.getSystemSettingbegin();
mPresenter.setJpushTags();
netWorkIsRunning = true;
} else {
iv_locked.setVisibility(View.VISIBLE);
@@ -263,12 +271,6 @@ public class MainActivity extends BaseActivity implements MainContact.MainView {
@Override
public void setAliasFinished() {
//设置极光推送tag
mPresenter.setJpushTags();
}
@Override
public void setTagsFinished() {
mPresenter.checkStoreUpdate();
}
@@ -277,16 +279,19 @@ public class MainActivity extends BaseActivity implements MainContact.MainView {
}
@Override
public void checkStoreUpdateFinished() {
mPresenter.checkInfoUpdate();
}
@Override
public void checkInfoUpdateFinished() {
mPresenter.checkTestUpdate();
}
@Override
public void checkTestUpdateFinished() {
mPresenter.getDefaultDesktop();
}
@Override
@@ -301,6 +306,21 @@ public class MainActivity extends BaseActivity implements MainContact.MainView {
}
}
/**
* @param noTag 为空没有错误都返回true
* 设备可以没有批次,但是没有批次相当于没有数据了,就不执行下面的请求了
*/
@Override
public void setTagsFinished(boolean noTag) {
if (noTag) {
Log.e(TAG, "setTagsFinished: " + "not set tag");
netWorkIsRunning = false;
Log.e(TAG, "SettingFinished: " + (SystemClock.elapsedRealtime() - timeMillis) + " ms");
} else {
mPresenter.getSystemSettingbegin();
}
}
private void showDialog(JsonObject jsonObject) {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("更新:");
@@ -378,6 +398,11 @@ public class MainActivity extends BaseActivity implements MainContact.MainView {
@Override
public void setSystemSettingFinished() {
mPresenter.getDefaultApp();
}
@Override
public void setDefaultAppFinished() {
mPresenter.getROMApp();
}
@@ -398,17 +423,17 @@ public class MainActivity extends BaseActivity implements MainContact.MainView {
@Override
public void setTopAppFinished() {
netWorkIsRunning = false;
Logutils.e(TAG, "SettingFinished: " + (System.currentTimeMillis() - timeMillis) + " ms");
}
@Override
public void setScreenLockStateFinished(boolean locked, String tips) {
mPresenter.getDefaultDesktop();
}
@Override
public void getDefaultDesktopFinished() {
netWorkIsRunning = false;
Log.e(TAG, "SettingFinished: " + (SystemClock.elapsedRealtime() - timeMillis) + " ms");
}
@Override
public void setScreenLockStateFinished(boolean locked, String tips) {
}
@@ -434,6 +459,7 @@ public class MainActivity extends BaseActivity implements MainContact.MainView {
protected void onDestroy() {
super.onDestroy();
mPresenter.detachView();
startService(new Intent(MainActivity.this, MainService.class));
}
@Override
@@ -523,6 +549,19 @@ public class MainActivity extends BaseActivity implements MainContact.MainView {
LocalBroadcastManager.getInstance(this).registerReceiver(mMessageReceiver, filter);
}
@Override
public void onDisconnected() {
Log.e("OnNetworkStatusChangedListener", "onDisconnected: ");
}
@Override
public void onConnected(NetworkUtils.NetworkType networkType) {
Log.e("OnNetworkStatusChangedListener", "onConnected: ");
timeMillis = SystemClock.elapsedRealtime();
//直接获取数据
mPresenter.getLockedState();
}
public static class MessageReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {

View File

@@ -8,6 +8,83 @@ import com.mjsheng.myappstore.base.BasePresenter;
import com.mjsheng.myappstore.base.BaseView;
public class MainContact {
public interface Presenter extends BasePresenter<MainView> {
//设置二维码
void getQRImage(String mac);
//获取学生信息
void getStudesInfo();
//获取设备锁定状态
void getLockedState();
//是否第一次联网
void getFirstConnect();
//关闭所有功能
void setDisableSetting();
//发送mac地址
void sendMACAddress();
//更新设备信息
void updateDeviceInfo();
//获取时间管控
void getSnTimeControl();
//获取电子书包激活码
void getEBagCode();
//设置击关推送别名
void setJpushAlias();
//设置极光推送平台标签
void setJpushPlatformTags(int platform);
//获取应用市场更新
void checkStoreUpdate();
//获取设备信息更新
void checkInfoUpdate();
//手动获取设备信息更新
void buttonCheckUpdate(View view);
//获取测试应用更新
void checkTestUpdate();
//开始
//设置极光推送标签
void setJpushTags();
//获取设备后台设置
void getSystemSettingbegin();
//获取可被写入的安装包名
void getAppLimit();
//获取设备批次
void getDeviceBatch(String packageList);
//获取强制下载apk
void getForceDownload();
//获取浏览器上网管控设置
void getBrowserList();
//获取浏览器书签设置管控
void getBrowserBookmarks(String whitelist);
//设置白名单的url
void getBrowserWhiteList();
//获取应用图标桌面可见性管控
void getDesktopIcon();
//获取应用自启升级和网络权限管理
void getAppAutoStartUpdateAndNet();
//获取第三方应用子页面ID连网限制
void getAppIDControl();
//获取第三方应用内部网页跳转屏蔽
void setAppinsideWeb();
//获取系统其他管控设置
void setSystemSetting();
//获取系统默认程序设置
void getDefaultApp();
//获取自定义版本内置app
void getROMApp();
//获取开发者选项
void getDeveloper();
//设置开机动画
void setLogoImg();
//应用霸屏
void setTopApp();
//获取桌面
void getDefaultDesktop();
/*
* MainService
* */
//获取屏幕锁状态
void getScreenLockState();
}
public interface MainView extends BaseView {
//获取二维码
void setQRImage(Bitmap qrImage);
@@ -33,17 +110,19 @@ public class MainContact {
void getEBagCodeFinished();
//设置击关推送别名
void setAliasFinished();
//设置极光推送标签
void setTagsFinished();
//设置极光推送平台标签
void setJpushPlatformTagsFinished();
//获取应用市场更新
void checkStoreUpdateFinished();
//获取设备信息更新
void checkInfoUpdateFinished();
//获取测试应用更新
void checkTestUpdateFinished();
//手动获取设备信息更新
void buttonCheckUpdateFinished(boolean update, JsonObject jsonObject);
//开始
//设置极光推送标签
void setTagsFinished(boolean noTag);
//设置设备后台设置
void getSystemSettingbegin();
//获取可被写入的安装包名结束
@@ -66,6 +145,8 @@ public class MainContact {
void setAppinsideWebFinished();
//获取系统其他管控设置结束
void setSystemSettingFinished();
//获取系统默认程序设置
void setDefaultAppFinished();
//获取自定义版本内置app
void getROMAppFinished();
//获取开发者选项结束
@@ -74,85 +155,12 @@ public class MainContact {
void setLogoImgFinished ();
//获取应用霸屏结束
void setTopAppFinished();
//获取桌面结束
void getDefaultDesktopFinished();
/*
* MainService
* */
//设置屏幕锁状态结束
void setScreenLockStateFinished(boolean locked, String tips);
//获取桌面结束
void getDefaultDesktopFinished();
}
public interface Presenter extends BasePresenter<MainView> {
//设置二维码
void getQRImage(String mac);
//获取学生信息
void getStudesInfo();
//获取设备锁定状态
void getLockedState();
//是否第一次联网
void getFirstConnect();
//关闭所有功能
void setDisableSetting();
//发送mac地址
void sendMACAddress();
//更新设备信息
void updateDeviceInfo();
//获取时间管控
void getSnTimeControl();
//获取电子书包激活码
void getEBagCode();
//设置击关推送别名
void setJpushAlias();
//设置极光推送标签
void setJpushTags();
//设置极光推送平台标签
void setJpushPlatformTags(int platform);
//获取应用更新
void checkStoreUpdate();
//手动获取设备信息更新
void buttonCheckUpdate(View view);
//获取测试应用更新
void checkTestUpdate();
//开始
//获取设备后台设置
void getSystemSettingbegin();
//获取可被写入的安装包名
void getAppLimit();
//获取设备批次
void getDeviceBatch(String packageList);
//获取强制下载apk
void getForceDownload();
//获取浏览器上网管控设置
void getBrowserList();
//获取浏览器书签设置管控
void getBrowserBookmarks(String whitelist);
//设置白名单的url
void getBrowserWhiteList();
//获取应用图标桌面可见性管控
void getDesktopIcon();
//获取应用自启升级和网络权限管理
void getAppAutoStartUpdateAndNet();
//获取第三方应用子页面ID连网限制
void getAppIDControl();
//获取第三方应用内部网页跳转屏蔽
void setAppinsideWeb();
//获取系统其他管控设置
void setSystemSetting();
//获取自定义版本内置app
void getROMApp();
//获取开发者选项
void getDeveloper();
//设置开机动画
void setLogoImg();
//应用霸屏
void setTopApp();
/*
* MainService
* */
//获取屏幕锁状态
void getScreenLockState();
//获取桌面
void getDefaultDesktop();
}
}

View File

@@ -7,6 +7,7 @@ import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.provider.Settings;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
import com.alibaba.fastjson.JSON;
@@ -21,6 +22,7 @@ import com.mjsheng.myappstore.BuildConfig;
import com.mjsheng.myappstore.base.BaseApplication;
import com.mjsheng.myappstore.bean.BaseResponse;
import com.mjsheng.myappstore.bean.BrowserData;
import com.mjsheng.myappstore.bean.DefaultApp;
import com.mjsheng.myappstore.bean.ForceDownloadBean;
import com.mjsheng.myappstore.bean.ForceDownloadData;
import com.mjsheng.myappstore.bean.LogoImg;
@@ -38,6 +40,7 @@ import com.mjsheng.myappstore.utils.Logutils;
import com.mjsheng.myappstore.utils.SPUtils;
import com.mjsheng.myappstore.utils.SysSettingUtils;
import com.mjsheng.myappstore.utils.TimeUtils;
import com.mjsheng.myappstore.utils.ToastUtil;
import com.mjsheng.myappstore.utils.URLUtils;
import com.mjsheng.myappstore.utils.Utils;
@@ -277,11 +280,13 @@ public class MainPresenter implements MainContact.Presenter {
@Override
public void getFirstConnect() {
int first = (int) SPUtils.get(mContext, "first_connect", 0);
Log.e(TAG, "getFirstConnect: " + "first_connect = " + first);
mView.setFirstConnect(first == 0);
}
@Override
public void setDisableSetting() {
Log.e(TAG, "setDisableSetting: ");
//设置系统管控
SysSettingUtils.setDisableSetting(mContext);
}
@@ -363,10 +368,10 @@ public class MainPresenter implements MainContact.Presenter {
@Override
public void onNext(@NonNull ResponseBody responseBody) {
try {
Logutils.e(TAG + ":" + "updateDevicesInfo", "onSubscribe: " + responseBody.string());
Logutils.e(TAG + ":" + "updateDevicesInfo", "onNext: " + responseBody.string());
} catch (IOException e) {
e.printStackTrace();
Logutils.e(TAG + ":" + "updateDevicesInfo", "onSubscribe: IOException: " + e.getMessage());
Logutils.e(TAG + ":" + "updateDevicesInfo", "onNext: IOException: " + e.getMessage());
}
}
@@ -510,6 +515,7 @@ public class MainPresenter implements MainContact.Presenter {
String batch = jsonObject.get("batch").getAsString();
Logutils.e(TAG + ":" + "setJpushTags", "onNext: " + batch);
if (!TextUtils.isEmpty(batch)) {
mView.setTagsFinished(false);
Set set = new HashSet();
set.add(batch);
JGYUtils.getInstance().getAppPlatform(new JGYUtils.GetAppPlatformCallback() {
@@ -524,9 +530,11 @@ public class MainPresenter implements MainContact.Presenter {
});
setTag(set);
} else {
mView.setTagsFinished(true);
Logutils.e(TAG + ":" + "setJpushTags", "onNext: " + "batch empty");
}
} else {
mView.setTagsFinished(true);
Logutils.e(TAG + ":" + "setJpushTags", "onNext: " + response.toString());
}
}
@@ -534,13 +542,13 @@ public class MainPresenter implements MainContact.Presenter {
@Override
public void onError(@NonNull Throwable e) {
Logutils.e(TAG + ":" + "setJpushTags", "onError: " + e.getMessage());
mView.setTagsFinished(true);
onComplete();
}
@Override
public void onComplete() {
Logutils.e(TAG + ":" + "setJpushTags", "onComplete: ");
mView.setTagsFinished();
}
});
}
@@ -564,7 +572,6 @@ public class MainPresenter implements MainContact.Presenter {
checkUpdateStore();
}
private void checkUpdateStore() {
NetInterfaceManager.getInstance()
.getUpdateApi()
@@ -605,6 +612,45 @@ public class MainPresenter implements MainContact.Presenter {
});
}
@Override
public void checkInfoUpdate() {
NetInterfaceManager.getInstance()
.getUpdateApi()
.getUpdate(BuildConfig.APPLICATION_ID,
JGYUtils.getInstance().checkAppPlatform())
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<BaseResponse>() {
@Override
public void onSubscribe(@NonNull Disposable d) {
Log.e("checkInfoUpdate", "onSubscribe: ");
}
@Override
public void onNext(@NonNull BaseResponse response) {
Log.e("checkInfoUpdate", "onNext: " + response.data);
if (response.code == OK) {
JsonObject jsonObject = JsonParser.parseString(new Gson().toJson(response.data)).getAsJsonObject();
JGYUtils.getInstance().installAPK(jsonObject);
} else {
Log.e("checkInfoUpdate", "onNext: " + response);
}
}
@Override
public void onError(@NonNull Throwable e) {
Log.e("checkInfoUpdate", "onError: " + e.getMessage());
onComplete();
}
@Override
public void onComplete() {
Log.e("checkInfoUpdate", "onComplete: ");
mView.checkInfoUpdateFinished();
}
});
}
long buttonCheckUpdateTime = 0;
@Override
@@ -667,16 +713,11 @@ public class MainPresenter implements MainContact.Presenter {
});
}
/**
* 获取灰度测试更新
*/
@Override
public void checkTestUpdate() {
if (JGYUtils.isOfficialVersion()) {
mView.checkTestUpdateFinished();
return;
}
NetInterfaceManager.getInstance()
.getTestUpdateObservable()
.subscribe(new Observer<BaseResponse<List<ForceDownloadData>>>() {
@@ -687,6 +728,7 @@ public class MainPresenter implements MainContact.Presenter {
@Override
public void onNext(BaseResponse<List<ForceDownloadData>> listBaseResponse) {
Logutils.e(TAG + ":" + "checkTestUpdate", "onNext: " + listBaseResponse.data);
if (listBaseResponse.code == OK) {
List<ForceDownloadData> APPlist = listBaseResponse.data;
JGYUtils.getInstance().installTestAPK(APPlist);
@@ -715,6 +757,7 @@ public class MainPresenter implements MainContact.Presenter {
//重置设备
JGYUtils.getInstance().resetDevice();
mView.getSystemSettingbegin();
ToastUtil.betaShow("开始获取管控");
}
@Override
@@ -743,10 +786,13 @@ public class MainPresenter implements MainContact.Presenter {
mView.getAppLimitFinished(data);
} else {
// mView.getAppLimitFinished("");
boolean write = Settings.System.putString(mContext.getContentResolver(), "only_jgy_shortcut_list", "");
boolean write = Settings.System.putString(mContext.getContentResolver(), "only_jgy_shortcut_list", " ");
Logutils.e(TAG, "onNext: only_jgy_shortcut_list: " + write);
Logutils.e(TAG + ":" + "getAppLimit", "onNext: " + bodyString);
mView.getAppLimitFinished("");
// String oldListString = Settings.System.getString(mContext.getContentResolver(), "qch_app_forbid");
// Log.e("getAppLimit", "oldListString: " + oldListString);
// mView.getAppLimitFinished(oldListString);
}
} catch (IOException e) {
e.printStackTrace();
@@ -757,7 +803,7 @@ public class MainPresenter implements MainContact.Presenter {
@Override
public void onError(@NonNull Throwable e) {
Logutils.e(TAG + ":" + "getAppLimit", "onError: " + e.getMessage());
String oldListString = Settings.System.getString(mContext.getContentResolver(), "qch_app_forbid");
String oldListString = Settings.System.getString(mContext.getContentResolver(), "only_jgy_shortcut_list");
Logutils.e(TAG + ":" + "getAppLimit", "oldListString: " + oldListString);
mView.getAppLimitFinished(oldListString);
}
@@ -771,10 +817,10 @@ public class MainPresenter implements MainContact.Presenter {
@Override
public void getDeviceBatch(String packageList) {
if (JGYUtils.isOfficialVersion() || TextUtils.isEmpty(packageList)) {
mView.getDeviceBatchFinished();
return;
}
// if (JGYUtils.isOfficialVersion() || TextUtils.isEmpty(packageList)) {
// mView.getDeviceBatchFinished();
// return;
// }
int locked = Settings.System.getInt(mContext.getContentResolver(), "qch_unlock_ipad", 0);
Logutils.e(TAG, "getDeviceBatch: " + locked);
if (locked == 0) {
@@ -825,7 +871,6 @@ public class MainPresenter implements MainContact.Presenter {
// }
// });
// mView.getDeviceBatchFinished();
}
}
@@ -843,7 +888,7 @@ public class MainPresenter implements MainContact.Presenter {
public void onNext(@NonNull ForceDownloadBean forceDownloadBean) {
Logutils.e(TAG + ":" + "getForceDownload", "onNext: ");
switch (forceDownloadBean.getCode()) {
case 200:
case OK:
Logutils.e(TAG + ":" + "getForceDownload", "isDownloading=" + BaseApplication.getInstance().isDownloading());
BaseApplication.getInstance().checkIsDownloading();
if (!BaseApplication.getInstance().isDownloading()) {
@@ -893,62 +938,64 @@ public class MainPresenter implements MainContact.Presenter {
@Override
public void getBrowserList() {
NetInterfaceManager.getInstance()
.getBrowserListSettingObservable()
.observeOn(Schedulers.io())
.subscribe(new Observer<BaseResponse<BrowserData>>() {
@Override
public void onSubscribe(@NonNull Disposable d) {
Logutils.e(TAG + ":" + "getBrowserList", "onSubscribe: ");
}
@Override
public void onNext(@NonNull BaseResponse<BrowserData> browserDataBaseResponse) {
Logutils.e(TAG + ":" + "getBrowserList", "onNext: ");
if (browserDataBaseResponse.code == 200) {
String white = browserDataBaseResponse.data.getWhite();
if (!TextUtils.isEmpty(white)) {
String homePage = Settings.System.getString(mContext.getContentResolver(), "homepagURL");
if (!TextUtils.isEmpty(homePage) && !white.contains(homePage)) {
white += "," + homePage;
}
boolean whiteList = Settings.System.putString(mContext.getContentResolver(), "DeselectBrowserArray", white);
Logutils.e(TAG + ":" + "getBrowserList", "setBrowserList white: " + white + ":" + whiteList);
mView.getBrowserListFinished(white);
} else {
Settings.System.putString(mContext.getContentResolver(), "DeselectBrowserArray", " ");
mView.getBrowserListFinished("");
}
String black = browserDataBaseResponse.data.getBlack();
if (!TextUtils.isEmpty(black)) {
boolean blackList = Settings.System.putString(mContext.getContentResolver(), "qch_webblack_url", black);
Logutils.e(TAG + ":" + "getBrowserList", "setBrowserList black: " + black + ":" + blackList);
} else {
Settings.System.putString(mContext.getContentResolver(), "qch_webblack_url", " ");
}
} else {
mView.getBrowserListFinished("");
}
}
@Override
public void onError(@NonNull Throwable e) {
Logutils.e(TAG + ":" + "getBrowserList", "onError: " + e.getMessage());
String whiteURLList = Settings.System.getString(mContext.getContentResolver(), "DeselectBrowserArray");
Logutils.e(TAG + ":" + "getBrowserList", "whiteURLList: " + whiteURLList);
mView.getBrowserListFinished(whiteURLList);
onComplete();
}
@Override
public void onComplete() {
Logutils.e(TAG + ":" + "getBrowserList", "onComplete: ");
}
});
// NetInterfaceManager.getInstance()
// .getBrowserListSettingObservable()
// .observeOn(Schedulers.io())
// .subscribe(new Observer<BaseResponse<BrowserData>>() {
// @Override
// public void onSubscribe(@NonNull Disposable d) {
// Logutils.e(TAG + ":" + "getBrowserList", "onSubscribe: ");
// }
//
// @Override
// public void onNext(@NonNull BaseResponse<BrowserData> browserDataBaseResponse) {
// Logutils.e(TAG + ":" + "getBrowserList", "onNext: ");
// if (browserDataBaseResponse.code == OK) {
// String white = browserDataBaseResponse.data.getWhite();
//
// if (!TextUtils.isEmpty(white)) {
// String homePage = Settings.System.getString(mContext.getContentResolver(), "homepagURL");
// if (!TextUtils.isEmpty(homePage) && !white.contains(homePage)) {
// white += "," + homePage;
// }
// boolean whiteList = Settings.System.putString(mContext.getContentResolver(), "DeselectBrowserArray", white);
// Logutils.e(TAG + ":" + "getBrowserList", "setBrowserList white: " + white + ":" + whiteList);
// mView.getBrowserListFinished(white);
// } else {
// Settings.System.putString(mContext.getContentResolver(), "DeselectBrowserArray", " ");
// mView.getBrowserListFinished("");
// }
// String black = browserDataBaseResponse.data.getBlack();
// if (!TextUtils.isEmpty(black)) {
// boolean blackList = Settings.System.putString(mContext.getContentResolver(), "qch_webblack_url", black);
// Logutils.e(TAG + ":" + "getBrowserList", "setBrowserList black: " + black + ":" + blackList);
// } else {
// Settings.System.putString(mContext.getContentResolver(), "qch_webblack_url", " ");
// }
// } else {
// mView.getBrowserListFinished("");
// }
// }
//
// @Override
// public void onError(@NonNull Throwable e) {
// Logutils.e(TAG + ":" + "getBrowserList", "onError: " + e.getMessage());
// String whiteURLList = Settings.System.getString(mContext.getContentResolver(), "DeselectBrowserArray");
// Logutils.e(TAG + ":" + "getBrowserList", "whiteURLList: " + whiteURLList);
// mView.getBrowserListFinished(whiteURLList);
// onComplete();
// }
//
// @Override
// public void onComplete() {
// Logutils.e(TAG + ":" + "getBrowserList", "onComplete: ");
// }
// });
//获取书签后会获取黑白名单
Log.e(TAG, "getBrowserList: ");
mView.getBrowserListFinished("");
}
private void NewSetBrowserList() {
NetInterfaceManager.getInstance()
.getBrowserListSettingObservable()
@@ -1290,7 +1337,7 @@ public class MainPresenter implements MainContact.Presenter {
@Override
public void onComplete() {
Logutils.e(TAG + ":" + "getAppAutoStart", "onSubscribe: ");
Logutils.e(TAG + ":" + "getAppAutoStart", "onComplete: ");
mView.getAppAutoStartUpdateAndNetFinished();
}
});
@@ -1350,9 +1397,11 @@ public class MainPresenter implements MainContact.Presenter {
@Override
public void setAppinsideWeb() {
Log.e(TAG, "setAppinsideWeb: ");
HTTPInterface.getAppinsideWeb(mContext, new HTTPInterface.GetAppinsideWebCallback() {
@Override
public void ononComplete() {
public void onComplete() {
Log.e(TAG, "setAppinsideWeb: " + "onComplete");
mView.setAppinsideWebFinished();
}
});
@@ -1381,12 +1430,12 @@ public class MainPresenter implements MainContact.Presenter {
if (code == OK) {
String data = jsonObject.getAsJsonObject("data").toString();
//结果保存到本地
SPUtils.put(mContext, "SystemSettingData", data);
JGYUtils.getInstance().SettingSysData(data);
} else {
//没有数据全部关闭
SysSettingUtils.setDisableSetting(mContext);
SPUtils.put(mContext, "SystemSettingData", "");
// SysSettingUtils.setDisableSetting(mContext);
// SPUtils.put(mContext, "SystemSettingData", "");
JGYUtils.getInstance().SettingSysData("");
//获取系统管控先不要关闭开发人员选项
if (!BuildConfig.DEBUG) {
Settings.System.putInt(mContext.getContentResolver(), "qch_Developeroptions", 1);
@@ -1416,6 +1465,42 @@ public class MainPresenter implements MainContact.Presenter {
}
@Override
public void getDefaultApp() {
NetInterfaceManager.getInstance()
.getDefaultAppApi()
.subscribe(new Observer<BaseResponse<DefaultApp>>() {
@Override
public void onSubscribe(Disposable d) {
Log.e("getDefaultApp", "onSubscribe: ");
}
@Override
public void onNext(BaseResponse<DefaultApp> defaultAppBaseResponse) {
Log.e("getDefaultApp", "onNext: " + JSONObject.toJSONString(defaultAppBaseResponse.data));
int code = defaultAppBaseResponse.code;
if (code == OK) {
DefaultApp defaultApp = defaultAppBaseResponse.data;
JGYUtils.getInstance().setDefaultDesktop(defaultApp.getDefault_launcher());
} else {
Log.e("getDefaultApp", "onNext: " + defaultAppBaseResponse.msg);
}
}
@Override
public void onError(Throwable e) {
Log.e("getDefaultApp", "onError: " + e.getMessage());
onComplete();
}
@Override
public void onComplete() {
Log.e("getDefaultApp", "onComplete: ");
mView.setDefaultAppFinished();
}
});
}
@Override
public void getROMApp() {
String customVersion = Utils.getCustomVersion();
@@ -1439,7 +1524,7 @@ public class MainPresenter implements MainContact.Presenter {
Settings.System.putString(mContext.getContentResolver(), "jgy_customromapp", packageName);
} else {
Logutils.e(TAG + ":" + "getROMApp", "onNext: " + baseResponse.msg);
Settings.System.putString(mContext.getContentResolver(), "jgy_customromapp", "");
Settings.System.putString(mContext.getContentResolver(), "jgy_customromapp", " ");
// onComplete();
}
}
@@ -1583,12 +1668,13 @@ public class MainPresenter implements MainContact.Presenter {
public void onComplete() {
Logutils.e(TAG + ":" + "setTopApp", "onComplete: ");
mView.setTopAppFinished();
ToastUtil.betaShow("获取管控结束");
}
});
}
@Override
public void getScreenLockState() {
synchronized public void getScreenLockState() {
int locked = Settings.System.getInt(mContext.getContentResolver(), "qch_unlock_ipad", 0);
if (JGYUtils.isOfficialVersion() || locked == 1) {
mView.setScreenLockStateFinished(false, "");
@@ -1680,6 +1766,4 @@ public class MainPresenter implements MainContact.Presenter {
}
});
}
}

View File

@@ -0,0 +1,73 @@
package com.mjsheng.myappstore.bean;
import java.io.Serializable;
/**
* @author jgy02
*/
public class DefaultApp implements Serializable {
String default_launcher;
String default_browser;
String default_videoplayer;
String default_musiclayer;
String default_filemanager;
String default_gallery;
String default_IME;
public String getDefault_launcher() {
return default_launcher;
}
public void setDefault_launcher(String default_launcher) {
this.default_launcher = default_launcher;
}
public String getDefault_browser() {
return default_browser;
}
public void setDefault_browser(String default_browser) {
this.default_browser = default_browser;
}
public String getDefault_videoplayer() {
return default_videoplayer;
}
public void setDefault_videoplayer(String default_videoplayer) {
this.default_videoplayer = default_videoplayer;
}
public String getDefault_musiclayer() {
return default_musiclayer;
}
public void setDefault_musiclayer(String default_musiclayer) {
this.default_musiclayer = default_musiclayer;
}
public String getDefault_filemanager() {
return default_filemanager;
}
public void setDefault_filemanager(String default_filemanager) {
this.default_filemanager = default_filemanager;
}
public String getDefault_gallery() {
return default_gallery;
}
public void setDefault_gallery(String default_gallery) {
this.default_gallery = default_gallery;
}
public String getDefault_IME() {
return default_IME;
}
public void setDefault_IME(String default_IME) {
this.default_IME = default_IME;
}
}

View File

@@ -7,6 +7,7 @@ import android.util.Log;
import android.util.SparseArray;
import com.mjsheng.myappstore.utils.Logutils;
import com.mjsheng.myappstore.utils.ToastUtil;
import java.util.Locale;
import java.util.Set;
@@ -243,6 +244,7 @@ public class TagAliasOperatorHelper {
String logs = getActionStr(tagAliasBean.action)+" tags success";
Logger.i(TAG,logs);
Logutils.e(TAG,"Tag绑定成功: " + jPushMessage.getTags());
ToastUtil.betaShow("Tag绑定成功: " + jPushMessage.getTags());
ExampleUtil.showToast(logs, context);
}else{
String logs = "Failed to " + getActionStr(tagAliasBean.action)+" tags";
@@ -297,6 +299,7 @@ public class TagAliasOperatorHelper {
String logs = getActionStr(tagAliasBean.action)+" alias success";
Logger.i(TAG,logs);
Log.e(TAG,"Alias绑定成功: "+jPushMessage.getAlias());
ToastUtil.betaShow("Alias绑定成功: "+jPushMessage.getAlias());
ExampleUtil.showToast(logs, context);
}else{
String logs = "Failed to " + getActionStr(tagAliasBean.action)+" alias, errorCode:" + jPushMessage.getErrorCode();

View File

@@ -86,6 +86,4 @@ public class AmapManager {
locationClient.startLocation();
Logutils.e(TAG, "initAmap: " + "startLocation");
}
}

View File

@@ -9,6 +9,7 @@ import com.mjsheng.myappstore.bean.Appground;
import com.mjsheng.myappstore.bean.BaseResponse;
import com.mjsheng.myappstore.bean.BrowserBookmarks;
import com.mjsheng.myappstore.bean.BrowserData;
import com.mjsheng.myappstore.bean.DefaultApp;
import com.mjsheng.myappstore.bean.ForceDownloadBean;
import com.mjsheng.myappstore.bean.ForceDownloadData;
import com.mjsheng.myappstore.bean.LogoImg;
@@ -31,6 +32,7 @@ import com.mjsheng.myappstore.network.api.newapi.BrowserListApi;
import com.mjsheng.myappstore.network.api.newapi.CheckTestUpdateApi;
import com.mjsheng.myappstore.network.api.newapi.CheckUpdateApi;
import com.mjsheng.myappstore.network.api.newapi.CustomROMApp;
import com.mjsheng.myappstore.network.api.newapi.DefaultAppApi;
import com.mjsheng.myappstore.network.api.newapi.DesktopIconApi;
import com.mjsheng.myappstore.network.api.newapi.DevicesLockedStateApi;
import com.mjsheng.myappstore.network.api.newapi.GetAllApp;
@@ -61,6 +63,7 @@ import io.reactivex.schedulers.Schedulers;
import okhttp3.Cache;
import okhttp3.OkHttpClient;
import okhttp3.ResponseBody;
import okhttp3.internal.Util;
import retrofit2.CallAdapter;
import retrofit2.Converter;
import retrofit2.Retrofit;
@@ -158,11 +161,12 @@ public class NetInterfaceManager {
return mRetrofit
.create(MACAddressApi.class)
.sendMACaddress(Utils.getSerial(),
Utils.getAndroid7MAC(),
Utils.getAndroid10MAC(mContext),
JPushInterface.getRegistrationID(mContext),
Utils.getCustomVersion(),
BuildConfig.VERSION_NAME,
Utils.getAPPVersionName(mContext)
Utils.getAPPVersionName(mContext),
Utils.getAndroid7MAC()
)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread());
@@ -416,4 +420,11 @@ public class NetInterfaceManager {
return mRetrofit.create(GetAllApp.class);
}
public Observable<BaseResponse<DefaultApp>> getDefaultAppApi() {
return mRetrofit.create(DefaultAppApi.class)
.getDefaultApp(Utils.getSerial())
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread());
}
}

View File

@@ -10,6 +10,7 @@ import android.os.Handler;
import android.os.Message;
import android.provider.Settings;
import android.text.TextUtils;
import android.util.Log;
import com.alibaba.fastjson.JSON;
@@ -48,6 +49,7 @@ import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
import io.reactivex.Observer;
import io.reactivex.android.schedulers.AndroidSchedulers;
@@ -57,7 +59,6 @@ import io.reactivex.schedulers.Schedulers;
import okhttp3.Call;
import okhttp3.Response;
import okhttp3.ResponseBody;
import okhttp3.internal.Util;
import static com.mjsheng.myappstore.jpush.TagAliasOperatorHelper.ACTION_SET;
import static com.mjsheng.myappstore.jpush.TagAliasOperatorHelper.sequence;
@@ -339,9 +340,11 @@ public class HTTPInterface {
int versionCode = jsonObject.getInteger("app_version_code");
final String packageName = jsonObject.getString("app_package");
String app_name = jsonObject.getString("app_name");
String app_md5 = jsonObject.getString("app_md5");
final com.alibaba.fastjson.JSONObject object = new com.alibaba.fastjson.JSONObject();
object.put("app_name", app_name);
object.put("app_package", packageName);
object.put("MD5",app_md5);
PackageManager pm = context.getPackageManager();
PackageInfo packageInfo = null;
try {
@@ -368,7 +371,7 @@ public class HTTPInterface {
com.alibaba.fastjson.JSONObject data = jsonObject.getJSONObject("data");
if (code == 200) {
String batch = data.getString("batch");
if (batch != null && !batch.equals("")) {
if (batch != null && !"".equals(batch)) {
Set set = new HashSet();
set.add(batch);
TagAliasOperatorHelper.TagAliasBean tagAliasBean = new TagAliasOperatorHelper.TagAliasBean();
@@ -397,7 +400,7 @@ public class HTTPInterface {
@Override
public void onSuccess(String s, Call call, Response response) {
String body = response.body().toString();
if (body.equals("200")) {
if ("200".equals(body)) {
Logutils.e("jiguangInterface", "alias清除成功");
} else {
Logutils.e("jiguangInterface", "alias清除失败");
@@ -413,7 +416,7 @@ public class HTTPInterface {
}
public interface GetAppinsideWebCallback {
void ononComplete();
void onComplete();
}
synchronized public static void getAppinsideWeb(Context context, GetAppinsideWebCallback callback) {
@@ -423,6 +426,7 @@ public class HTTPInterface {
} else {
Logutils.e(TAG, "getAppinsideWeb: " + "setNewAppinsideWeb");
setNewAppinsideWeb(callback);
// setAppinsideWeb(callback);
}
}
@@ -451,7 +455,7 @@ public class HTTPInterface {
@Override
public void onComplete() {
Logutils.e("setAppinsideWeb", "onComplete: ");
callback.ononComplete();
callback.onComplete();
}
});
}
@@ -483,7 +487,7 @@ public class HTTPInterface {
@Override
public void onComplete() {
Logutils.e("getNewAppinsideWeb", "onComplete: ");
callback.ononComplete();
callback.onComplete();
}
});
}
@@ -535,11 +539,9 @@ public class HTTPInterface {
white += "," + homePage;
}
boolean whiteList = Settings.System.putString(context.getContentResolver(), "DeselectBrowserArray", white);
new URLUtils(context).setBrowserWhiteList();
Logutils.e("setBrowserBlackList", "setBrowserList----white-----" + whiteList + ":" + white);
} else {
Settings.System.putString(context.getContentResolver(), "DeselectBrowserArray", " ");
Settings.System.putString(context.getContentResolver(), "DeselectBrowserArray", homePage);
}
String black = data.getString("black");
if (!TextUtils.isEmpty(black)) {
@@ -555,7 +557,7 @@ public class HTTPInterface {
} catch (JSONException e) {
Logutils.e("setBrowserBlackList", "JSONException" + e.getMessage());
}
new URLUtils(context).setBrowserWhiteList();
}
@Override
@@ -704,14 +706,14 @@ public class HTTPInterface {
if (code == 200) {
JSONObject data = JSON.parseObject(jsonObject.getString("data"));
String white = data.getString("white");
if (white != null && !white.equals("")) {
if (white != null && !"".equals(white)) {
boolean whiteList = Settings.System.putString(context.getContentResolver(), "DeselectBrowserArray", white);
Logutils.e("SystemSetting", "OldSetBrowserList----white-----" + whiteList + ":" + white);
} else {
Settings.System.putString(context.getContentResolver(), "DeselectBrowserArray", " ");
}
String black = data.getString("black");
if (black != null && !black.equals("")) {
if (black != null && !"".equals(black)) {
boolean blackList = Settings.System.putString(context.getContentResolver(), "qch_webblack_url", black);
Logutils.e("SystemSetting", "OldSetBrowserList----black-----" + blackList + ":" + black);
} else {
@@ -836,23 +838,26 @@ public class HTTPInterface {
.subscribe(new Observer<BaseResponse<BrowserBookmarks>>() {
@Override
public void onSubscribe(@NonNull Disposable d) {
if (callback != null)
if (callback != null) {
callback.onSubscribe();
}
Logutils.e("getHomePageBookmarks", "onSubscribe: ");
}
@Override
public void onNext(@NonNull BaseResponse<BrowserBookmarks> browserBookmarksBaseResponse) {
if (callback != null)
if (callback != null) {
callback.onNext();
}
Logutils.e("getHomePageBookmarks", "onNext: ");
if (browserBookmarksBaseResponse.code == 200) {
//主页不包含白名单添加进去
String homepagURL = browserBookmarksBaseResponse.data.getHomepage();
Logutils.e("getHomePageBookmarks ", "homepagURL: " + homepagURL);
String oldHome = Settings.System.getString(context.getContentResolver(), "homepagURL");
Log.e("getHomePageBookmarks", "oldHome: " + oldHome);
//数据和之前不一样的时候清除缓存
if (!TextUtils.isEmpty(oldHome)&&oldHome.equalsIgnoreCase(homepagURL)){
if (!TextUtils.isEmpty(oldHome) && !oldHome.equalsIgnoreCase(homepagURL)) {
try {
new CacheUtils().cleanApplicationUserData(context, "com.android.browser");
} catch (Exception e) {
@@ -865,17 +870,17 @@ public class HTTPInterface {
String whitelist = Settings.System.getString(context.getContentResolver(), "DeselectBrowserArray");
Logutils.e("getHomePageBookmarks ", "whitelist: " + whitelist);
if (!TextUtils.isEmpty(whitelist.trim())) {
HashSet<String> whiteLists = new HashSet<>(Arrays.asList(whitelist.trim().split(",")));
whiteLists.add(homepagURL);
String whiteString = String.join(",", whiteLists);
boolean white = Settings.System.putString(context.getContentResolver(), "DeselectBrowserArray", whiteString);
Logutils.e("getHomePageBookmarks", "onNext: homepagURL: add to whiteList = " + whiteString + "write: " + white);
} else {
Logutils.e("getHomePageBookmarks", "onNext: whitelist is NULL");
boolean white = Settings.System.putString(context.getContentResolver(), "DeselectBrowserArray", homepagURL);
Logutils.e("getHomePageBookmarks", "onNext: homepagURL: homepagURL = " + homepagURL + "write: " + white);
}
// if (!TextUtils.isEmpty(whitelist.trim())) {
// HashSet<String> whiteLists = new HashSet<>(Arrays.asList(whitelist.trim().split(",")));
// whiteLists.add(homepagURL);
// String whiteString = String.join(",", whiteLists);
// boolean white = Settings.System.putString(context.getContentResolver(), "DeselectBrowserArray", whiteString);
// Logutils.e("getHomePageBookmarks", "onNext: homepagURL: add to whiteList = " + whiteString + "write: " + white);
// } else {
// Logutils.e("getHomePageBookmarks", "onNext: whitelist is NULL");
// boolean white = Settings.System.putString(context.getContentResolver(), "DeselectBrowserArray", homepagURL);
// Logutils.e("getHomePageBookmarks", "onNext: homepagURL: homepagURL = " + homepagURL + "write: " + white);
// }
//主页
Intent homepag = new Intent("qch_app_brower_homepage");
@@ -901,11 +906,11 @@ public class HTTPInterface {
}
if (!TextUtils.isEmpty(labelpage)) {
HashSet<String> labels = new HashSet<>(Arrays.asList(labelpage.split(",")));
List<String> urlList = new ArrayList<>();
for (String urls : labels) {
urlList.add(JGYUtils.getPrefixHttpsURL(urls));
}
String join = String.join(",", urlList);
// List<String> urlList = new ArrayList<>();
// for (String urls : labels) {
// urlList.add(JGYUtils.getPrefixHttpsURL(urls));
// }
String join = String.join(",", labels);
Logutils.e("getHomePageBookmarks", "onNext: getHomePageBookmarks: " + join);
websiteBookMark.putExtra("websiteBookMark", join);
} else {
@@ -921,7 +926,7 @@ public class HTTPInterface {
intent1.putExtra("homepage", "Invalid");
context.sendBroadcast(intent1);
Settings.System.putString(context.getContentResolver(), "homepagURL", "");
Settings.System.putString(context.getContentResolver(), "homepagURL", " ");
Intent intent2 = new Intent("qch_app_brower_website");
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
intent2.setPackage("com.android.settings")
@@ -934,16 +939,18 @@ public class HTTPInterface {
@Override
public void onError(@NonNull Throwable e) {
if (callback != null)
if (callback != null) {
callback.onError(e);
}
Logutils.e("getHomePageBookmarks", "onError: " + e.getMessage());
onComplete();
}
@Override
public void onComplete() {
if (callback != null)
if (callback != null) {
callback.onComplete();
}
Logutils.e("getHomePageBookmarks", "onComplete: ");
setBrowserBlackList(context);
}
@@ -1098,7 +1105,7 @@ public class HTTPInterface {
.subscribe(new Observer<BaseResponse>() {
@Override
public void onSubscribe(Disposable d) {
Log.e(TAG, "onSubscribe: ");
}
@Override
@@ -1287,7 +1294,7 @@ public class HTTPInterface {
@Override
public void onComplete() {
Logutils.e("getAppAutoStart", "onSubscribe: ");
Logutils.e("getAppAutoStart", "onComplete: ");
}
});
}

View File

@@ -3,12 +3,15 @@ package com.mjsheng.myappstore.network;
import com.mjsheng.myappstore.BuildConfig;
import com.mjsheng.myappstore.manager.NetInterfaceManager;
import rxhttp.wrapper.annotation.DefaultDomain;
/**
* @author Administrator
*/
public class URLAddress {
//根网址
private static final String HTTP_TAG_HEAD_NEW = BuildConfig.ROOT_URL;
@DefaultDomain
public static final String HTTP_TAG_HEAD_NEW = BuildConfig.ROOT_URL;
// 下载接口 根据包名匹配 请求后更新下载次数
@@ -16,9 +19,9 @@ public class URLAddress {
//app下载完成发送下载次数
public static final String SEND_DOWNLOAD_FILE_INFO = HTTP_TAG_HEAD_NEW + "app/downloadApp";
//获取设备锁定状态
public static final String GET_DEVICES_LOCKED = HTTP_TAG_HEAD_NEW + "lock/index";
public static final String GET_DEVICES_LOCKED = "lock/index";
//发送设备信息
public static final String SEND_DEVICES = HTTP_TAG_HEAD_NEW + "Mac/getMac";
public static final String SEND_DEVICES = "Mac/getMac";
//发送app使用情况
public static final String SEND_USEDTIME = HTTP_TAG_HEAD_NEW + "Applog/getAppLog";
//更新接口
@@ -30,11 +33,11 @@ public class URLAddress {
//浏览器书签主页设置
public static final String SET_HOMEPAG_TAG = HTTP_TAG_HEAD_NEW + "Label";
//app内部网页管控
public static final String SET_APPINSIDEWEB = HTTP_TAG_HEAD_NEW + "Appground";
public static final String SET_APPINSIDEWEB = "Appground";
//浏览器黑白名单地址
public static final String SET_BROWSER_LIST = HTTP_TAG_HEAD_NEW + "browser";
//强制安装应用
public static final String GET_FORCE_INSTALL_LIST = "forceinstall/index";
public static final String GET_FORCE_INSTALL_LIST = "forceinstall/index";
//应用白名单
public static final String SET_WHITE_PACKAGE_LIST = "firmware/index";
//获取隐藏桌面图标
@@ -42,29 +45,31 @@ public class URLAddress {
//获取应用升级自启
public final static String NET_AND_LAUNCH_API = HTTP_TAG_HEAD_NEW + "automatic/get";
//通过sn获取信息
public static final String GET_STUDENTS_INFO = HTTP_TAG_HEAD_NEW + "Sn/getStudent";
public static final String GET_STUDENTS_INFO = "Sn/getStudent";
//上传截图
public static final String SEND_SCREENSHOT = HTTP_TAG_HEAD_NEW + "Screenshot/addImg";
//上传我的设备
//public static final String UPDATE_DEVICEINFO = HTTP_TAG_HEAD_NEW + "Mac/getInfo";
//获取霸屏状态
public final static String GET_LOCK_SCREEN_STATE = HTTP_TAG_HEAD_NEW + "Sn/getSnScreen";
public final static String GET_LOCK_SCREEN_STATE = "Sn/getSnScreen";
//获取默认桌面升级
public final static String GET_DESKTOP = HTTP_TAG_HEAD_NEW + "Sn/getSnDesktop";
public final static String GET_DESKTOP = "Sn/getSnDesktop";
//获取时间管控
public final static String GET_SN_TIME_CONTROL = HTTP_TAG_HEAD_NEW + "Sn/getSnTimeControl";
public final static String GET_SN_TIME_CONTROL = "Sn/getSnTimeControl";
//获取顶部app管控
public final static String GET_TOP_APP_CONTROL = HTTP_TAG_HEAD_NEW + "Sn/getSnAppControl";
public final static String GET_TOP_APP_CONTROL = "Sn/getSnAppControl";
//获取测试app
public final static String GET_SN_APP_TEST = HTTP_TAG_HEAD_NEW + "Sn/getSnAppTest";
//开机动画
public final static String GET_LOGO_IMG = HTTP_TAG_HEAD_NEW + "Sn/getLogoImg";
public final static String GET_LOGO_IMG = "Sn/getLogoImg";
//开发人员选项开关
public final static String GET_DEVELOPER = HTTP_TAG_HEAD_NEW + "Sn/getDeveloper";
public final static String GET_DEVELOPER = "Sn/getDeveloper";
//通过固件名获取内置应用
public final static String GET_ROM_APP = HTTP_TAG_HEAD_NEW + "And/getFirmwareApp";
public final static String GET_ROM_APP = "And/getFirmwareApp";
//获取全部应用
public final static String GET_ALL_APP = HTTP_TAG_HEAD_NEW + "recommend/index";
public final static String GET_ALL_APP = "recommend/index";
//获取电子书包激活码
public final static String GET_EBAG_CODE = HTTP_TAG_HEAD_NEW + "And/getEbagCode";
public final static String GET_EBAG_CODE = "And/getEbagCode";
//获取系统默认程序
public final static String GET_DEFAULT_APP = "app/getDefaultApp";
}

View File

@@ -0,0 +1,16 @@
package com.mjsheng.myappstore.network.api.newapi;
import com.mjsheng.myappstore.bean.BaseResponse;
import com.mjsheng.myappstore.bean.DefaultApp;
import com.mjsheng.myappstore.network.URLAddress;
import io.reactivex.Observable;
import retrofit2.http.GET;
import retrofit2.http.Query;
public interface DefaultAppApi {
@GET(URLAddress.GET_DEFAULT_APP)
Observable<BaseResponse<DefaultApp>> getDefaultApp(
@Query("sn") String sn
);
}

View File

@@ -17,6 +17,7 @@ public interface MACAddressApi {
@Field("jpush_id") String jpushId,
@Field("devices_version") String devicesVersion,
@Field("appstore_version") String appstoreVersion,
@Field("store_version") String storeVersion
@Field("store_version") String storeVersion,
@Field("local_mac") String local_mac
);
}

View File

@@ -4,11 +4,9 @@ import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import com.mjsheng.myappstore.service.GuardService;
import com.mjsheng.myappstore.service.LogcatService;
import com.mjsheng.myappstore.service.MainService;
import com.mjsheng.myappstore.service.StepService;
import com.mjsheng.myappstore.utils.BootManager;
import com.mjsheng.myappstore.utils.JGYUtils;
import com.mjsheng.myappstore.utils.Logutils;
public class BootReceiver extends BroadcastReceiver {
@@ -22,10 +20,16 @@ public class BootReceiver extends BroadcastReceiver {
default:
break;
case Intent.ACTION_BOOT_COMPLETED:
startService(context);
JGYUtils.startServices(context);
new BootManager(context).start();
break;
case BOOT_COMPLETED:
if (MainService.mPresenter != null) {
MainService.mPresenter.getLockedState();
Logutils.e(TAG, "mPresenter: " + "getLockedState");
} else {
Logutils.e(TAG, "mPresenter is NULL");
}
case Intent.ACTION_BATTERY_CHANGED:
case Intent.ACTION_BATTERY_LOW:
case Intent.ACTION_BATTERY_OKAY:
@@ -49,15 +53,8 @@ public class BootReceiver extends BroadcastReceiver {
// case "android.intent.action.MEDIA_BAD_REMOVAL":
//除了USER_PRESENT应该都收不到
// Log.e("fht", "BootReceiver MSG:" + intent.getAction());
startService(context);
JGYUtils.startServices(context);
break;
}
}
private void startService(Context context) {
context.startService(new Intent(context, MainService.class));
context.startService(new Intent(context, StepService.class));
context.startService(new Intent(context, GuardService.class));
context.startService(new Intent(context, LogcatService.class));
}
}

View File

@@ -13,6 +13,7 @@ import android.media.MediaPlayer;
import android.os.BatteryManager;
import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
import android.provider.Settings;
import android.text.TextUtils;
@@ -42,6 +43,7 @@ import com.mjsheng.myappstore.utils.MySQLData;
import com.mjsheng.myappstore.utils.SPUtils;
import com.mjsheng.myappstore.utils.SaveListUtils;
import com.mjsheng.myappstore.utils.ServiceAliveUtils;
import com.mjsheng.myappstore.utils.ToastUtil;
import com.mjsheng.myappstore.utils.Utils;
import java.io.File;
@@ -69,11 +71,11 @@ public class MyJPushReceiver extends BroadcastReceiver {
private final String MSG_SETTING = "2";
//浏览器网址管控
private final String MSG_BROWSER = "4";
//app id管控
private final String MSG_APPID = "5";
//应用联网管控
private final String MSG_NET_CONTROL = "6";
//APP自启联网滑动管控
private final String MSG_POWER_ON = "7";
//重置
private final String MSG_RESET = "8";
@@ -81,11 +83,11 @@ public class MyJPushReceiver extends BroadcastReceiver {
private final String MSG_INSTALL = "9";
//解锁
private final String MSG_LOCK = "10";
//旧版相机管控
private final String MSG_CAMERA = "11";
private final String MSG_ONEPACKAGES = "12";
//app使用时间
private final String GET_APP_USEDTIME = "13";
//强制下载
private final String GET_FORCEDOWNLOADURL = "14";
@@ -99,7 +101,7 @@ public class MyJPushReceiver extends BroadcastReceiver {
private final String HIDE_DESKTOP_ICON = "18";
//禁止滑动
private final String DISABLE_APP_SLIDE = "19";
//更新引用白名单
private final String UPDATE_INFO = "20";
//截图
private final String SN_SCREENSHOT = "21";
@@ -133,6 +135,7 @@ public class MyJPushReceiver extends BroadcastReceiver {
private final String EBAG_CODE = "35";
//更新白名单
private final String UPDATE_WHITELIST = "36";
private Context mContext;
private int changeNum(int paramInt) {
@@ -181,7 +184,6 @@ public class MyJPushReceiver extends BroadcastReceiver {
String type = bundle.getString(JPushInterface.EXTRA_CONTENT_TYPE);
String extras = bundle.getString(JPushInterface.EXTRA_EXTRA);
String package_name = bundle.getString("package_name");
Logutils.e(TAG, "message::" + message + "--type::" + type + "--title::" + title + "--extras::" + extras);
// ToastUtils.showShort("message::" + message + "--type::" + type + "--title::" + title + "--extras::" + extras + "---package_name:" + package_name);
// Toast.makeText(context, "message::" + message + "--type::" + type + "--title::" + title + "--extras::" + extras + "---package_name:" + package_name, Toast.LENGTH_SHORT).show();
@@ -189,6 +191,7 @@ public class MyJPushReceiver extends BroadcastReceiver {
default:
break;
case MSG_DELETE:
ToastUtil.betaShow("收到管控:应用删除");
if (!TextUtils.isEmpty(title)) {
if (SaveListUtils.getlist().contains(title)) {
SaveListUtils.getlist().remove(title);
@@ -200,6 +203,7 @@ public class MyJPushReceiver extends BroadcastReceiver {
HTTPInterface.getNetAndLaunchSetting(mContext);
break;
case MSG_SETTING:
ToastUtil.betaShow("收到管控:系统设置");
if (!TextUtils.isEmpty(extras)) {
JGYUtils.getInstance().SettingSysData(extras);
// Logutils.e(TAG, "title--------" + extras);
@@ -207,44 +211,55 @@ public class MyJPushReceiver extends BroadcastReceiver {
// getSystemSetting();
break;
case MSG_BROWSER:
ToastUtil.betaShow("收到管控:浏览器网址管控");
getDeselectBrowerID();
break;
case MSG_APPID:
ToastUtil.betaShow("收到管控APP ID管控");
getDeselectID();
break;
case MSG_NET_CONTROL:
ToastUtil.betaShow("收到管控:应用联网管控");
settingNetControl(extras);
break;
case MSG_POWER_ON:
ToastUtil.betaShow("收到管控:应用自启管控");
settingPowerOn(extras);
break;
case MSG_RESET:
ToastUtil.betaShow("收到管控:设备重置");
Utils.doMasterClear(mContext);
break;
case MSG_INSTALL:
ToastUtil.betaShow("收到管控:应用安装");
// mContext.sendBroadcast(new Intent("android.intent.action.MASTER_CLEAR"));
HTTPInterface.getAppLimit(context);
doDownloadAndInstall(extras);
HTTPInterface.setHideDesktopIcon(mContext);
break;
case MSG_LOCK:
ToastUtil.betaShow("收到管控:设备锁定");
settingLock(extras);
break;
case MSG_CAMERA:
ToastUtil.betaShow("收到管控:相机管控");
settingCamera(extras);
break;
case MSG_ONEPACKAGES:
ToastUtil.betaShow("收到管控:");
if (BaseApplication.getInstance().isFinished()) {
settingOneNet(extras);
}
break;
case GET_APP_USEDTIME:
ToastUtil.betaShow("收到管控:获取应用使用时间");
JSONObject jsonObject = JSON.parseObject(extras);
String random = jsonObject.getString("random");
String sendType = jsonObject.getString("type");
BaseApplication.sendAppUsedTime(random, sendType);
break;
case GET_FORCEDOWNLOADURL:
ToastUtil.betaShow("收到管控:应用强制安装");
File file = new File(PathUtils.getExternalDownloadsPath() + "/jgy/");
if (!file.exists()) {
file.mkdirs();
@@ -271,31 +286,49 @@ public class MyJPushReceiver extends BroadcastReceiver {
Utils.ariaDownload(mContext, url, packageObj);
break;
case SET_HOMEPAG_TAG:
ToastUtil.betaShow("收到管控:浏览器主页书签设置");
setHomepagtag(extras);
break;
case APP_WEBSITE:
ToastUtil.betaShow("收到管控APP内部网页管控");
setAPPinsideWebsite(extras);
break;
case DISABLE_APPUPDATE:
ToastUtil.betaShow("收到管控:应用禁止更新设置");
setDisableUpdateList(extras);
break;
case HIDE_DESKTOP_ICON:
HTTPInterface.setHideDesktopIcon(context);
ToastUtil.betaShow("收到管控:隐藏应用设置");
Handler.getMain().postDelayed(() -> {
//后台发送时数据库未改变,有时候可能获取到的数据时上一次的
Logutils.e(TAG, "run: HIDE_DESKTOP_ICON ");
HTTPInterface.setHideDesktopIcon(context);
}, 2000);
break;
case DISABLE_APP_SLIDE:
ToastUtil.betaShow("收到管控:应用滑动设置");
setDisableSlideList(extras);
break;
case UPDATE_INFO:
ToastUtil.betaShow("收到管控:更新白名单");
HTTPInterface.getAppLimit(context);
break;
case SN_SCREENSHOT:
ToastUtil.betaShow("收到管控:设备截图");
screenshot(extras);
break;
case DEVICES_REBOOT:
ToastUtil.betaShow("收到管控:设备重启");
Utils.rebootDevices(mContext);
break;
case GET_DEVICES_INFO:
ToastUtil.betaShow("收到管控:获取设备信息");
if (MainService.mPresenter != null) {
MainService.mPresenter.getLockedState();
Logutils.e(TAG, "mPresenter: " + "getLockedState");
} else {
Logutils.e(TAG, "mPresenter is NULL");
}
AMapLocationClient aMapLocationClient = AmapManager.getInstance().getLocationClient();
aMapLocationClient.stopLocation();
aMapLocationClient.startLocation();
@@ -324,47 +357,61 @@ public class MyJPushReceiver extends BroadcastReceiver {
});
break;
case LOCK_SCREEN:
ToastUtil.betaShow("收到管控:屏幕锁定");
JSONObject lockJSONObject = JSON.parseObject(extras);
String name = lockJSONObject.getString("name");
setLock_screen(1, context, name);
break;
case UNLOCK_SCREEN:
ToastUtil.betaShow("收到管控:屏幕解锁");
setLock_screen(0, context, "");
break;
case KILL_SERVER:
ToastUtil.betaShow("收到管控:停止应用");
JSONObject killJSONObject = JSON.parseObject(extras);
String packages = killJSONObject.getString("package_name");
JGYUtils.getInstance().killBackgroundProcesses(context, packages);
break;
case TIME_CONTROL:
ToastUtil.betaShow("收到管控:使用时间管控");
getTimeControl(context, extras);
break;
case TOP_APP:
ToastUtil.betaShow("收到管控:应用霸屏");
getTopApp(context, extras);
break;
case LOGO_IMG:
ToastUtil.betaShow("收到管控:开机动画设置");
setBootanimation(context, extras);
Logutils.e(TAG, "processCustomMessage: " + extras);
break;
case DEFAULTP_APP:
ToastUtil.betaShow("收到管控:");
setDefalutApp(context, extras);
break;
case PLAY_SOUND:
ToastUtil.betaShow("收到管控:查找设备");
playSound(context, extras);
break;
case CLEAN_APP_CACHE:
ToastUtil.betaShow("收到管控:应用缓存清除");
cleanCache(context, extras);
break;
case DEVELOPER_OPTIONS:
ToastUtil.betaShow("收到管控:开发人员选项管控");
setDeveloperoptions(extras);
break;
case GLOBAL_UPDATE:
ToastUtil.betaShow("收到管控:全局更新");
GlobalUpdate(extras);
break;
case EBAG_CODE:
ToastUtil.betaShow("收到管控:电子书包激活码");
setEbagCode(extras);
JGYUtils.getInstance().killBackgroundProcesses(context, "com.jxw.launcher");
break;
case UPDATE_WHITELIST:
ToastUtil.betaShow("收到管控:更新白名单");
HTTPInterface.getAppLimit(mContext);
break;
}
@@ -699,7 +746,7 @@ public class MyJPushReceiver extends BroadcastReceiver {
Settings.System.putString(mContext.getContentResolver(), "qch_disable_slide", strban);
Logutils.e("fht", "sendban::" + strban);
} else {
Settings.System.putString(mContext.getContentResolver(), "qch_disable_slide", "invalid");
Settings.System.putString(mContext.getContentResolver(), "qch_disable_slide", "Invalid");
}
Logutils.e("fht", "qch_disable_slide::" + Settings.System.getString(mContext.getApplicationContext().getContentResolver(), "qch_disable_slide"));
}
@@ -798,13 +845,13 @@ public class MyJPushReceiver extends BroadcastReceiver {
private void setHomepagtag(String s) {
//设置主页和标签
// HTTPInterface.setHomepagtag(mContext);//设置主页和标签
HTTPInterface.getHomePageBookmarks(mContext, null);
try {
new CacheUtils().cleanApplicationUserData(mContext, "com.android.browser");
} catch (Exception e) {
e.printStackTrace();
Logutils.e(TAG, "setHomepagtag: " + e.getMessage());
}
HTTPInterface.getHomePageBookmarks(mContext, null);
// if (TextUtils.isEmpty(s)) {
// Logutils.e(TAG, "setHomepagtag extras is null");
//
@@ -827,7 +874,7 @@ public class MyJPushReceiver extends BroadcastReceiver {
//禁止app内部网页访问包名用,隔开
HTTPInterface.getAppinsideWeb(mContext, new HTTPInterface.GetAppinsideWebCallback() {
@Override
public void ononComplete() {
public void onComplete() {
Logutils.e(TAG, "ononComplete: setAPPinsideWebsite");
}
});
@@ -1002,6 +1049,19 @@ public class MyJPushReceiver extends BroadcastReceiver {
}
}
private void setDefalutApp(Context context, String extras) {
if (TextUtils.isEmpty(extras)) {
JGYUtils.getInstance().setDefaultDesktop("");
} else {
JSONObject jsonObject = JSON.parseObject(extras);
String default_launcher = jsonObject.getString("default_launcher");
if (TextUtils.isEmpty(default_launcher)) {
JGYUtils.getInstance().setDefaultDesktop("");
} else {
JGYUtils.getInstance().setDefaultDesktop(default_launcher);
}
}
}
private void playSound(Context context, String extras) {
JSONObject jsonObject = JSONObject.parseObject(extras);
@@ -1100,6 +1160,7 @@ public class MyJPushReceiver extends BroadcastReceiver {
private void setDeveloperoptions(String extras) {
JSONObject jsonObject = JSONObject.parseObject(extras);
int is_developer = jsonObject.getInteger("is_developer");
Logutils.e(TAG + ":" + "getDeveloper", "onNext: " + is_developer);
Logutils.e(TAG, "setDeveloperoptions: " + is_developer);
JGYUtils.getInstance().setDeveloperOptions(is_developer == 0 ? 1 : 0);
}

View File

@@ -1,11 +1,13 @@
package com.mjsheng.myappstore.receiver;
import android.annotation.SuppressLint;
import android.content.BroadcastReceiver;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.os.Build;
import android.text.TextUtils;
import android.util.Log;
import com.mjsheng.myappstore.BuildConfig;
import com.mjsheng.myappstore.network.HTTPInterface;
@@ -13,7 +15,6 @@ import com.mjsheng.myappstore.utils.ApkUtils;
import com.mjsheng.myappstore.utils.CacheUtils;
import com.mjsheng.myappstore.utils.JGYUtils;
import com.mjsheng.myappstore.utils.Logutils;
import com.mjsheng.myappstore.utils.SPUtils;
import com.mjsheng.myappstore.utils.SaveListUtils;
import java.util.concurrent.TimeUnit;
@@ -29,6 +30,7 @@ public class NewAppReceiver extends BroadcastReceiver {
private static final String TAG = NewAppReceiver.class.getSimpleName();
private static final String APPSTORE = "com.jiaoguanyi.store";
private static NewAppListener newAppListener;
@SuppressLint("StaticFieldLeak")
private static Context mContext;
static {
@@ -52,6 +54,7 @@ public class NewAppReceiver extends BroadcastReceiver {
state = "安装了:";
break;
case Intent.ACTION_PACKAGE_REPLACED:
cleanLauncher3Cache();
state = "重装了:";
break;
case Intent.ACTION_PACKAGE_REMOVED:
@@ -86,21 +89,24 @@ public class NewAppReceiver extends BroadcastReceiver {
// }
}
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(new ObservableOnSubscribe<String>() {
@Override
public void subscribe(@NonNull ObservableEmitter<String> emitter) throws Exception {
newAppListener = new NewAppListener() {
@Override
public void setNewAppListener(String packageName) {
emitter.onNext(packageName);
}
};
}
Observable.create((ObservableEmitter<String> emitter) -> {
newAppListener = (String packageName) -> {
emitter.onNext(packageName);
};
})
.throttleLast(5, TimeUnit.SECONDS)
//这句很关键这是RxJava中的操作符在规定时间内观察者不在接收被观察者发送的事件
@@ -115,8 +121,9 @@ public class NewAppReceiver extends BroadcastReceiver {
Logutils.e(TAG, "sendAppInfo: onNext: " + s);
SaveListUtils.getDownLoadList().remove(s);
ApkUtils.getAppInfo(mContext);
// HTTPInterface.getNetAndLaunchSetting(mContext);
//HTTPInterface.getNetAndLaunchSetting(mContext);
HTTPInterface.getAppLimit(mContext);
// HTTPInterface.getAppinsideWeb(mContext, () -> Logutils.e(TAG, "onNext: setAPPinsideWebsite"));
}
@Override

View File

@@ -14,17 +14,14 @@ import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.ServiceConnection;
import android.net.ConnectivityManager;
import android.net.Network;
import android.net.NetworkInfo;
import android.net.wifi.WifiInfo;
import android.net.wifi.WifiManager;
import android.os.BatteryManager;
import android.os.Build;
import android.os.IBinder;
import android.os.SystemClock;
import android.provider.Settings;
import android.text.TextUtils;
import android.text.format.Formatter;
import android.util.Log;
import androidx.annotation.Nullable;
@@ -43,7 +40,6 @@ import com.mjsheng.myappstore.receiver.BootReceiver;
import com.mjsheng.myappstore.receiver.NewAppReceiver;
import com.mjsheng.myappstore.utils.JGYUtils;
import com.mjsheng.myappstore.utils.Logutils;
import com.mjsheng.myappstore.utils.NetworkUtils;
import com.mjsheng.myappstore.utils.SPUtils;
import com.mjsheng.myappstore.utils.XAPKUtils;
import com.lzy.okgo.OkGo;
@@ -59,7 +55,11 @@ import com.mjsheng.myappstore.utils.Utils;
import java.io.IOException;
import java.util.List;
import java.util.concurrent.TimeUnit;
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;
@@ -84,8 +84,7 @@ public class GuardService extends Service {
Logutils.e(TAG, "GuardService:建立链接");
boolean isServiceRunning = ServiceAliveUtils.isServiceAlive(GuardService.this, StepService.class.getName());
if (!isServiceRunning) {
Intent i = new Intent(GuardService.this, StepService.class);
startService(i);
startService(new Intent(GuardService.this, StepService.class));
}
}
@@ -105,20 +104,54 @@ public class GuardService extends Service {
};
}
private interface Start {
void onstar(long time);
}
private Start start;
private ObservableOnSubscribe<Long> subscribe = new ObservableOnSubscribe<Long>() {
@Override
public void subscribe(ObservableEmitter<Long> emitter) throws Exception {
start = emitter::onNext;
}
};
private Observer<Long> timeObserver = new Observer<Long>() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onNext(Long aLong) {
Logutils.e(TAG, "timeObserver: onNext: " + aLong);
startService(new Intent(GuardService.this, MainService.class));
}
@Override
public void onError(Throwable e) {
}
@Override
public void onComplete() {
}
};
@Override
public void onCreate() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
// 8.0之后需要在
registmNewAppReceiver();
startService(new Intent(this, MainService.class));
startService(new Intent(this, StepService.class));
startService(new Intent(this, GuardService.class));
startService(new Intent(this, LogcatService.class));
JGYUtils.startServices(GuardService.this);
}
registerPresentReceiver();
registerBatteryReceiver();
registerNetworkReceiver();
registerNetworkConnectedReceiver();
Observable.create(subscribe)
.throttleFirst(10, TimeUnit.MINUTES)
.subscribe(timeObserver);
super.onCreate();
}
@@ -135,9 +168,6 @@ public class GuardService extends Service {
@Override
public void onDestroy() {
super.onDestroy();
if (null != mNetworkChangedRecceiver) {
unregisterReceiver(mNetworkChangedRecceiver);
}
if (null != mNewAppReceiver) {
unregisterReceiver(mNewAppReceiver);
}
@@ -147,93 +177,6 @@ public class GuardService extends Service {
if (null != batteryReceiver) {
unregisterReceiver(batteryReceiver);
}
if (null != netReceiver) {
unregisterReceiver(netReceiver);
}
}
private NetworkChangedRecceiver mNetworkChangedRecceiver;
public void registerNetworkReceiver() {
mNetworkChangedRecceiver = new NetworkChangedRecceiver();
IntentFilter filter = new IntentFilter();
filter.setPriority(IntentFilter.SYSTEM_HIGH_PRIORITY);
filter.addAction("android.net.ethernet.ETHERNET_STATE_CHANGED");
filter.addAction("android.net.ethernet.STATE_CHANGE");
filter.addAction("android.net.conn.CONNECTIVITY_CHANGE");
filter.addAction("android.net.wifi.WIFI_STATE_CHANGED");
filter.addAction("android.net.wifi.STATE_CHANGE");
filter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION);
registerReceiver(mNetworkChangedRecceiver, filter);
}
public class NetworkChangedRecceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if (android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.LOLLIPOP) {
//获得ConnectivityManager对象
ConnectivityManager connMgr = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
//获取ConnectivityManager对象对应的NetworkInfo对象
//获取WIFI连接的信息
NetworkInfo wifiNetworkInfo = connMgr.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
//获取移动数据连接的信息
NetworkInfo dataNetworkInfo = connMgr.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
if (wifiNetworkInfo.isConnected() && dataNetworkInfo.isConnected()) {
Logutils.e("NetworkChangedRecceiver", "WIFI已连接,移动数据已连接");
} else if (wifiNetworkInfo.isConnected() && !dataNetworkInfo.isConnected()) {
Logutils.e("NetworkChangedRecceiver", "WIFI已连接,移动数据已断开");
} else if (!wifiNetworkInfo.isConnected() && dataNetworkInfo.isConnected()) {
Logutils.e("NetworkChangedRecceiver", "WIFI已连接,移动数据已连接");
} else {
Logutils.e("NetworkChangedRecceiver", "WIFI已连接,移动数据已断开");
}
//API大于23时使用下面的方式进行网络监听
} else {
//获得ConnectivityManager对象
ConnectivityManager connMgr = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
//获取所有网络连接的信息
Network[] networks = connMgr.getAllNetworks();
//用于存放网络连接信息
StringBuilder sb = new StringBuilder();
//通过循环将网络信息逐个取出来
for (int i = 0; i < networks.length; i++) {
//获取ConnectivityManager对象对应的NetworkInfo对象
NetworkInfo networkInfo = connMgr.getNetworkInfo(networks[i]);
if (null != networkInfo) {
sb.append(networkInfo.getTypeName() + " connect is " + networkInfo.isConnected());
}
}
Logutils.e("NetworkChangedRecceiver", sb.toString());
}
if (intent.getAction().equals(WifiManager.RSSI_CHANGED_ACTION)) {
Logutils.e("NetworkChangedRecceiver", "wifi信号强度变化");
}
//wifi连接上与否
if (intent.getAction().equals(WifiManager.NETWORK_STATE_CHANGED_ACTION)) {
NetworkInfo info = intent.getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO);
if (info.getState().equals(NetworkInfo.State.DISCONNECTED)) {
Logutils.e("NetworkChangedRecceiver", "wifi断开");
} else if (info.getState().equals(NetworkInfo.State.CONNECTED)) {
WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
WifiInfo wifiInfo = wifiManager.getConnectionInfo();
//获取当前wifi名称
Logutils.e("NetworkChangedRecceiver", "连接到网络 " + wifiInfo.getSSID());
startService(new Intent(context, MainService.class));
Aria.download(this).resumeAllTask();
}
}
//wifi打开与否
if (intent.getAction().equals(WifiManager.WIFI_STATE_CHANGED_ACTION)) {
int wifistate = intent.getIntExtra(WifiManager.EXTRA_WIFI_STATE, WifiManager.WIFI_STATE_DISABLED);
if (wifistate == WifiManager.WIFI_STATE_DISABLED) {
Logutils.e("NetworkChangedRecceiver", "系统关闭wifi");
} else if (wifistate == WifiManager.WIFI_STATE_ENABLED) {
Logutils.e("NetworkChangedRecceiver", "系统开启wifi");
}
}
}
}
private NewAppReceiver mNewAppReceiver;
@@ -284,10 +227,7 @@ public class GuardService extends Service {
//intent1.putExtra("test", "我是来测 A 应用的Android 8.0 系统静态广播的测试数据");
// 启动发送广播
sendBroadcast(intent1);
startService(new Intent(context, MainService.class));
startService(new Intent(context, StepService.class));
startService(new Intent(context, GuardService.class));
startService(new Intent(context, LogcatService.class));
JGYUtils.startServices(GuardService.this);
if (JGYUtils.getInstance().checkAppPlatform() == JGYUtils.ZhanruiPlatform) {
int setting_statusbar = Settings.System.getInt(context.getContentResolver(), "qch_hide_statusBar", 0);
String statusbarStatus = "";
@@ -313,8 +253,8 @@ public class GuardService extends Service {
// context.sendBroadcast(navIntent);
// }
sendScreenStatus(1);
break;
}
break;
case Intent.ACTION_SCREEN_OFF: {
HTTPInterface.getAppLimit(GuardService.this);
long time = System.currentTimeMillis();
@@ -331,8 +271,8 @@ public class GuardService extends Service {
// context.sendBroadcast(navIntent);
// }
sendScreenStatus(2);
break;
}
break;
case "android.intent.action.FACTORY_RESET":
case "android.intent.action.MASTER_CLEAR":
case "android.intent.action.MASTER_CLEAR_NOTIFICATION":
@@ -379,15 +319,16 @@ public class GuardService extends Service {
.subscribe(new Observer<ResponseBody>() {
@Override
public void onSubscribe(Disposable d) {
Log.e("getLockState", "onSubscribe: ");
}
@Override
public void onNext(ResponseBody responseBody) {
try {
com.alibaba.fastjson.JSONObject jsonObject = JSON.parseObject(responseBody.string());
Log.e("getLockState", "onNext: " + jsonObject);
int code = jsonObject.getInteger("code");
Log.e("getLockState", "onNext: code: "+code );
} catch (IOException e) {
e.printStackTrace();
}
@@ -395,17 +336,16 @@ public class GuardService extends Service {
@Override
public void onError(Throwable e) {
Log.e("getLockState", "onError: " + e.getMessage());
}
@Override
public void onComplete() {
Log.e("getLockState", "onComplete: ");
}
});
}
private void registerBatteryReceiver() {
if (null == batteryReceiver) {
batteryReceiver = new BatteryReceiver();
@@ -435,7 +375,7 @@ public class GuardService extends Service {
int elec = (level * 100) / scale;
Logutils.e(TAG, "electricity:=" + elec + "%");
if (elec == 50) {
startService(new Intent(getBaseContext(), MainService.class));
start.onstar(SystemClock.elapsedRealtime());
}
} else if (Intent.ACTION_POWER_CONNECTED.equals(action)
|| Intent.ACTION_POWER_DISCONNECTED.equals(action)
@@ -444,7 +384,7 @@ public class GuardService extends Service {
) {
setDefaultUSBStatus();
Logutils.e(TAG, action);
startService(new Intent(getBaseContext(), MainService.class));
start.onstar(SystemClock.elapsedRealtime());
}
}
}
@@ -474,41 +414,6 @@ public class GuardService extends Service {
sendBroadcast(usbIntent);
}
private void registerNetworkConnectedReceiver() {
if (null == netReceiver) {
netReceiver = new NetworkStateReceiver();
}
IntentFilter filter = new IntentFilter();
filter.addAction("android.net.ethernet.ETHERNET_STATE_CHANGED");
filter.addAction("android.net.ethernet.STATE_CHANGE");
filter.addAction("android.net.conn.CONNECTIVITY_CHANGE");
filter.addAction("android.net.wifi.WIFI_STATE_CHANGED");
filter.addAction("android.net.wifi.STATE_CHANGE");
filter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION);
registerReceiver(netReceiver, filter);
}
private NetworkStateReceiver netReceiver;
public class NetworkStateReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if (intent == null || intent.getAction() == null) {
Logutils.e(TAG, "NetworkStateReceiver: 异常");
return;
}
if (NetworkUtils.isConnected(getBaseContext())) {
Logutils.e(TAG, "NetworkStateReceiver: 网络连接成功");
startService(new Intent(getBaseContext(), MainService.class));
} else {
Logutils.e(TAG, "NetworkStateReceiver: 网络连接失败");
}
}
}
//在这里处理任务执行中的状态,如进度进度条的刷新
@Download.onTaskRunning
protected void running(DownloadTask task) {

View File

@@ -6,6 +6,7 @@ import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.Color;
import android.graphics.PixelFormat;
@@ -15,6 +16,7 @@ import android.os.SystemClock;
import android.provider.Settings;
import android.text.TextUtils;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.WindowManager;
@@ -23,6 +25,8 @@ import android.widget.TextView;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.blankj.utilcode.util.AdaptScreenUtils;
import com.blankj.utilcode.util.NetworkUtils;
import com.google.gson.JsonObject;
import com.mjsheng.myappstore.R;
import com.mjsheng.myappstore.action.JGYActions;
@@ -36,6 +40,7 @@ import com.mjsheng.myappstore.utils.SPUtils;
import com.mjsheng.myappstore.utils.SaveListUtils;
import com.mjsheng.myappstore.utils.SysSettingUtils;
import com.mjsheng.myappstore.utils.TimeUtils;
import com.mjsheng.myappstore.utils.ToastUtil;
import java.util.Arrays;
import java.util.HashSet;
@@ -48,11 +53,33 @@ import io.reactivex.ObservableOnSubscribe;
import io.reactivex.Observer;
import io.reactivex.disposables.Disposable;
public class MainService extends Service implements MainContact.MainView {
private MainPresenter mPresenter;
public class MainService extends Service implements MainContact.MainView, NetworkUtils.OnNetworkStatusChangedListener {
@SuppressLint("StaticFieldLeak")
public static MainPresenter mPresenter;
private static final String TAG = MainService.class.getSimpleName();
public static boolean netWorkIsRunning = false;
@Override
public void onDisconnected() {
Log.e("OnNetworkStatusChangedListener", "onDisconnected: ");
ToastUtil.betaShow("网络断开连接");
}
@Override
public void onConnected(NetworkUtils.NetworkType networkType) {
Log.e("OnNetworkStatusChangedListener", "onConnected: ");
runningTime = SystemClock.elapsedRealtime();
//直接获取数据
ToastUtil.betaShow("网络已连接");
mPresenter.getLockedState();
}
@Override
public Resources getResources() {
//1920是设计稿的宽单位px
return AdaptScreenUtils.adaptWidth(super.getResources(), 1920);
}
private interface Start {
void onstar(long time);
}
@@ -110,13 +137,20 @@ public class MainService extends Service implements MainContact.MainView {
mPresenter.setDisableSetting();
}
registerReceivers();
NetworkUtils.registerNetworkStatusChangedListener(this);
addShortcut();
Observable.create(subscribe)
.throttleLast(60, TimeUnit.SECONDS)
.throttleFirst(3, TimeUnit.HOURS)
.subscribe(timeObserver);
Observable.create(timeChangedSubscribe)
.throttleFirst(3, TimeUnit.HOURS)
.subscribe(timeChangedObserver);
// cleanLauncherCache();
setFloatingWindow(this);
timeChangedStart.onstar(System.currentTimeMillis());
setStatusbar();
//发送设备mac地址和信息
mPresenter.sendMACAddress();
setFloatingWindow(this);
super.onCreate();
}
@@ -124,6 +158,7 @@ public class MainService extends Service implements MainContact.MainView {
public void onDestroy() {
super.onDestroy();
unRegisterReceivers();
NetworkUtils.unregisterNetworkStatusChangedListener(this);
mPresenter.detachView();
}
@@ -305,6 +340,41 @@ public class MainService extends Service implements MainContact.MainView {
}
}
private interface TimeChangedStart {
void onstar(long time);
}
private TimeChangedStart timeChangedStart;
private ObservableOnSubscribe<Long> timeChangedSubscribe = new ObservableOnSubscribe<Long>() {
@Override
public void subscribe(ObservableEmitter<Long> emitter) throws Exception {
timeChangedStart = emitter::onNext;
}
};
private Observer<Long> timeChangedObserver = new Observer<Long>() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onNext(Long aLong) {
setFloatingWindow(MainService.this);
}
@Override
public void onError(Throwable e) {
}
@Override
public void onComplete() {
}
};
private TimeChangedReceiver mTimeChangedReceiver;
/**
@@ -337,17 +407,21 @@ public class MainService extends Service implements MainContact.MainView {
Logutils.e("TimeChangedReceiver", "onReceive:" + "timezone changed");
} else if (Intent.ACTION_TIME_TICK.equals(intent.getAction())) {
Logutils.e("TimeChangedReceiver", "onReceive:" + "time tick");
setFloatingWindow(MainService.this);
} else if (ACTION_UPDATE.equals(intent.getAction())) {
setFloatingWindow(MainService.this);
mPresenter.getScreenLockState();
Logutils.e("TimeChangedReceiver", "onReceive:" + "date update");
}
setFloatingWindow(context);
timeChangedStart.onstar(System.currentTimeMillis());
}
}
private void setFloatingWindow(Context context) {
synchronized private void setFloatingWindow(Context context) {
ForegroundAppUtil.openTopApp(context);
long nowTime = System.currentTimeMillis();
TimeUtils.ContralTime contralTime = TimeUtils.getDefaltContralTime(MainService.this);
Log.e(TAG, "setFloatingWindow: screenlocked: " + screenlocked);
if (null != contralTime) {
if (contralTime.inControlTime(nowTime)) {
if (!screenlocked) {
@@ -358,7 +432,6 @@ public class MainService extends Service implements MainContact.MainView {
}
timelocked = true;
} else {
mPresenter.getScreenLockState();
if (!screenlocked) {
hideFloatingWindow();
}
@@ -368,7 +441,6 @@ public class MainService extends Service implements MainContact.MainView {
if (!screenlocked) {
hideFloatingWindow();
}
mPresenter.getScreenLockState();
timelocked = false;
}
}
@@ -462,6 +534,7 @@ public class MainService extends Service implements MainContact.MainView {
@Override
public void setLockedState(boolean loocked) {
if (loocked) {
ToastUtil.betaShow("设备已上锁");
Logutils.e(TAG, "setLockedState: " + netWorkIsRunning);
//上传APP信息
ApkUtils.getAppInfo(this);
@@ -476,9 +549,10 @@ public class MainService extends Service implements MainContact.MainView {
// return;
}
//获取系统管控
mPresenter.getSystemSettingbegin();
mPresenter.setJpushTags();
netWorkIsRunning = true;
} else {
ToastUtil.betaShow("设备已解锁");
netWorkIsRunning = false;
SysSettingUtils.setEnableSetting(this);
}
@@ -521,12 +595,6 @@ public class MainService extends Service implements MainContact.MainView {
@Override
public void setAliasFinished() {
mPresenter.setJpushTags();
//设置极光推送tag
}
@Override
public void setTagsFinished() {
mPresenter.checkStoreUpdate();
}
@@ -537,12 +605,17 @@ public class MainService extends Service implements MainContact.MainView {
@Override
public void checkStoreUpdateFinished() {
mPresenter.checkInfoUpdate();
}
@Override
public void checkInfoUpdateFinished() {
mPresenter.checkTestUpdate();
}
@Override
public void checkTestUpdateFinished() {
mPresenter.getDefaultDesktop();
}
@Override
@@ -550,6 +623,17 @@ public class MainService extends Service implements MainContact.MainView {
}
@Override
public void setTagsFinished(boolean noTag) {
if (noTag) {
Log.e(TAG, "setTagsFinished: " + "not set tag");
netWorkIsRunning = false;
Log.e(TAG, "SettingFinished: " + (SystemClock.elapsedRealtime() - runningTime) + " ms");
} else {
mPresenter.getSystemSettingbegin();
}
}
@Override
public void getSystemSettingbegin() {
mPresenter.getAppLimit();
@@ -603,6 +687,11 @@ public class MainService extends Service implements MainContact.MainView {
@Override
public void setSystemSettingFinished() {
mPresenter.getDefaultApp();
}
@Override
public void setDefaultAppFinished() {
mPresenter.getROMApp();
}
@@ -623,8 +712,13 @@ public class MainService extends Service implements MainContact.MainView {
@Override
public void setTopAppFinished() {
mPresenter.getDefaultDesktop();
}
@Override
public void getDefaultDesktopFinished() {
netWorkIsRunning = false;
Logutils.e(TAG, "SettingFinished: " + (SystemClock.elapsedRealtime() - runningTime) + " ms");
Log.e(TAG, "SettingFinished: " + (SystemClock.elapsedRealtime() - runningTime) + " ms");
}
@Override
@@ -641,9 +735,4 @@ public class MainService extends Service implements MainContact.MainView {
screenlocked = false;
}
}
@Override
public void getDefaultDesktopFinished() {
}
}

View File

@@ -92,8 +92,8 @@ public class StepService extends Service {
//初始化websocket
Logutils.e(TAG, "onStartCommand: ");
initSocketClient();
mHandler.postDelayed(heartBeatRunnable, HEART_BEAT_RATE);//开启心跳检测
// initSocketClient();
// mHandler.postDelayed(heartBeatRunnable, HEART_BEAT_RATE);//开启心跳检测
bindService(new Intent(this, GuardService.class), mServiceConnection, Context.BIND_IMPORTANT);
return START_STICKY;
}
@@ -129,7 +129,7 @@ public class StepService extends Service {
Logutils.i("JWebSocketClientService", "websocket连接关闭");
// client.close();
// initSocketClient();
mHandler.postDelayed(heartBeatRunnable, HEART_BEAT_RATE);//开启心跳检测
// mHandler.postDelayed(heartBeatRunnable, HEART_BEAT_RATE);//开启心跳检测
}
@@ -139,7 +139,7 @@ public class StepService extends Service {
Logutils.i("JWebSocketClientService", "websocket连接错误");
// client.close();
// initSocketClient();
mHandler.postDelayed(heartBeatRunnable, HEART_BEAT_RATE);//开启心跳检测
// mHandler.postDelayed(heartBeatRunnable, HEART_BEAT_RATE);//开启心跳检测
}
};
@@ -206,7 +206,7 @@ public class StepService extends Service {
sendMsg(Utils.getSerial());
} else if (client.isClosed()) {
Logutils.i("JWebSocketClientService", "websocket重连中");
reconnectWs();
// reconnectWs();
}
} else {
//如果client已为空重新初始化连接
@@ -214,7 +214,7 @@ public class StepService extends Service {
initSocketClient();
}
//每隔一定的时间,对长连接进行一次心跳检测
mHandler.postDelayed(this, HEART_BEAT_RATE);
// mHandler.postDelayed(this, HEART_BEAT_RATE);
}
};

View File

@@ -22,6 +22,7 @@ import androidx.annotation.RequiresApi;
import androidx.core.content.FileProvider;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
import android.widget.Toast;
@@ -50,7 +51,6 @@ import java.util.Arrays;
import java.util.Enumeration;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.function.Predicate;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
@@ -154,21 +154,14 @@ public class ApkUtils {
* 检查手机上是否安装了指定的软件
*/
public static boolean isAvailable(Context context, String packageName) {
// 获取packagemanager
final PackageManager packageManager = context.getPackageManager();
// 获取所有已安装程序的包信息
List<PackageInfo> packageInfos = packageManager.getInstalledPackages(0);
// 用于存储所有已安装程序的包名
List<String> packageNames = new ArrayList<>();
// 从pinfo中将包名字逐一取出压入pName list中
if (packageInfos != null) {
for (int i = 0; i < packageInfos.size(); i++) {
String packName = packageInfos.get(i).packageName;
packageNames.add(packName);
}
PackageManager packageManager = context.getPackageManager();
PackageInfo info = null;
try {
info = packageManager.getPackageInfo(packageName, 0);
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
// 判断packageNames中是否有目标程序的包名有TRUE没有FALSE
return packageNames.contains(packageName);
return info != null;
}
/**

View File

@@ -86,8 +86,8 @@ public class CmdUtil {
public static final int ERROR = -1;
public int code = ERROR;
String error;
String success;
public String error;
public String success;
@Override
public String toString() {

View File

@@ -12,6 +12,7 @@ import android.content.IntentFilter;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.content.pm.UserInfo;
import android.graphics.Bitmap;
import android.net.ConnectivityManager;
@@ -23,6 +24,7 @@ import android.os.PowerManager;
import android.os.RemoteException;
import android.provider.Settings;
import android.text.TextUtils;
import android.util.Log;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
@@ -48,6 +50,12 @@ import com.mjsheng.myappstore.bean.NetAndLaunchBean;
import com.mjsheng.myappstore.bean.NetAndLaunchData;
import com.mjsheng.myappstore.bean.TTAppground;
import com.mjsheng.myappstore.comm.CommonDatas;
import com.mjsheng.myappstore.service.GuardService;
import com.mjsheng.myappstore.service.LogcatService;
import com.mjsheng.myappstore.service.MainService;
import com.mjsheng.myappstore.service.StepService;
import org.w3c.dom.Text;
import java.io.File;
import java.io.FileInputStream;
@@ -75,6 +83,7 @@ import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.function.Predicate;
import java.util.stream.Collectors;
import static android.app.ActivityManager.RECENT_IGNORE_UNAVAILABLE;
@@ -245,8 +254,10 @@ public class JGYUtils {
if (TextUtils.isEmpty(qch_app_power_on)) {
//当 qch_app_power_on 的值为空时,会造成系统所有应用断网
Settings.System.putString(mContext.getContentResolver(), "qch_app_power_on", "Invalid");
Logutils.e(TAG, "setNetAndlaunch: qch_app_power_on: " + "Invalid");
} else {
Settings.System.putString(mContext.getContentResolver(), "qch_app_power_on", qch_app_power_on);
Logutils.e(TAG, "setNetAndlaunch: qch_app_power_on: " + qch_app_power_on);
}
// if (BuildConfig.DEBUG) {
// TODO: 2021/7/2 测试写入为空是否断网
@@ -351,8 +362,10 @@ public class JGYUtils {
if (TextUtils.isEmpty(qch_app_power_on)) {
//当 qch_app_power_on 的值为空时,会造成系统所有应用断网
Settings.System.putString(mContext.getContentResolver(), "qch_app_power_on", "Invalid");
Logutils.e(TAG, "setNetAndlaunch: qch_app_power_on: " + "Invalid");
} else {
Settings.System.putString(mContext.getContentResolver(), "qch_app_power_on", qch_app_power_on);
Logutils.e(TAG, "setNetAndlaunch: qch_app_power_on: " + qch_app_power_on);
}
// if (BuildConfig.DEBUG) {
// TODO: 2021/7/2 测试写入为空是否断网
@@ -370,15 +383,15 @@ public class JGYUtils {
String not = Settings.System.getString(context.getContentResolver(), JGYActions.ACTION_HrReceiver_JGY);
//清除旧数据
if (!TextUtils.isEmpty(dis)) {
Logutils.e(TAG, "setAppNetwork: " + dis);
Logutils.e(TAG, "setAppNetwork: dis = " + dis);
Settings.System.putString(context.getContentResolver(), JGYActions.ACTION_HrReceiver_JGY_DIS, "Invalid");
}
if (!TextUtils.isEmpty(not)) {
Logutils.e(TAG, "setAppNetwork: " + not);
Logutils.e(TAG, "setAppNetwork: not = " + not);
Settings.System.putString(context.getContentResolver(), JGYActions.ACTION_HrReceiver_JGY, "Invalid");
}
String oldBlackList = (String) SPUtils.get(context, JGYActions.ACTION_HrReceiver_JGY_DIS, "Invalid");
String oldBlackList = (String) SPUtils.get(context, JGYActions.ACTION_HrReceiver_JGY_DIS, "");
HashSet<String> oldBlackListSet = new HashSet<>(Arrays.asList(oldBlackList.split(",")));
oldBlackListSet.removeIf(new Predicate<String>() {
@Override
@@ -393,6 +406,13 @@ public class JGYUtils {
Logutils.e(TAG, "setAppNetwork: blackList: " + blackList);
for (String pkg : blackList) {
if (TextUtils.isEmpty(pkg)) continue;
//发送没有安装的
if (!ApkUtils.isAvailable(context, pkg)) {
Log.e(TAG, "setAppNetwork: skip: " + pkg);
continue;
} else {
Log.e(TAG, "setAppNetwork: " + pkg + " 已安装");
}
Intent netControlNotIntent = new Intent(JGYActions.ACTION_HrReceiver_JGY_DIS);
netControlNotIntent.putExtra("package_name", pkg);
netControlNotIntent.setPackage("com.android.settings");
@@ -423,6 +443,12 @@ public class JGYUtils {
}
for (String pkg : addedNet) {
if (TextUtils.isEmpty(pkg)) continue;
if (!ApkUtils.isAvailable(context, pkg)) {
Log.e(TAG, "setAppNetwork: skip: " + pkg);
continue;
} else {
Log.e(TAG, "setAppNetwork: " + pkg + " 已安装");
}
Intent netControlNotIntent = new Intent(JGYActions.ACTION_HrReceiver_JGY_DIS);
netControlNotIntent.putExtra("package_name", pkg);
netControlNotIntent.setPackage("com.android.settings");
@@ -457,6 +483,10 @@ public class JGYUtils {
});
for (String pkg : oldBlackListSet) {
if (TextUtils.isEmpty(pkg)) continue;
if (!ApkUtils.isAvailable(mContext, pkg)) {
Log.e(TAG, "setAppNetwork: skip: " + pkg);
continue;
}
Intent netControlNotIntent = new Intent(JGYActions.ACTION_HrReceiver_JGY_DIS);
netControlNotIntent.putExtra("package_name", pkg);
netControlNotIntent.setPackage("com.android.settings");
@@ -583,6 +613,8 @@ public class JGYUtils {
}
} else if (response.code == 400) {
//列表为空的情况
List<TTAppground> whiteApp = new ArrayList<>();
setWhiteApp(whiteApp);
sendAllweb(mContext);
sendwebUrl(mContext);
//ToastUtil.show(msg);
@@ -595,9 +627,11 @@ public class JGYUtils {
@SuppressLint("NewApi")
synchronized private void setWhiteApp(List<TTAppground> appgrounds) {
//去重
List<TTAppground> ttAppgrounds = appgrounds.stream().distinct().collect(Collectors.toList());
List<TTAppground> old = getOldWhitelist();
comparedAppground(old, appgrounds);
setWhiteList(appgrounds);
comparedAppground(old, ttAppgrounds);
setWhiteList(ttAppgrounds);
}
synchronized private void comparedAppground(List<TTAppground> oldAppgrounds, List<TTAppground> newAppgrounds) {
@@ -638,8 +672,7 @@ public class JGYUtils {
addAppground(addAppgrounds);
deleteAppground(deleteAppgrounds);
changeAppground(oldAppgroundsMap, changedAppgrounds);
Log.e(TAG, "comparedAppground: complete");
}
private void addAppground(List<TTAppground> appgroundList) {
@@ -655,6 +688,7 @@ public class JGYUtils {
private void deleteAppground(List<TTAppground> appgroundList) {
for (TTAppground appground : appgroundList) {
deleteWhitelistUrl(appground.getPackages(), appground.getAddress());
deleteOtherAppWhitelist(appground.getPackages());
Logutils.e("comparedAppground", "deleteAppground: " + appground.getAddress());
}
}
@@ -690,13 +724,27 @@ public class JGYUtils {
if (whiteList == null) {
whiteList = new ArrayList<>();
}
return whiteList;
//去重
whiteList.removeIf(new Predicate<TTAppground>() {
@Override
public boolean test(TTAppground ttAppground) {
return !ApkUtils.isAvailable(mContext, ttAppground.getPackages());
}
});
List<TTAppground> ttAppgrounds = whiteList.stream().distinct().collect(Collectors.toList());
return ttAppgrounds;
}
/**
* @param appgrounds 写入缓存
*/
private void setWhiteList(List<TTAppground> appgrounds) {
appgrounds.removeIf(new Predicate<TTAppground>() {
@Override
public boolean test(TTAppground ttAppground) {
return !ApkUtils.isAvailable(mContext, ttAppground.getPackages());
}
});
String data = new Gson().toJson(appgrounds);
SPUtils.put(mContext, JGY_APPINSIDE_WHITELIST, data);
}
@@ -710,8 +758,8 @@ public class JGYUtils {
} else {
addPackage(appground.getPackages());
//删除空的,旧版本使用这个清除
deleteWhitelistUrl(appground.getPackages(), "Invalid");
addToWhitelist(appground.getPackages(), appground.getAddress());
deleteWhitelistUrl(appground.getPackages(), "Invalid");
}
}
}
@@ -734,7 +782,7 @@ public class JGYUtils {
* @param urls 添加app白名单
*/
synchronized private void addToWhitelist(String pkg, String urls) {
if (TextUtils.isEmpty(urls.trim())) {
if (TextUtils.isEmpty(urls)) {
Logutils.e(TAG, "addToWhitelist: " + "urls is NULL");
return;
}
@@ -743,7 +791,8 @@ public class JGYUtils {
if (TextUtils.isEmpty(url)) {
continue;
}
Logutils.e(TAG, "addToWhitelist: pkg:" + pkg);
deleteOtherAppWhitelist(pkg);
Logutils.e(TAG, "addToWhitelist: pkg:" + pkg + " url: " + url);
Intent intent25 = new Intent();
intent25.setAction("qch_app_setAddAppWhitWebUid");
intent25.putExtra("AddAppWhitWebUidPackage", pkg);
@@ -758,7 +807,7 @@ public class JGYUtils {
* @param urls 删除某个app 内某个白名单
*/
synchronized private void deleteWhitelistUrl(String pkg, String urls) {
if (TextUtils.isEmpty(urls.trim())) {
if (TextUtils.isEmpty(urls)) {
Logutils.e(TAG, "addToWhitelist: " + "urls is NULL");
return;
}
@@ -778,10 +827,9 @@ public class JGYUtils {
}
/**
* @param pkg 取消某个白名单app
* @param pkg 开启和关闭白名单管控都需要发送
*/
// TODO: 2021/6/16 底层未实现功能
synchronized private void disableAppWhitelist(String pkg) {
synchronized private void deleteOtherAppWhitelist(String pkg) {
Logutils.e(TAG, "disableAppWhitelist: " + pkg);
Intent intent24 = new Intent();
intent24.setAction("qch_app_setDelAppWhitUid");
@@ -850,6 +898,7 @@ public class JGYUtils {
}
synchronized public void SettingSysData(String data) {
SPUtils.put(mContext, "SystemSettingData", data);
if (TextUtils.isEmpty(data)) {
Logutils.e(TAG, "SettingSysData: " + "data is empty");
SysSettingUtils.setDisableSetting(mContext);
@@ -1046,10 +1095,12 @@ public class JGYUtils {
long versionCode = data.getApp_version_code();
String packageName = data.getApp_package();
String app_name = data.getApp_name();
String app_md5 = data.getApp_md5();
// String app_id = jsonObject.get("app_id").getAsString();
JSONObject object = new JSONObject();
object.put("app_name", app_name);
object.put("app_package", packageName);
object.put("MD5", app_md5);
// object.put("app_id", app_id);
PackageManager pm = mContext.getPackageManager();
PackageInfo packageInfo = null;
@@ -1277,6 +1328,7 @@ public class JGYUtils {
}
public void setDeveloperOptions(int state) {
Log.e(TAG, "getDeveloper: " + state);
if (!BuildConfig.DEBUG) {
Settings.System.putInt(mContext.getContentResolver(), "qch_Developeroptions", state);
if (state == 1) {
@@ -1284,9 +1336,12 @@ public class JGYUtils {
intent.setAction("qch_developeroptions_close");
intent.setPackage("com.android.settings");
mContext.sendBroadcast(intent);
Log.e(TAG, "getDeveloper: " + "关闭开发者模式");
} else {
Log.e(TAG, "getDeveloper: " + "打开开发者模式");
// ToastUtil.show("打开开发者模式");
}
}
}
public void hookWebView() {
@@ -1566,7 +1621,7 @@ public class JGYUtils {
return ActivityTaskManager.getService().getRecentTasks(numTasks,
RECENT_IGNORE_UNAVAILABLE, userId).getList();
} catch (RemoteException e) {
Logutils.e(TAG, "Failed to get recent tasks "+ e);
Logutils.e(TAG, "Failed to get recent tasks " + e);
return new ArrayList<>();
}
}
@@ -1684,4 +1739,75 @@ public class JGYUtils {
return "未获取到IP";
}
private static long lastTime;
public static void startServices(Context context) {
Log.e(TAG, "startServices: " + context.getClass().getSimpleName());
if (System.currentTimeMillis() - lastTime < 10 * 60 * 1000) {
Log.e(TAG, "startServices: " + "lastTime: " + lastTime);
} else {
lastTime = System.currentTimeMillis();
context.startService(new Intent(context, MainService.class));
context.startService(new Intent(context, StepService.class));
context.startService(new Intent(context, GuardService.class));
context.startService(new Intent(context, LogcatService.class));
}
}
public void setDefaultDesktop(String pkg) {
if (TextUtils.isEmpty(pkg)) {
setDefaultDesktop("", "");
} else {
String className = getStartClassName(pkg);
if (TextUtils.isEmpty(className)) {
setDefaultDesktop("", "");
} else {
setDefaultDesktop(pkg, className);
}
}
}
public String getStartClassName(String pkg) {
PackageInfo packageInfo = null;
try {
packageInfo = mContext.getPackageManager().getPackageInfo(pkg, 0);
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
if (packageInfo == null) {
return "";
} else {
// 创建一个类别为CATEGORY_LAUNCHER的该包名的Intent
Intent resolveIntent = new Intent(Intent.ACTION_MAIN, null);
resolveIntent.addCategory(Intent.CATEGORY_LAUNCHER);
resolveIntent.setPackage(packageInfo.packageName);
// 通过getPackageManager()的queryIntentActivities方法遍历
List<ResolveInfo> resolveinfoList = mContext.getPackageManager()
.queryIntentActivities(resolveIntent, 0);
if (resolveinfoList == null || resolveinfoList.size() == 0) {
return "";
}
ResolveInfo resolveinfo = resolveinfoList.iterator().next();
if (resolveinfo != null) {
// packagename = 参数packname
String packageName = resolveinfo.activityInfo.packageName;
// 这个就是我们要找的该APP的LAUNCHER的Activity[组织形式packagename.mainActivityname]
String className = resolveinfo.activityInfo.name;
return className;
} else {
return "";
}
}
}
public void setDefaultDesktop(String pkg, String className) {
Intent intent = new Intent("setDefaultLauncher");
intent.putExtra("package", pkg);
intent.putExtra("className", className);
intent.setPackage("com.android.settings");
mContext.sendBroadcast(intent);
Log.e(TAG, "setDefaultDesktop: " + pkg + ":" + className);
}
}

View File

@@ -5,7 +5,8 @@ import android.util.Log;
import com.mjsheng.myappstore.BuildConfig;
public class Logutils {
private final static boolean debug = BuildConfig.DEBUG;
// private final static boolean debug = BuildConfig.DEBUG;
private final static boolean debug = true;
public static void i(String tag, String msg) {
if (debug) {

View File

@@ -6,7 +6,6 @@ import android.net.ConnectivityManager;
import android.net.NetworkCapabilities;
import android.net.NetworkInfo;
import android.os.Build;
import android.util.Log;
public class NetworkUtils {
public static boolean isConnected(Context context) {

View File

@@ -8,6 +8,7 @@ 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.JSONArray;
@@ -55,7 +56,7 @@ public class SysSettingUtils {
setBrowserInput(context, jsonObject);
//otg开关
// int setting_otg = changeNum(jsonObject.getInteger("setting_otg"));
// Logutils.e("SystemSetting", "setting_otg---------" + setting_otg);
// Logutils.e(TAG, "setting_otg---------" + setting_otg);
// String otgStatus = "";
// switch (setting_otg) {
// case 0:
@@ -73,6 +74,7 @@ public class SysSettingUtils {
* @param context 关闭所有功能
*/
public static void setDisableSetting(Context context) {
ToastUtil.betaShow("关闭所有功能");
Logutils.e("setDisableSetting", "Close all settings: ");
setPhoneList(context, 1);
setUSBstate(context, 1);
@@ -85,8 +87,10 @@ public class SysSettingUtils {
setWallpaper(context, 0);
setCanReset(context, 1);
setAutoTime(context, 1);
setBrowserInput(context, 0);
JGYUtils.getInstance().setDeveloperOptions(1);
setBrowserInput(context, 1);
if (!BuildConfig.DEBUG) {
JGYUtils.getInstance().setDeveloperOptions(1);
}
setStatusBar(context, 1);
}
@@ -94,6 +98,7 @@ public class SysSettingUtils {
* @param context 开启所有功能
*/
public static void setEnableSetting(Context context) {
ToastUtil.betaShow("打开所有功能");
setPhoneList(context, 0);
// setUSBstate(context,0);
setBluetooth(context, 0);
@@ -113,17 +118,17 @@ public class SysSettingUtils {
try {
//设置电话功能,电话白名单
boolean qch_call_forbid = Settings.System.putInt(context.getContentResolver(), "qch_call_forbid", state);
Logutils.e("SystemSetting", "qch_call_forbid:" + qch_call_forbid);
Logutils.e(TAG, "qch_call_forbid:" + qch_call_forbid);
boolean qch_white_list_on = Settings.System.putInt(context.getContentResolver(), "qch_white_list_on", state);
Logutils.e("SystemSetting", "qch_white_list_on:" + qch_white_list_on);
Logutils.e(TAG, "qch_white_list_on:" + qch_white_list_on);
boolean qch_white_list_Array = Settings.System.putString(context.getContentResolver(), "qch_white_list_Array", "");
// ToastTool.show("qch_call_forbid::"+setting_call+"----setting_phones::"+setting_phones+"----"+qch_white_list_Array+"---"+qch_call_forbid);
Logutils.e("SystemSetting", "qch_white_list_Array:" + qch_white_list_Array + "---" + qch_white_list_Array);
Logutils.e(TAG, "qch_white_list_Array:" + qch_white_list_Array + "---" + qch_white_list_Array);
boolean qch_sdcard_forbid_on = Settings.System.putInt(context.getContentResolver(), "qch_sdcard_forbid_on", state);
Logutils.e("SystemSetting", "qch_sdcard_forbid_on:" + qch_sdcard_forbid_on);
Logutils.e(TAG, "qch_sdcard_forbid_on:" + qch_sdcard_forbid_on);
} catch (Exception e) {
Logutils.e(TAG, "setPhoneList: " + e.getMessage());
}
@@ -136,26 +141,26 @@ public class SysSettingUtils {
//电话通话开关
int setting_call = changeNum(jsonObject.getInteger("setting_call"));
boolean qch_call_forbid = Settings.System.putInt(context.getContentResolver(), "qch_call_forbid", setting_call);
Logutils.e("SystemSetting", "qch_call_forbid:" + qch_call_forbid);
Logutils.e(TAG, "qch_call_forbid:" + qch_call_forbid);
//电话白名单开关
int setting_phone = changeNum(jsonObject.getInteger("setting_phone"));
boolean qch_white_list_on = Settings.System.putInt(context.getContentResolver(), "qch_white_list_on", setting_phone);
Logutils.e("SystemSetting", "qch_white_list_on:" + qch_white_list_on);
Logutils.e(TAG, "qch_white_list_on:" + qch_white_list_on);
//白名单列表
if (setting_phone == 1) {
boolean qch_white_list_Array = Settings.System.putString(context.getContentResolver(), "qch_white_list_Array", "empty");
// ToastTool.show("qch_call_forbid::"+setting_call+"----setting_phones::"+setting_phones+"----"+qch_white_list_Array+"---"+qch_call_forbid);
Logutils.e("SystemSetting", "qch_white_list_Array:" + qch_white_list_Array);
Logutils.e(TAG, "qch_white_list_Array:" + qch_white_list_Array);
} else {
String setting_phones = jsonObject.getString("setting_phones");
boolean qch_white_list_Array = Settings.System.putString(context.getContentResolver(), "qch_white_list_Array", setting_phones);
// ToastTool.show("qch_call_forbid::"+setting_call+"----setting_phones::"+setting_phones+"----"+qch_white_list_Array+"---"+qch_call_forbid);
Logutils.e("SystemSetting", "qch_white_list_Array:" + qch_white_list_Array + "---" + setting_phones);
Logutils.e(TAG, "qch_white_list_Array:" + qch_white_list_Array + "---" + setting_phones);
}
//存储卡
int setting_memory = changeNum(jsonObject.getInteger("setting_memory"));
boolean qch_sdcard_forbid_on = Settings.System.putInt(context.getContentResolver(), "qch_sdcard_forbid_on", setting_memory);
Logutils.e("SystemSetting", "qch_sdcard_forbid_on:" + qch_sdcard_forbid_on);
Logutils.e(TAG, "qch_sdcard_forbid_on:" + qch_sdcard_forbid_on);
} catch (Exception e) {
Logutils.e(TAG, "setPhoneList: " + e.getMessage());
}
@@ -169,7 +174,7 @@ public class SysSettingUtils {
if (!BuildConfig.DEBUG) {
try {
boolean qch_usb_choose = Settings.System.putString(context.getContentResolver(), "qch_usb_choose", "usb_charge");
Logutils.e("SystemSetting", "qch_usb_choose:" + qch_usb_choose);
Logutils.e(TAG, "qch_usb_choose:" + qch_usb_choose);
String usbStatus = "qch_action_usb_usb_charge";
Intent usbIntent = new Intent(usbStatus).setPackage("com.android.settings");
context.sendBroadcast(usbIntent);
@@ -188,7 +193,7 @@ public class SysSettingUtils {
if (!BuildConfig.DEBUG) {
try {
boolean qch_usb_choose = Settings.System.putString(context.getContentResolver(), "qch_usb_choose", setting_usb);
Logutils.e("SystemSetting", "qch_usb_choose---------" + qch_usb_choose);
Logutils.e(TAG, "qch_usb_choose---------" + qch_usb_choose);
String usbStatus = "";
switch (setting_usb) {
case "usb_charge":
@@ -214,7 +219,7 @@ public class SysSettingUtils {
try {
boolean qch_bht_forbid_on = Settings.System.putInt(context.getContentResolver(), "qch_bht_forbid_on", state);
//写入系统数据库
Logutils.e("SystemSetting", "qch_bht_forbid_on:" + qch_bht_forbid_on);
Logutils.e(TAG, "qch_bht_forbid_on:" + qch_bht_forbid_on);
BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
if (qch_bht_forbid_on) {
//成功
@@ -244,7 +249,7 @@ public class SysSettingUtils {
//蓝牙传输开关
boolean qch_bht_forbid_on = Settings.System.putInt(context.getContentResolver(), "qch_bht_forbid_on", setting_bht);
Logutils.e("SystemSetting", "qch_bht_forbid_on:" + qch_bht_forbid_on);
Logutils.e(TAG, "qch_bht_forbid_on:" + qch_bht_forbid_on);
BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
if (qch_bht_forbid_on) {
//成功
@@ -257,7 +262,7 @@ public class SysSettingUtils {
String setting_context = jsonObject.getString("setting_context");
if (setting_bhtvideo == 0) {
if (null != setting_context && !setting_context.equals("") && !setting_context.equals(" ") && !setting_context.equals("null")) {
Logutils.e("SystemSetting", "setting_context:" + setting_context);
Logutils.e(TAG, "setting_context:" + setting_context);
Settings.System.putString(context.getContentResolver(), "qch_bhtvideo_forbid_on", setting_context);
} else {
Settings.System.putString(context.getContentResolver(), "qch_bhtvideo_forbid_on", "Empty");
@@ -283,7 +288,7 @@ public class SysSettingUtils {
intent.setPackage("com.android.settings");
context.sendStickyBroadcast(intent);
boolean qch_hotspot_forbid_on = Settings.System.putInt(context.getContentResolver(), "qch_hotspot_forbid_on", state);
Logutils.e("SystemSetting", "qch_hotspot_forbid_on:" + qch_hotspot_forbid_on);
Logutils.e(TAG, "qch_hotspot_forbid_on:" + qch_hotspot_forbid_on);
} catch (Exception e) {
Logutils.e(TAG, "setHotspot: " + e.getMessage());
}
@@ -299,8 +304,8 @@ public class SysSettingUtils {
context.sendStickyBroadcast(intent);
}
boolean qch_hotspot_forbid_on = Settings.System.putInt(context.getContentResolver(), "qch_hotspot_forbid_on", setting_hotspot);
Logutils.e("SystemSetting", "qch_hotspot_forbid_on---------" + setting_hotspot);
Logutils.e("SystemSetting", "qch_hotspot_forbid_on---------" + qch_hotspot_forbid_on);
Logutils.e(TAG, "qch_hotspot_forbid_on---------" + setting_hotspot);
Logutils.e(TAG, "qch_hotspot_forbid_on---------" + qch_hotspot_forbid_on);
} catch (Exception e) {
Logutils.e(TAG, "setHotspot: " + e.getMessage());
}
@@ -311,7 +316,7 @@ public class SysSettingUtils {
int setting_navigation = 0;
//写入到系统不涉及任何管控,因为之前调用会频繁隐藏显示
boolean qch_hide_navigationBar = Settings.System.putInt(context.getContentResolver(), "qch_hide_NavigationBar", setting_navigation);
Logutils.e("SystemSetting", "qch_hide_navigationBar---------" + qch_hide_navigationBar);
Logutils.e(TAG, "qch_hide_navigationBar---------" + qch_hide_navigationBar);
String navigationStatus = "";
switch (setting_navigation) {
@@ -333,7 +338,7 @@ public class SysSettingUtils {
if (oldNum != setting_statusbar) {
//写入到系统不涉及任何管控,因为之前调用会频繁隐藏显示
boolean qch_hide_statusBar = Settings.System.putInt(context.getContentResolver(), "qch_hide_statusBar", setting_statusbar);
Logutils.e("SystemSetting", "qch_hide_statusBar---------" + qch_hide_statusBar);
Logutils.e(TAG, "qch_hide_statusBar---------" + qch_hide_statusBar);
String statusbarStatus = "";
switch (setting_statusbar) {
case 0:
@@ -353,7 +358,7 @@ public class SysSettingUtils {
int setting_navigation = changeNum(jsonObject.getInteger("setting_navigation"));
//写入到系统不涉及任何管控,因为之前调用会频繁隐藏显示
boolean qch_hide_navigationBar = Settings.System.putInt(context.getContentResolver(), "qch_hide_NavigationBar", setting_navigation);
Logutils.e("SystemSetting", "qch_hide_navigationBar---------" + qch_hide_navigationBar);
Logutils.e(TAG, "qch_hide_navigationBar---------" + qch_hide_navigationBar);
String navigationStatus = "";
switch (setting_navigation) {
@@ -374,7 +379,7 @@ public class SysSettingUtils {
if (oldNum != setting_statusbar) {
//写入到系统不涉及任何管控,因为之前调用会频繁隐藏显示
boolean qch_hide_statusBar = Settings.System.putInt(context.getContentResolver(), "qch_hide_statusBar", setting_statusbar);
Logutils.e("SystemSetting", "qch_hide_statusBar---------" + qch_hide_statusBar);
Logutils.e(TAG, "qch_hide_statusBar---------" + qch_hide_statusBar);
String statusbarStatus = "";
switch (setting_statusbar) {
case 0:
@@ -393,9 +398,9 @@ public class SysSettingUtils {
try {
//摄像头开关
boolean qch_app_camera = Settings.System.putInt(context.getContentResolver(), "qch_app_camera", state);
Logutils.e("SystemSetting", "qch_app_camera1:" + state);
Logutils.e(TAG, "qch_app_camera1:" + state);
// ApkUtils.hideSystemSettingAPP(context, "com.mediatek.camera");
Logutils.e("SystemSetting", "setting_camera---------" + qch_app_camera);
Logutils.e(TAG, "setting_camera---------" + qch_app_camera);
String cameraStatus = "qch_camera_forbid";
switch (state) {
case 0:
@@ -417,9 +422,9 @@ public class SysSettingUtils {
//摄像头开关
int setting_camera = changeNum(jsonObject.getInteger("setting_camera"));
Settings.System.putInt(context.getContentResolver(), "qch_app_camera", setting_camera);
Logutils.e("SystemSetting", "qch_app_camera2:" + setting_camera);
Logutils.e(TAG, "qch_app_camera2:" + setting_camera);
// ApkUtils.hideSystemSettingAPP(context, "com.mediatek.camera");
Logutils.e("SystemSetting", "setting_camera---------" + setting_camera);
Logutils.e(TAG, "setting_camera---------" + setting_camera);
String cameraStatus = "";
switch (setting_camera) {
case 0:
@@ -441,7 +446,7 @@ public class SysSettingUtils {
//tfmedia开关
// int setting_tfmedia = 1;
boolean qch_tfmedia_forbid = Settings.System.putInt(context.getContentResolver(), "qch_tfmedia_forbid", state);
Logutils.e("SystemSetting", "setting_tfmedia---------" + qch_tfmedia_forbid);
Logutils.e(TAG, "setting_tfmedia---------" + qch_tfmedia_forbid);
String tfmediaStatus = "";
switch (state) {
case 0:
@@ -455,7 +460,7 @@ public class SysSettingUtils {
context.sendBroadcast(tfmediaIntent);
if (state == 1) {
boolean qch_tfmedia_filetypes = Settings.System.putString(context.getContentResolver(), "qch_tfmedia_filetypes", "Empty");//影音管控
Logutils.e("SystemSetting", "qch_tfmedia_filetypes:" + qch_tfmedia_filetypes);
Logutils.e(TAG, "qch_tfmedia_filetypes:" + qch_tfmedia_filetypes);
} else {
Settings.System.putInt(context.getContentResolver(), "qch_tfmedia_forbid", 0);
}
@@ -464,23 +469,28 @@ public class SysSettingUtils {
}
}
/**
* @param context
* @param jsonObject
* tfmedia开关
*/
private static void setTF(Context context, JSONObject jsonObject) {
try {
//tfmedia开关
// TODO: 2021/5/24 正式后台暂时无法修改
int setting_tfmedia = jsonObject.getInteger("setting_tfmedia");
if (JGYUtils.isOfficialVersion() || JGYUtils.isBetaVersion()) {
setting_tfmedia = changeNum(setting_tfmedia);
}
// if (JGYUtils.isOfficialVersion() ) {
// setting_tfmedia = changeNum(setting_tfmedia);
// }
boolean qch_tfmedia_forbid = Settings.System.putInt(context.getContentResolver(),
"qch_tfmedia_forbid", setting_tfmedia);
Logutils.e("SystemSetting", "setting_tfmedia---------" + qch_tfmedia_forbid);
Logutils.e(TAG, "setting_tfmedia---------" + qch_tfmedia_forbid);
String tfmediaStatus = "";
switch (setting_tfmedia) {
case 0:
Logutils.e(TAG, "setting_tfmedia: " + "打开");
tfmediaStatus = "qch_tfmedia_open";
break;
case 1:
Logutils.e(TAG, "setting_tfmedia: " + "禁止");
tfmediaStatus = "qch_tfmedia_forbid";
break;
}
@@ -497,12 +507,12 @@ public class SysSettingUtils {
}
stringBuffer.deleteCharAt(stringBuffer.length() - 1);
Settings.System.putString(context.getContentResolver(), "qch_tfmedia_filetypes", stringBuffer.toString());//影音管控
Logutils.e("SystemSetting", "qch_tfmedia_filetypes---------" + stringBuffer.toString());
Logutils.e(TAG, "qch_tfmedia_filetypes---------" + stringBuffer.toString());
} else {
Settings.System.putInt(context.getContentResolver(), "qch_tfmedia_forbid", 0);
}
} catch (Exception e) {
Logutils.e("SystemSetting", "setTF: " + e.getMessage());
Logutils.e(TAG, "setTF: " + e.getMessage());
}
}
@@ -514,22 +524,22 @@ public class SysSettingUtils {
// int deskclock = 1;
Settings.System.putInt(context.getContentResolver(), "qch_app_deskclock", state);
ApkUtils.hideSystemSettingAPP(context, "com.android.deskclock");
Logutils.e("SystemSetting", "qch_app_deskclock" + state);
Logutils.e(TAG, "qch_app_deskclock" + state);
//录音机
// int soundrecorder = 1;
Settings.System.putInt(context.getContentResolver(), "qch_app_soundrecorder", state);
ApkUtils.hideSystemSettingAPP(context, "com.android.soundrecorder");
Logutils.e("SystemSetting", "qch_app_soundrecorder" + state);
Logutils.e(TAG, "qch_app_soundrecorder" + state);
//音乐
// int music = 1;
Settings.System.putInt(context.getContentResolver(), "qch_app_music", state);
ApkUtils.hideSystemSettingAPP(context, "com.android.music");
Logutils.e("SystemSetting", "qch_app_music" + state);
Logutils.e(TAG, "qch_app_music" + state);
//图库
// int gallery = 1;
Settings.System.putInt(context.getContentResolver(), "qch_app_gallery", state);
ApkUtils.hideSystemSettingAPP(context, "com.android.gallery3d");
Logutils.e("SystemSetting", "qch_app_gallery" + state);
Logutils.e(TAG, "qch_app_gallery" + state);
//文件管理器
// int filemanager = 1;
Settings.System.putInt(context.getContentResolver(), "qch_app_filemanager", state);
@@ -538,7 +548,7 @@ public class SysSettingUtils {
} else {
ApkUtils.hideSystemSettingAPP(context, "com.android.documentsui");
}
Logutils.e("SystemSetting", "qch_app_filemanager" + state);
Logutils.e(TAG, "qch_app_filemanager" + state);
} catch (Exception e) {
Logutils.e(TAG, "setIcon: " + e.getMessage());
}
@@ -552,22 +562,22 @@ public class SysSettingUtils {
int deskclock = changeNum(jsonObject.getInteger("setting_clock"));
Settings.System.putInt(context.getContentResolver(), "qch_app_deskclock", deskclock);
ApkUtils.hideSystemSettingAPP(context, "com.android.deskclock");
Logutils.e("SystemSetting", "qch_app_deskclock" + deskclock);
Logutils.e(TAG, "qch_app_deskclock" + deskclock);
//录音机
int soundrecorder = changeNum(jsonObject.getInteger("setting_recording"));
Settings.System.putInt(context.getContentResolver(), "qch_app_soundrecorder", soundrecorder);
ApkUtils.hideSystemSettingAPP(context, "com.android.soundrecorder");
Logutils.e("SystemSetting", "qch_app_soundrecorder" + soundrecorder);
Logutils.e(TAG, "qch_app_soundrecorder" + soundrecorder);
//音乐
int music = changeNum(jsonObject.getInteger("setting_music"));
Settings.System.putInt(context.getContentResolver(), "qch_app_music", music);
ApkUtils.hideSystemSettingAPP(context, "com.android.music");
Logutils.e("SystemSetting", "qch_app_music" + music);
Logutils.e(TAG, "qch_app_music" + music);
//图库
int gallery = changeNum(jsonObject.getInteger("setting_picture"));
Settings.System.putInt(context.getContentResolver(), "qch_app_gallery", gallery);
ApkUtils.hideSystemSettingAPP(context, "com.android.gallery3d");
Logutils.e("SystemSetting", "qch_app_gallery" + gallery);
Logutils.e(TAG, "qch_app_gallery" + gallery);
//壁纸
int wallpaper = changeNum(jsonObject.getInteger("setting_wallpaper"));
setWallpaper(context, wallpaper);
@@ -579,7 +589,7 @@ public class SysSettingUtils {
} else {
ApkUtils.hideSystemSettingAPP(context, "com.android.documentsui");
}
Logutils.e("SystemSetting", "qch_app_filemanager" + filemanager);
Logutils.e(TAG, "qch_app_filemanager" + filemanager);
} catch (Exception e) {
Logutils.e(TAG, "setIcon: " + e.getMessage());
}
@@ -589,12 +599,12 @@ public class SysSettingUtils {
//壁纸
// int wallpaper = 1;
Settings.System.putInt(context.getContentResolver(), "qch_app_wallpaper", state);
Logutils.e("SystemSetting", "qch_app_wallpaper" + state);
Logutils.e(TAG, "qch_app_wallpaper" + state);
}
private static void setCanReset(Context context, int state) {
boolean qch_restore_forbid_on = Settings.System.putInt(context.getContentResolver(), "qch_restore_forbid_on", 0);
Logutils.e("SystemSetting", "qch_restore_forbid_on:" + qch_restore_forbid_on);
Logutils.e(TAG, "qch_restore_forbid_on:" + qch_restore_forbid_on);
//默认打开
}
@@ -604,10 +614,10 @@ public class SysSettingUtils {
int mode = jsonObject.getInteger("qch_restore");
if (mode == 1) {
boolean qch_restore_forbid_on = Settings.System.putInt(context.getContentResolver(), "qch_restore_forbid_on", 0);
Logutils.e("SystemSetting", "qch_restore_forbid_on:" + qch_restore_forbid_on);
Logutils.e(TAG, "qch_restore_forbid_on:" + qch_restore_forbid_on);
} else {
boolean qch_restore_forbid_on = Settings.System.putInt(context.getContentResolver(), "qch_restore_forbid_on", 1);
Logutils.e("SystemSetting", "qch_restore_forbid_on:" + qch_restore_forbid_on);
Logutils.e(TAG, "qch_restore_forbid_on:" + qch_restore_forbid_on);
}
}
@@ -649,7 +659,7 @@ public class SysSettingUtils {
break;
}
}
Logutils.e("SystemSetting", "setAutoTime: " + "action=" + action);
Logutils.e(TAG, "setAutoTime: " + "action=" + action);
Intent intent = new Intent();
intent.setAction(action);
intent.setPackage("com.android.settings");
@@ -657,7 +667,7 @@ public class SysSettingUtils {
}
private static void setAutoTime(Context context, int state) {
Logutils.e("SystemSetting", "setAutoTime: " + "default");
Logutils.e(TAG, "setAutoTime: " + "default");
Intent intent = new Intent();
intent.setAction("qch_autotime_network");
intent.setPackage("com.android.settings");

View File

@@ -2,7 +2,9 @@ package com.mjsheng.myappstore.utils;
import android.content.Context;
import android.content.Intent;
import androidx.annotation.NonNull;
import android.text.TextUtils;
@@ -65,7 +67,7 @@ public class TimeUtils {
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"))) {
if (null == startTime || null == endTime || ("00:00".equals(startTime) && "00:00".equals(endTime))) {
return null;
} else {
try {
@@ -94,15 +96,15 @@ public class TimeUtils {
public static class ContralTime {
//format HH:mm
static String startTime;
static String endTime;
String startTime;
String endTime;
public ContralTime() {
}
public ContralTime(String startT, String endT) {
startTime = startT;
this.startTime = startT;
endTime = endT;
}
@@ -112,7 +114,7 @@ public class TimeUtils {
public void setStartTime(String startT) {
startTime = startT;
this.startTime = startT;
}
public String getEndTime() {
@@ -120,7 +122,7 @@ public class TimeUtils {
}
public void setEndTime(String endT) {
endTime = endT;
this.endTime = endT;
}
public static DateFormat getDf() {

View File

@@ -15,9 +15,11 @@ import com.mjsheng.myappstore.BuildConfig;
*/
public class ToastUtil {
private static Handler mainHandler = new Handler(Looper.getMainLooper());
private static Toast toast;
@SuppressLint("StaticFieldLeak")
private static Context mContext;
private static Handler mainHandler = new Handler(Looper.getMainLooper());
private static Toast debugToast;
private static Toast toast;
@SuppressLint("ShowToast")
public static void init(Context context) {
@@ -31,25 +33,35 @@ public class ToastUtil {
private static long time2 = 0L;
public static void show(final String msg) {
mainHandler.post(new Runnable() {
@Override
public void run() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
time2 = System.currentTimeMillis();
if ((time2 - time1) > 3500) {
showToast(mContext, msg, Toast.LENGTH_SHORT);
Logutils.e("fht", "LENGTH_LONG");
time1 = time2;
}
} else {
if (toast != null) {
toast.setText(msg);
toast.show();
}
mainHandler.post(() -> {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
time2 = System.currentTimeMillis();
if ((time2 - time1) > 3500) {
showToast(mContext, msg, Toast.LENGTH_SHORT);
time1 = time2;
}
} else {
if (toast != null) {
toast.setText(msg);
toast.show();
}
}
});
}
public static void betaShow(final String msg) {
if (JGYUtils.isBetaVersion() || BuildConfig.DEBUG) {
mainHandler.post(() -> {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
showToast(mContext, msg, Toast.LENGTH_SHORT);
} else {
if (debugToast != null) {
debugToast.setText(msg);
debugToast.show();
}
}
});
}
}
private static Toast mToast = null;
@@ -80,21 +92,6 @@ public class ToastUtil {
// }
// });
// }
static Handler debugHandler = new Handler(Looper.getMainLooper());
static Toast debugToast;
public static void debugShow(final String msg) {
mainHandler.post(new Runnable() {
@Override
public void run() {
if (BuildConfig.DEBUG) {
if (toast != null) {
toast.setText(msg);
toast.show();
}
}
}
});
}
}

View File

@@ -4,14 +4,13 @@ import android.content.Context;
import android.os.Build;
import android.provider.Settings;
import android.text.TextUtils;
import android.util.Log;
import android.webkit.WebSettings;
import java.io.IOException;
import java.net.URI;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@@ -37,17 +36,21 @@ public class URLUtils {
}
public void setBrowserWhiteList() {
String whiteList = Settings.System.getString(mContext.getContentResolver(), "DeselectBrowserArray");
if (TextUtils.isEmpty(whiteList.trim())) {
//会写入两次,第一次是不带前缀的,第二次会把实际的地址写入进去
String oldwhiteList = Settings.System.getString(mContext.getContentResolver(), "DeselectBrowserArray");
if (TextUtils.isEmpty(oldwhiteList)) {
Logutils.e(TAG, "getBrowserWhiteList: " + "oldwhiteList is empty");
Settings.System.putString(mContext.getContentResolver(), "DeselectBrowserArray","Invalid");
} else {
Logutils.e(TAG, "getBrowserWhiteList: " + "oldwhiteList is : " + whiteList);
HashSet<String> URLList = new HashSet<>(Arrays.asList(whiteList.split(",")));
Logutils.e(TAG, "getBrowserWhiteList: " + "oldwhiteList is : " + oldwhiteList);
HashSet<String> URLList = new HashSet<>(Arrays.asList(oldwhiteList.trim().split(",")));
Log.e(TAG, "setBrowserWhiteList: " + URLList);
Observable.create(new ObservableOnSubscribe<String>() {
@Override
public void subscribe(ObservableEmitter<String> emitter) throws Exception {
baseURLList.clear();
for (String url : URLList) {
Log.e(TAG, "subscribe: " + url);
if (TextUtils.isEmpty(url)) {
continue;
}
@@ -63,7 +66,32 @@ public class URLUtils {
// }
// }else {
// }
baseURLList.add("https://" + url);
if (!url.startsWith("http")) {
String httpsUrl = "https://" + url;
String httpUrl = "http://" + url;
emitter.onNext(getOkHttpURL(httpsUrl));
emitter.onNext(getOkHttpURL(httpUrl));
baseURLList.add(httpsUrl);
String pattern = "(http|https)://(www.)?(\\w+(\\.)?)+";
Pattern r = Pattern.compile(pattern);
Matcher m = r.matcher(httpsUrl);
while (m.find()) {
baseURLList.add(m.group());
}
}else {
String pattern = "[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(\\.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+\\.?";
Pattern r = Pattern.compile(pattern);
Matcher m = r.matcher(url);
if (m.find()) {
Log.e(TAG, "matcher: " + m.group());
String httpsUrl = "https://" + m.group();
String httpUrl = "http://" + m.group();
emitter.onNext(getOkHttpURL(httpsUrl));
emitter.onNext(getOkHttpURL(httpUrl));
}
}
// if (url.startsWith("www.")) {//前缀为www的顶级域名
// String nowww = url.substring(4);
// baseURLList.add(nowww);
@@ -113,7 +141,7 @@ public class URLUtils {
@Override
public void onNext(String s) {
Logutils.e(TAG, "onNext: " + s);
// baseURLList.add(s);
baseURLList.add(s);
// if (s.startsWith("http://")) {
// String noHttp = s.substring(7);
// Logutils.e(TAG, "onNext: noHttp: " + noHttp);
@@ -148,20 +176,22 @@ public class URLUtils {
}
});
}
}
private HashSet<String> blackList = new HashSet<>();
public void setBrowserBlackList() {
String qch_webblack_url = Settings.System.getString(mContext.getContentResolver(), "qch_webblack_url");
Logutils.e(TAG, "setBrowserBlackList: " + qch_webblack_url);
if (TextUtils.isEmpty(qch_webblack_url.trim())) {
Logutils.e(TAG, "setBrowserBlackList: qch_webblack_url = " + qch_webblack_url);
if (TextUtils.isEmpty(qch_webblack_url)) {
Settings.System.putString(mContext.getContentResolver(), "qch_webblack_url","Invalid");
return;
}
HashSet<String> URLList = new HashSet<>(Arrays.asList(qch_webblack_url.split(",")));
HashSet<String> URLList = new HashSet<>(Arrays.asList(qch_webblack_url.trim().split(",")));
for (String url : URLList) {
if (TextUtils.isEmpty(url)) {
continue;
}
Logutils.e(TAG, "setBrowserBlackList: url: " + url);
if (qch_webblack_url.startsWith("http://")) {
blackList.add(url);
@@ -224,10 +254,15 @@ public class URLUtils {
}
}
//https://blog.csdn.net/yong472727322/article/details/73321935
//https://blog.csdn.net/liehuo123/article/details/81509486?utm_medium=distribute.pc_relevant.none-task-blog-baidujs_baidulandingword-1&spm=1001.2101.3001.4242
//https://www.cnblogs.com/breakdown/archive/2012/09/17/2689101.html
/**
* Gets ip.
* 通过url获取到域名
*
*https://www.cnblogs.com/shizhijie/p/8277092.html
* @param url the url
* @return the ip
*/

View File

@@ -2,7 +2,6 @@ package com.mjsheng.myappstore.utils;
import android.annotation.SuppressLint;
import android.app.ActivityManager;
import android.app.admin.DevicePolicyManager;
import android.content.ActivityNotFoundException;
import android.content.ComponentName;
import android.content.Context;
@@ -10,7 +9,6 @@ import android.content.ContextWrapper;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.SharedPreferences;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException;
@@ -34,11 +32,13 @@ import android.os.StatFs;
import android.provider.Settings;
import androidx.annotation.RequiresApi;
import androidx.annotation.VisibleForTesting;
import android.telephony.TelephonyManager;
import android.text.TextUtils;
import android.text.format.Formatter;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.view.WindowManager;
@@ -65,6 +65,7 @@ import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileFilter;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
@@ -83,6 +84,7 @@ import java.util.Calendar;
import java.util.Collections;
import java.util.Date;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Locale;
import java.util.Map;
@@ -96,6 +98,8 @@ import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.disposables.Disposable;
import io.reactivex.schedulers.Schedulers;
import static android.content.Context.WIFI_SERVICE;
public class Utils {
private static String TAG = Utils.class.getSimpleName();
@@ -106,7 +110,7 @@ public class Utils {
return getMac();
} else {
try {
WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
WifiManager wifiManager = (WifiManager) context.getSystemService(WIFI_SERVICE);
// 获取MAC地址
WifiInfo wifiInfo = wifiManager.getConnectionInfo();
String mac = wifiInfo.getMacAddress();
@@ -157,6 +161,14 @@ public class Utils {
return macSerial;
}
public static String getAndroid10MAC(Context context) {
if (Build.VERSION.SDK_INT > Build.VERSION_CODES.N_MR1){
return getMacAddress(context);
}else {
return getAndroid7MAC();
}
}
/**
* 兼容7.0获取不到的问题
*
@@ -186,6 +198,64 @@ public class Utils {
return "";
}
@SuppressLint("HardwareIds")
@VisibleForTesting
public static String getMacAddress(Context mContext) {
WifiManager mWifiManager = (WifiManager) mContext.getSystemService(WIFI_SERVICE);
final String[] macAddresses = mWifiManager.getFactoryMacAddresses();
String macAddress = null;
if (macAddresses != null && macAddresses.length > 0) {
macAddress = macAddresses[0];
}
if (TextUtils.isEmpty(macAddress)) {
String mac = getMacFromFile();
// Add for CTCC Feature:WIFI MAC should be gotten while wifi disabled.
// Get Wifi MAC from file since we can not get it with WifiManager.
if (!TextUtils.isEmpty(mac)) {
macAddress = mac;
} else {
macAddress = "未能获取到MAC地址";
}
}
return macAddress;
}
/**
* Add for CTCC Feature:WIFI MAC should be gotten while wifi disabled.
* get Wifi MAC from /mnt/vendor/wifimac.txt
*
* @{
*/
private static String MACID_FILE_PATH = "/mnt/vendor/wifimac.txt";
private static String getMacFromFile() {
File file = new File(MACID_FILE_PATH);
BufferedReader reader = null;
String macAddress = null;
try {
reader = new BufferedReader(new FileReader(file));
String line;
while ((line = reader.readLine()) != null) {
macAddress = line;
break;
}
} catch (FileNotFoundException e) {
Log.w(TAG, "Mac file not exist", e);
} catch (Exception e) {
Log.w(TAG, "get mac from file caught exception", e);
} finally {
try {
if (reader != null)
reader.close();
} catch (IOException e) {
Log.w(TAG, "reader close exception");
}
}
return macAddress;
}
public static String loadFileAsString(String fileName) throws Exception {
FileReader reader = new FileReader(fileName);
String text = loadReaderAsString(reader);
@@ -636,6 +706,40 @@ public class Utils {
return serial;
}
public static String getDeviceSN() {
String serial = null;
try {
Class<?> c = Class.forName("android.os.SystemProperties");
Method get = c.getMethod("get", String.class);
serial = (String) get.invoke(c, "persist.sys.hrSerial");
} catch (Exception e) {
e.printStackTrace();
}
return serial;
}
/**
* @return 获取第三方内置apk
*/
public static HashSet<String> getPackage() {
String packages = "";
try {
Class<?> c = Class.forName("android.os.SystemProperties");
Method get = c.getMethod("get", String.class);
packages = (String) get.invoke(c, "persist.sys.package");
} catch (Exception e) {
e.printStackTrace();
}
HashSet<String> packageSet = new HashSet<>();
if (TextUtils.isEmpty(packages)) {
return packageSet;
} else {
packageSet.addAll(Arrays.asList(packages.split(",")));
return packageSet;
}
}
public static final long A_GB = 1073741824;
public static final long A_MB = 1048576;
public static final int A_KB = 1024;
@@ -845,7 +949,7 @@ public class Utils {
* 更新应用白名单禁止升级
*
* @param context
* @param allowList 禁止
* @param allowList 禁止
* @param disallowList 允许
* @return
*/

View File

@@ -3,7 +3,10 @@
buildscript {
repositories {
google()
jcenter()
mavenCentral()
maven { url "https://jitpack.io" }
maven { url 'http://maven.aliyun.com/nexus/content/repositories/jcenter' }
maven { url "https://oss.sonatype.org/content/repositories/snapshots/" }
}
dependencies {
classpath 'com.android.tools.build:gradle:3.6.4'
@@ -16,11 +19,11 @@ buildscript {
allprojects {
repositories {
//jcenter即将关闭
google()
jcenter()
}
repositories {
maven { url 'https://jitpack.io' }
mavenCentral()
maven { url "https://jitpack.io" }
maven { url 'http://maven.aliyun.com/nexus/content/repositories/jcenter' }
maven { url "https://oss.sonatype.org/content/repositories/snapshots/" }
}
gradle.projectsEvaluated {

30
教管壹更新日志.txt Normal file
View File

@@ -0,0 +1,30 @@
更新:
2021-08-04 17:19:09
设备信息:
1.白名单网址获取重定向后的地址
2.增加获取随机mac地址
3.MAC地址显示为设备MAC
4.发送禁止联网的包名时如果应用未安装会断网
5.修复平板使用时间管控到时间不会解锁的bug
应用市场:
更新:
2021-07-29 18:18:28
v2.2.1
设备信息:
1.删除所有白名单之外的APK,如果能正确获取到白名单数据就删除,如果获取失败或者网络错误则不删除
2.监听网络变化,如果可以联网直接获取数据,不用等待
3.当打开了应用市场的时候,唤醒设备信息直接获取数据
4.减少更新设备系统信息的频率
5.应用内网页管控更新
6.亮屏请求间隔为3个小时
7.桌面图标隐藏显示延迟修复
8.删除管控默认关闭功能
9.浏览器主页自动添加到白名单
10.修复删除系统其他管控,重启之后是上一个的管控
11.没有设置白名单时主页无法访问
12.修复重启偶尔会删除禁止升级的应用
应用市场:
1.优化应用安装后广播逻辑