From 64aae388b8c21695c05b02f6423678510be935ed Mon Sep 17 00:00:00 2001 From: Administrator <981964879@qq.com> Date: Fri, 12 Jun 2020 11:15:52 +0800 Subject: [PATCH] =?UTF-8?q?update:2020.06.12=20fix:=E6=9B=B4=E6=8D=A2?= =?UTF-8?q?=E5=9B=BE=E6=A0=87=20add:=E5=A2=9E=E5=8A=A0=E8=BF=9E=E6=8E=A5?= =?UTF-8?q?=E4=B8=8Awifi=E4=B9=8B=E5=90=8E=E5=90=AF=E5=8A=A8=E7=AE=A1?= =?UTF-8?q?=E6=8E=A7=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/build.gradle | 10 +- app/src/main/AndroidManifest.xml | 2 + .../com/mjsheng/myappstore/MyApplication.java | 43 ++- .../myappstore/activity/MainActivity.java | 166 ++++++++++-- .../myappstore/network/HTTPInterface.java | 11 +- .../myappstore/receiver/BootReceiver.java | 2 + .../myappstore/receiver/MyJPushReceiver.java | 3 + .../myappstore/server/GuardService.java | 128 +++++++-- .../myappstore/server/InitJpushServer.java | 1 + .../mjsheng/myappstore/utils/Configure.java | 2 + .../com/mjsheng/myappstore/utils/Utils.java | 12 +- .../main/res/layout-land/activity_main.xml | 250 +++++++++++++++--- .../main/res/layout-port/activity_main.xml | 242 +++++++++++++++-- app/src/main/res/mipmap-hdpi/ic_launcher.png | Bin 4753 -> 5094 bytes app/src/main/res/mipmap-mdpi/ic_launcher.png | Bin 4753 -> 5094 bytes app/src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 4753 -> 5094 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 4753 -> 5094 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 4753 -> 5094 bytes 18 files changed, 752 insertions(+), 120 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 2c1313a..23a4b0e 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -15,10 +15,10 @@ android { minSdkVersion 20 targetSdkVersion 29 - versionCode 142 - versionName "2.9.9"//测试jiaoguanyi.cn -// versionCode 128 -// versionName "2.0.0.8"// 正式jiaoguanyi.com 双数正式 单数测试 + versionCode 145 + versionName "3.0.2"//测试jiaoguanyi.cn +// versionCode 129 +// versionName "2.0.0.9"// 正式jiaoguanyi.com 双数正式 单数测试 multiDexEnabled true testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" @@ -160,7 +160,7 @@ dependencies { implementation 'com.arialyy.aria:core:3.8.5' annotationProcessor 'com.arialyy.aria:compiler:3.8.5' - implementation 'com.github.tianma8023:NetDetector:v0.2.0' +// implementation 'com.github.tianma8023:NetDetector:v0.2.0' implementation "org.java-websocket:Java-WebSocket:1.4.1" diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 77e31bf..e567d07 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -12,6 +12,8 @@ + + = Build.VERSION_CODES.M) { + + PowerManager powerManager = (PowerManager) getSystemService(POWER_SERVICE); + + boolean hasIgnored = powerManager.isIgnoringBatteryOptimizations(context.getPackageName()); + // 判断当前APP是否有加入电池优化的白名单,如果没有,弹出加入电池优化的白名单的设置对话框。 + if (!hasIgnored) { + Intent intent = new Intent(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS); + intent.setData(Uri.parse("package:" + context.getPackageName())); + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + startActivity(intent); + } + } } private receiver receiver; @@ -181,6 +207,7 @@ public class MyApplication extends MultiDexApplication { //可能会多次触发,1分钟之内不执行 //application中启动服务,startcommand执行会两次 startService(new Intent(context, InitJpushServer.class)); + startService(new Intent(context, StepService.class)); startService(new Intent(context, GuardService.class)); time1 = time2; Log.e("fht", "onReceive"); @@ -192,6 +219,8 @@ public class MyApplication extends MultiDexApplication { } } + + public void onTagOperatorResult(JPushMessage jPushMessage) { if (jPushMessage == null) { return; @@ -570,7 +599,7 @@ public class MyApplication extends MultiDexApplication { result = result + "," + store; } Settings.System.putString(context.getContentResolver(), "qch_app_forbid", result); - Log.e("mjsheng", "qch_app_forbid :"+result); + Log.e("mjsheng", "qch_app_forbid :" + result); } else { Log.e("mjsheng", "writeAppPackageList is null:"); Settings.System.putString(context.getContentResolver(), "qch_app_forbid", appstore + "," + store); @@ -623,12 +652,6 @@ public class MyApplication extends MultiDexApplication { // // } - @Override - public void onTerminate() { - super.onTerminate(); - // 取消BroadcastReceiver注册 - NetStateChangeReceiver.unregisterReceiver(this); - } // static List fileList = new ArrayList<>(); // diff --git a/app/src/main/java/com/mjsheng/myappstore/activity/MainActivity.java b/app/src/main/java/com/mjsheng/myappstore/activity/MainActivity.java index c872e94..3667387 100644 --- a/app/src/main/java/com/mjsheng/myappstore/activity/MainActivity.java +++ b/app/src/main/java/com/mjsheng/myappstore/activity/MainActivity.java @@ -1,5 +1,6 @@ package com.mjsheng.myappstore.activity; +import android.app.Activity; import android.content.BroadcastReceiver; import android.content.Context; import android.content.ContextWrapper; @@ -11,6 +12,7 @@ import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.content.res.Configuration; import android.graphics.Bitmap; +import android.net.Uri; import android.os.BatteryManager; import android.os.Build; import android.os.Bundle; @@ -18,12 +20,17 @@ import android.os.Environment; import android.os.Handler; import android.os.Message; import android.os.PersistableBundle; +import android.os.PowerManager; +import android.os.SystemClock; import android.provider.Settings; import android.support.v4.content.LocalBroadcastManager; import android.support.v7.app.AppCompatActivity; +import android.text.Layout; import android.text.TextUtils; import android.util.Log; +import android.view.View; import android.widget.ImageView; +import android.widget.RelativeLayout; import android.widget.TextView; import com.alibaba.fastjson.JSON; @@ -54,6 +61,7 @@ import com.mjsheng.myappstore.bean.JsonCallback; import com.mjsheng.myappstore.bean.LzyResponse; import com.mjsheng.myappstore.bean.NetAndLaunchBean; import com.mjsheng.myappstore.bean.NetAndLaunchData; +import com.mjsheng.myappstore.bean.StudentsInfo; import com.mjsheng.myappstore.bean.UploadAppInfo; import com.mjsheng.myappstore.bean.UserInfo; import com.mjsheng.myappstore.comm.CommonDatas; @@ -83,8 +91,6 @@ import com.mjsheng.myappstore.utils.update.NotificationDownloadCreator; import com.mjsheng.myappstore.utils.update.OkhttpCheckWorker; import com.mjsheng.myappstore.utils.update.ToastCallback; import com.mjsheng.myappstore.utils.update.ToastTool; -import com.tianma.netdetector.lib.NetStateChangeObserver; -import com.tianma.netdetector.lib.NetworkType; import org.json.JSONObject; import org.lzh.framework.updatepluginlib.UpdateBuilder; @@ -122,7 +128,7 @@ import static com.mjsheng.myappstore.jpush.TagAliasOperatorHelper.ACTION_SET; import static com.mjsheng.myappstore.jpush.TagAliasOperatorHelper.TagAliasBean; import static com.mjsheng.myappstore.jpush.TagAliasOperatorHelper.sequence; -public class MainActivity extends AppCompatActivity implements NetStateChangeObserver { +public class MainActivity extends AppCompatActivity { private ToastCallback callback; private long mPreClickTime; @@ -132,8 +138,10 @@ public class MainActivity extends AppCompatActivity implements NetStateChangeObs private DownloadManager downloadManager; private ImageView imageView; private TextView tv_devsn, tv_devmac, tv_version; + private TextView tv_class, tv_number, tv_name; private int DeviceInfo; - + private RelativeLayout checkupdate; + private ImageView back; //jiguang public static boolean isForeground = false; //for receive customer msg from jpush server @@ -287,6 +295,7 @@ public class MainActivity extends AppCompatActivity implements NetStateChangeObs // setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); // } requestPermission(); + acquireWakeLock(); registerMessageReceiver(); // used for receive msg // HTTPInterface.checkDevicesInfo(handler); startService(new Intent(MainActivity.this, MyDownloadService.class)); @@ -353,15 +362,49 @@ public class MainActivity extends AppCompatActivity implements NetStateChangeObs } private void initView() { + checkupdate = findViewById(R.id.checkupdate); + checkupdate.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + continuousClick(COUNTS, DURATION); + } + }); imageView = findViewById(R.id.imageView); tv_devsn = findViewById(R.id.tv_devsn); - tv_devsn.setText("设备SN\t\t" + Utils.getSerial()); + tv_devsn.setText(Utils.getSerial()); tv_devmac = findViewById(R.id.tv_devmac); - tv_devmac.setText("MAC地址\t\t" + com.blankj.utilcode.util.DeviceUtils.getMacAddress()); + tv_devmac.setText(com.blankj.utilcode.util.DeviceUtils.getMacAddress()); tv_version = findViewById(R.id.version); - tv_version.setText("版本:" + BuildConfig.VERSION_NAME); + tv_version.setText(BuildConfig.VERSION_NAME); + tv_class = findViewById(R.id.tv_class); + tv_number = findViewById(R.id.tv_number); + tv_name = findViewById(R.id.tv_name); + back = findViewById(R.id.back); + back.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + lazyExit(); + } + }); } + final static int COUNTS = 5;// 点击次数 + final static long DURATION = 1000;// 规定有效时间 + long[] mHits = new long[COUNTS]; + + private void continuousClick(int count, long time) { + //每次点击时,数组向前移动一位 + System.arraycopy(mHits, 1, mHits, 0, mHits.length - 1); + //为数组最后一位赋值 + mHits[mHits.length - 1] = SystemClock.uptimeMillis(); + if (mHits[0] >= (SystemClock.uptimeMillis() - DURATION)) { + mHits = new long[COUNTS];//重新初始化数组 + ToastUtil.show("正在检查更新"); + HTTPInterface.checkUpdate(mHandler, BuildConfig.APPLICATION_ID); + } + } + + private void initData() { Log.e("mjhsneg", "gagagag--------------------------" + Utils.getSerial()); getLockedState(); @@ -389,8 +432,8 @@ public class MainActivity extends AppCompatActivity implements NetStateChangeObs } private void setImageAndText(ImageView imageView, String text) { - Bitmap bitmap = Utils.createQRImage(Utils.getSn(), 250, 250); - imageView.setImageBitmap(bitmap); +// Bitmap bitmap = Utils.createQRImage(Utils.getSn(), 250, 250); +// imageView.setImageBitmap(bitmap); } @@ -465,6 +508,37 @@ public class MainActivity extends AppCompatActivity implements NetStateChangeObs } + private PowerManager.WakeLock wakeLock = null; + private static final String mWakeLockName = "BackupService"; + + /** + * 获取电源锁,保持该服务在屏幕熄灭时仍然获取CPU时,保持运行 + */ + private synchronized void acquireWakeLock() { + if (null == wakeLock) { + PowerManager pm = (PowerManager) this.getSystemService(Context.POWER_SERVICE); + wakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK + | PowerManager.ON_AFTER_RELEASE, mWakeLockName); + if (null != wakeLock) { + Log.e("fht", "acquireWakeLock!"); + wakeLock.acquire(); + } + } + } + + + /** + * 释放设备电源锁 + */ + private synchronized void releaseWakeLock() { + if (null != wakeLock) { + Log.e("fht", "releaseWakeLock!"); + wakeLock.release(); + wakeLock = null; + } + } + + private boolean locked = false; public void getLockedState() { @@ -562,6 +636,33 @@ public class MainActivity extends AppCompatActivity implements NetStateChangeObs break; case -200: Log.e("fht", "no update"); + break; + case 2: + StudentsInfo info = com.alibaba.fastjson.JSONObject.parseObject(String.valueOf(msg.obj), StudentsInfo.class); + if (null != info) { + if (info.getBatch().equals("")) { + tv_class.setText("暂无信息"); + } else { + tv_class.setText(info.getBatch()); + } + if (info.getSno().equals("")) { + tv_number.setText("暂无信息"); + } else { + tv_number.setText(info.getSno()); + } + if (info.getRealname().equals("")) { + tv_name.setText("暂无信息"); + } else { + tv_name.setText(info.getRealname()); + } + } + break; + case -2: + tv_class.setText("暂无信息"); + tv_number.setText("暂无信息"); + tv_name.setText("暂无信息"); + break; + } } @@ -589,7 +690,8 @@ public class MainActivity extends AppCompatActivity implements NetStateChangeObs .setExtendField(object.toJSONString()) .create(); //启动下载} } else { - Log.e("fht", "无需更新"); +// ToastUtil.show("已是最新版本"); + Log.e("fht", "已是最新版本"); } } @@ -628,7 +730,37 @@ public class MainActivity extends AppCompatActivity implements NetStateChangeObs loadHeadImg(Configure.HTTP_TAG_HOME_PAGE_URL); getLockedState(); // MyApplication.getInstance().getWhitePackageList(); + getInfo(mHandler); + } + private void getInfo(final Handler handler) { + OkGo.post(Configure.GET_STUDENTS_INFO) + .params("sn", Utils.getSerial()) + .execute(new StringCallback() { + @Override + public void onSuccess(String s, Call call, Response response) { + try { + LzyResponse lzyResponse = (LzyResponse) JSON.parseObject(s, LzyResponse.class); + Message message = new Message(); + if (lzyResponse.code == 200) { + message.what = 2; + message.obj = lzyResponse.data; + handler.sendMessage(message); + } else { + handler.sendEmptyMessage(-2); + } + } catch (Exception e) { + Log.e("fht", "getInfo:" + e.getMessage()); + } + } + + @Override + public void onError(Call call, Response response, Exception e) { + super.onError(call, response, e); + Log.e("onError", "error"); + } + + });// 请求方式和请求url } private void loadHeadImg(String URL) { @@ -1579,18 +1711,4 @@ public class MainActivity extends AppCompatActivity implements NetStateChangeObs } return num; } - - - @Override - public void onNetDisconnected() { - - } - - @Override - public void onNetConnected(NetworkType networkType) { - initJpush(); - Aria.download(this).resumeAllTask(); - } - - } diff --git a/app/src/main/java/com/mjsheng/myappstore/network/HTTPInterface.java b/app/src/main/java/com/mjsheng/myappstore/network/HTTPInterface.java index 95df396..62810d3 100644 --- a/app/src/main/java/com/mjsheng/myappstore/network/HTTPInterface.java +++ b/app/src/main/java/com/mjsheng/myappstore/network/HTTPInterface.java @@ -19,6 +19,7 @@ import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONException; import com.alibaba.fastjson.JSONObject; import com.blankj.utilcode.util.LogUtils; +import com.blankj.utilcode.util.ToastUtils; import com.lzy.okgo.OkGo; import com.lzy.okgo.callback.StringCallback; import com.mjsheng.myappstore.MyApplication; @@ -562,6 +563,7 @@ public class HTTPInterface { int code = jsonObject.getInteger("code"); String msg = jsonObject.getString("msg"); String data = jsonObject.getString("data"); + Log.e("setHideDesktopIcon", data); ApkUtils.showAllAPP(context); if (code == 200) { if (data != null && !"".equals(data)) { @@ -584,7 +586,7 @@ public class HTTPInterface { }); } - synchronized public static void getNetAndLaunchSetting(final Context context) { + synchronized public static void getNetAndLaunchSetting(final Context context) { OkGo.post(Configure.NET_AND_LAUNCH_API) .params("key", Configure.HTTP_KEY) .params("sn", Utils.getSerial()) @@ -593,7 +595,12 @@ public class HTTPInterface { public void onSuccess(String s, Call call, Response response) { NetAndLaunchBean netAndLaunchBeanList = JSON.parseObject(s, NetAndLaunchBean.class); LogUtils.e(s); - setNetAndlaunch(netAndLaunchBeanList, context); + switch (netAndLaunchBeanList.getCode()) { + case 200: + setNetAndlaunch(netAndLaunchBeanList, context); + break; + default: + } } @Override diff --git a/app/src/main/java/com/mjsheng/myappstore/receiver/BootReceiver.java b/app/src/main/java/com/mjsheng/myappstore/receiver/BootReceiver.java index 67b9d82..e45ef4c 100644 --- a/app/src/main/java/com/mjsheng/myappstore/receiver/BootReceiver.java +++ b/app/src/main/java/com/mjsheng/myappstore/receiver/BootReceiver.java @@ -35,6 +35,8 @@ public class BootReceiver extends BroadcastReceiver { startService(context); } + + } private void startService(Context context) { diff --git a/app/src/main/java/com/mjsheng/myappstore/receiver/MyJPushReceiver.java b/app/src/main/java/com/mjsheng/myappstore/receiver/MyJPushReceiver.java index 0eb2896..2954f3a 100644 --- a/app/src/main/java/com/mjsheng/myappstore/receiver/MyJPushReceiver.java +++ b/app/src/main/java/com/mjsheng/myappstore/receiver/MyJPushReceiver.java @@ -444,13 +444,16 @@ public class MyJPushReceiver extends BroadcastReceiver { .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Observer() { + @Override public void onComplete() { } + @Override public void onError(Throwable param1Throwable) { Log.e("mjsheng", "DeselectIDApi=onError:"); } + @Override public void onNext(ResponseBody param1ResponseBody) { try { String str1; diff --git a/app/src/main/java/com/mjsheng/myappstore/server/GuardService.java b/app/src/main/java/com/mjsheng/myappstore/server/GuardService.java index e31f47d..6c7a71b 100644 --- a/app/src/main/java/com/mjsheng/myappstore/server/GuardService.java +++ b/app/src/main/java/com/mjsheng/myappstore/server/GuardService.java @@ -8,12 +8,18 @@ package com.mjsheng.myappstore.server; */ import android.app.Service; +import android.content.BroadcastReceiver; import android.content.ComponentName; 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.IBinder; -import android.provider.Settings; import android.support.annotation.Nullable; import android.text.format.Formatter; import android.util.Log; @@ -25,16 +31,12 @@ import com.arialyy.aria.core.Aria; import com.arialyy.aria.core.download.DownloadEntity; import com.arialyy.aria.core.task.DownloadTask; import com.blankj.utilcode.util.LogUtils; -import com.blankj.utilcode.util.ToastUtils; import com.mjsheng.myappstore.KeepAliveConnection; import com.mjsheng.myappstore.MyApplication; import com.mjsheng.myappstore.utils.ApkUtils; import com.mjsheng.myappstore.utils.ServiceAliveUtils; import com.mjsheng.myappstore.utils.ToastUtil; -import com.tianma.netdetector.lib.NetStateChangeObserver; -import com.tianma.netdetector.lib.NetworkType; -import java.io.File; import java.util.List; @@ -44,7 +46,7 @@ import java.util.List; * @author LiGuangMin * @time Created by 2018/8/17 11:27 */ -public class GuardService extends Service implements NetStateChangeObserver { +public class GuardService extends Service { private final static String TAG = GuardService.class.getSimpleName(); private ServiceConnection mServiceConnection = new ServiceConnection() { @Override @@ -69,8 +71,10 @@ public class GuardService extends Service implements NetStateChangeObserver { @Nullable @Override public IBinder onBind(Intent intent) { + registerNetworkReceiver(); return new KeepAliveConnection.Stub() { }; + } @Override @@ -80,16 +84,115 @@ public class GuardService extends Service implements NetStateChangeObserver { Aria.init(this); Aria.get(this).getDownloadConfig().setMaxTaskNum(1); - Aria.download(this).register(); - // startForeground(1, new Notification()); // 绑定建立链接 bindService(new Intent(this, StepService.class), mServiceConnection, Context.BIND_IMPORTANT); return START_STICKY; } + @Override + public void onDestroy() { + super.onDestroy(); + if (null != mNetworkChangedRecceiver) { + unregisterReceiver(mNetworkChangedRecceiver); + } + } + + 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); + } + + Long time1 = 0L; + Long time2 = 0L; + + 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()) { + Log.e("fht", "WIFI已连接,移动数据已连接"); + } else if (wifiNetworkInfo.isConnected() && !dataNetworkInfo.isConnected()) { + Log.e("fht", "WIFI已连接,移动数据已断开"); + } else if (!wifiNetworkInfo.isConnected() && dataNetworkInfo.isConnected()) { + Log.e("fht", "WIFI已连接,移动数据已连接"); + } else { + Log.e("fht", "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()); + } + } + Log.e("fht", sb.toString()); + } + if (intent.getAction().equals(WifiManager.RSSI_CHANGED_ACTION)) { + Log.e("fht", "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)) { + Log.e("fht", "wifi断开"); + } else if (info.getState().equals(NetworkInfo.State.CONNECTED)) { + WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE); + WifiInfo wifiInfo = wifiManager.getConnectionInfo(); + //获取当前wifi名称 + Log.e("fht", "连接到网络 " + wifiInfo.getSSID()); + time2 = System.currentTimeMillis(); + if ((time2 - time1) > 60 * 1000) { + //可能会多次触发,1分钟之内不执行 + //application中启动服务,startcommand执行会两次 + startService(new Intent(context, InitJpushServer.class)); + Aria.download(this).resumeAllTask(); + time1 = time2; + Log.e("fht", "onReceive"); + } + } + } + //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) { + Log.e("fht", "系统关闭wifi"); + } else if (wifistate == WifiManager.WIFI_STATE_ENABLED) { + Log.e("fht", "系统开启wifi"); + } + } + } + } //在这里处理任务执行中的状态,如进度进度条的刷新 @Download.onTaskRunning @@ -147,15 +250,6 @@ public class GuardService extends Service implements NetStateChangeObserver { } - @Override - public void onNetDisconnected() { - } - - @Override - public void onNetConnected(NetworkType networkType) { - Aria.download(this).resumeAllTask(); - - } } diff --git a/app/src/main/java/com/mjsheng/myappstore/server/InitJpushServer.java b/app/src/main/java/com/mjsheng/myappstore/server/InitJpushServer.java index 0d0d286..fe7d747 100644 --- a/app/src/main/java/com/mjsheng/myappstore/server/InitJpushServer.java +++ b/app/src/main/java/com/mjsheng/myappstore/server/InitJpushServer.java @@ -573,6 +573,7 @@ public class InitJpushServer extends Service { } Utils.writeDisableUpdateList(this, upgrade_not.split(","), upgrade_ok.split(",")); + LogUtils.e("UpdateList:upgrade_not:" + upgrade_not + "-----------upgrade_ok:" + upgrade_ok); LogUtils.e("launch:" + launch + "-----------net_ok:" + net_ok + "-----------net_not:" + net_not); boolean qch_app_power_on = Settings.System.putString(getApplicationContext().getContentResolver(), "qch_app_power_on", launch); diff --git a/app/src/main/java/com/mjsheng/myappstore/utils/Configure.java b/app/src/main/java/com/mjsheng/myappstore/utils/Configure.java index 52984a3..49b2353 100644 --- a/app/src/main/java/com/mjsheng/myappstore/utils/Configure.java +++ b/app/src/main/java/com/mjsheng/myappstore/utils/Configure.java @@ -204,4 +204,6 @@ public class Configure { //获取隐藏桌面图标 public final static String NET_AND_LAUNCH_API = HTTP_TAG_HEAD_NEW + "automatic/get"; //获取应用升级自启 + public static final String GET_STUDENTS_INFO = HTTP_TAG_HEAD_NEW + "Sn/getStudent"; + } diff --git a/app/src/main/java/com/mjsheng/myappstore/utils/Utils.java b/app/src/main/java/com/mjsheng/myappstore/utils/Utils.java index 1e5d7f9..533f887 100644 --- a/app/src/main/java/com/mjsheng/myappstore/utils/Utils.java +++ b/app/src/main/java/com/mjsheng/myappstore/utils/Utils.java @@ -919,8 +919,14 @@ public class Utils { static synchronized public boolean writeDisableUpdateList(Context context, String[] banList, String[] notList) { String now = Settings.System.getString(context.getContentResolver(), "qch_app_forbid"); - String[] nowList = now.split(","); - List allList = new ArrayList<>(Arrays.asList(nowList));//已经写入的列表 + String[] nowList; + List allList; + if (now == null || now.equalsIgnoreCase("")) { + allList = new ArrayList<>(); + } else { + nowList = now.split(","); + allList = new ArrayList<>(Arrays.asList(nowList));//已经写入的列表 + } boolean writeSucceed = false; if (banList != null && banList.length > 0) { for (String s : banList) { @@ -944,7 +950,7 @@ public class Utils { list = list.substring(0, list.length() - 1); Log.e("fht", list); writeSucceed = Settings.System.putString(context.getContentResolver(), "qch_app_forbid", list); - Log.e("fht","qch_app_forbid:"+list); + Log.e("fht", "qch_app_forbid:" + list); } else { writeSucceed = Settings.System.putString(context.getContentResolver(), "qch_app_forbid", "Invalid"); } diff --git a/app/src/main/res/layout-land/activity_main.xml b/app/src/main/res/layout-land/activity_main.xml index c4eb313..7941f91 100644 --- a/app/src/main/res/layout-land/activity_main.xml +++ b/app/src/main/res/layout-land/activity_main.xml @@ -7,51 +7,77 @@ android:background="#ffffff" tools:context=".activity.MainActivity"> + + + + + + + app:layout_constraintTop_toBottomOf="@+id/bannerLayout" + app:layout_constraintVertical_bias="0.05"> - - + android:layout_height="@dimen/dp_20" + > + @@ -67,12 +106,11 @@ + android:layout_height="@dimen/dp_20" + > + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + app:layout_constraintHorizontal_bias="0.5" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toBottomOf="@+id/linearLayout" /> \ No newline at end of file diff --git a/app/src/main/res/layout-port/activity_main.xml b/app/src/main/res/layout-port/activity_main.xml index 05744ec..7f275ea 100644 --- a/app/src/main/res/layout-port/activity_main.xml +++ b/app/src/main/res/layout-port/activity_main.xml @@ -8,26 +8,63 @@ tools:context=".activity.MainActivity"> + + + + + + + + app:layout_constraintVertical_bias="0.15"> - - + android:layout_height="@dimen/dp_30"> + + @@ -71,8 +111,7 @@ android:layout_marginTop="@dimen/dp_10"> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -89,15 +279,15 @@ + \ No newline at end of file diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher.png b/app/src/main/res/mipmap-hdpi/ic_launcher.png index 4e2f0aed0ac4be6029206401f3e0991e623584e3..2e4185a03dfd61b3ab4d957d7626a366ef6bedd2 100644 GIT binary patch delta 4462 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 T+S`9#C^+gWI*>}RP2_(7c#Cu% delta 4118 zcmZ{ncRbaP{>P7Vj=hfTBOJ=eJZ8u^IOiB;bCONQaUvzkh>vlsvW}9KEt{-RL`Io$ zWQCA#vN?n!k$!!Dk9+^Tf4tZ0@qGRLe!NyBNMa%h=B5U$OmHR;2*he+h_?JYQ~xan zy1#uD`%i1V$VIRNMi--^ppL{`#v*kU6fnAaD#*+Fx@dJ(Jyj(oeLbuwBFOiSiHQc< z?`EK{$L#Coaa*>3-Csl}Dqx5Yuu)J6j4@#>YF`k2al054J|O z6t>vH+WjW07G~D7)`L4of%e6d+?re)&gip=(l*ZGJtVI$eAc>Y0Dobuk}MTD$@{2S zrAQDvm(t>09$Pe~Nq8fBmQ1wjx!RfV1vIaU_9=4xs7f5_=hR51B4_m(J|zHFU|3Y~(vn8g2|4y| zR*+>NzNJVj0g;eKL)^XA+hft}N|GgLFE zr45hGbsbOO#O}!I)zr9DjR8nR(<1$?yvH9pz0Go!B$${P96>vJ5AW>NNoOoD#uGqK zT8JjxV(sBHv;eYRTCi~CqW>^$!>JxF7!SbD!iF!cg@Ju@CQfF;#x}i%qJUx;4I)fM zs(c-A8$)f&5b@3}HkpMWo+qK85*5ZPF?xfRB)@PzvsV<*IAMz)K2y&WZxy;Y4dMFLeHo$gZR(vzS-pBE zNNrmb8Pg`>uY&qjz-UfQ4+YQlCVXsXP24p%Y*Rb;8eXv5DqZ~yhvHWMUG@1N2No>c zftgg5vlsI5yiW_Sr)K?8Fn<0OTaNst6wi+w<(Y4|+&JZi7Cj8O*)2K(Nhwe~ z9JdaKOx*i(f9xM)q0`Iffjt5Y+dXa}UQY?;yZ>GqCYTGzmhn_PCG{ay$e+LgP{Vs1 z=-S%uCfg-30(QJCFD?$f7};^P%lYS5qlV&SJ9qE#Fq^C@nsbf^cL^bUr$x1$k4qow z?&8lOYP)|G!`?X-zLf{C>M4MA+R7BpZeR+4O6UYnfTbZToQ0hqKP18JhaX`B7xRd!HGI&x)Gp1EQ$Y z&lFJMRx`&b{l$9&iy+I7{(9G&zdk9jNsb|xGb1!M%Tj}m{g2ym>U3T8w;2V5TFkp| zs%}H}cX=M>eerq_mh;0eTbD1(9|Bpv&VP~@*?gVn1}4v|JLK?aPnaa7o@8xSW@GN% zi0zsb{V=sE2O0zXk(ABi@iRv5ec_Ck8TvA*f&|xyhX`G1UGG?D-u*YS<{Sfm1yEgSF5BsSMJlw0A0a$gJx5cM^K3{P z-j*fE#+U_Bw|8p*;>bw5rCuG}vgWj9sPM)6)oC@znTGDwBG)l*#m;=r)pua@P5bPM zn{tV=^5ar>eI#{_8>^7rSbAM$Vl~vFM-nq;R9q%76qV6+lI?ZwUdh)KMV544SMzYwarg%U3LlJ2gS~lB%7ihA1L=zH~Yo40_ogd zdFYh#mc~p@Q6>a@;p$)eU0IS*3%p`2&?qfsklg4IU!w_*wm==A%CsfJ#_&E$xHahjRgG&0^I-sA>&;E!)?z(atpARrDs zqfH>um}?);rD~q?@Eua5`;{3*Q(}%$-!pC#$>qWGdDE@OJotq(0jMv`+OdHL?(~); zjiN=`mXlf@u4FV18~8?cH~}eloN+R%JqjYA^Dd47D%cKm2U2J~_Gba6+1Z zuvQp`r%rB{KhY8n03OiM-qB7iwR5%0IN5@^WM?s_K;`*IOY|C~3w}d!&U?e{!Y24kKNPtAwa-*ts4v3h~w#q zYMaQM*^?{6hE};TQqZglQWjc=Qcs5lDAN5*}CkQWip!hgR@caU}GRl(xW)_ z_UT255OPGdRfrD*u(km}^E6|JAm2t&G*4#_q3F_ZUMcy9<#$*!e27$bA?fq)kZ{Iy z!yyOBaL}hpGedJ514b3`DV9|B$&O(4rc>!F!u@uQ9v|ubo73LRK0fY^#rR*gwKtf$ zHoRiVoGqT& z-&*6AR=b}CAJCi|_>on0HqP2(Hax8s2Yed7Ufo zo`FOGDjMnK$E2Zhu3aB0sTDCEhYIk6apEEbjc&&lCihSQ0s|naX%`q zUJa3LdgU~?Q^sFV1VnzMN9<8Yjelho4l23yx8%jH#jC>}u@Mb@Ku?phArQGU$Qt*B zzn;AZI9E$&3L&EDXYr2dzBi)@u)JksuDv<+sr%MNM4(UGX-v#5&#_!v<6p-n_LQif z&29d`wiF!OLtf{x`I0D)R@10C{5ZFqTmkW{m6>0Sy$KTx+_`i-ve&Y+4ow*sz741B zqs^4X>SX=Cut+%Fkb5w+TeWr@)#vO0Hu1Y(+ngK9f0rAFR(WQ5q#pAbV2C$)W4WLp zq3A=0Co!4nUr1Cn6q*&6t*68cn+oUJMTIo~^0$KifT9|V%wYUHXuY2VjT_Un%Xmg? zcdh;R?2@5`&@K{nyK#U-eKdyX8o$e{k|DXnAMyN1Tr6(mO{a)I&R(vA@=)njH(O!u zideim)R;M#IWoZW=GA;4qIiato^;&R8dT~bNP~u$HojeUValP_x;4=^!sh*+e&t@b z+gV|iTg-ITp*bkz1zvn2e#h&GO^(c?G?ASr`e1z7bdMH==l)>R6GC*&7CnwMTRPgQ zMCCu*<2Z?$yt<9O&-QuVQeZ~7+G#^9>!6B$^WT;5mJ^W;K-=TOx;F}`lAbaVb#leH zT>_Q4D$cGZb0BL(7o<|>XFFfs#qXmC60uMgr@~I+CX(zYd~2+^?xn3@6Q-WV5nR%+xk-l4c*%&lEoroUpLB$Z z##8@U!U9x*tLxbJ&;tepEytnqLSF}Sdw7j)gcFUsgb5z-6sE&jQ(FQ9^)f&e8h-q{ zF1KJ9j}95`JRmM6a4X4Jg6U7fw) z3$I(>>2=f8OjeB#+m==-l%+_y%4vYVd*_Y;Qfxau2Px$;UWYt+MIcMq*u&Idsjk|a ze?oDAl`N~=8>{R4QZi=gxTLt8vGDl6>8+QuXs_CUEM)yHAG29P;~!z25Xb#!&D#N6 z%T+_;0GT4zY2Wy?-~|edNboPA6ohg5ie}7R;(j3@Kt78nPf!nYj+jw`E=7XUt3{~X z1ndKBRw6cs^;7aZw?l`7?CghT{_3nK_qHy((nIZ89C5`32>FKDE5YZ9g;NXy`zknG0vlIV20Q`Tl@~e_U z4Ga4NOA%EWVG&h`sFIQ@SVTlc2`nuGQIb*?7LyQx2umxAu`&m`d1`CRLOksJ+#K9} z)gkh%|1^U3&i1nZbH)D6O-DZvX8s=}{IAgQ1N#3%BL4~r;DO<}qBVIqIHWJtAxcJp zb9>OB6v{r@`{1R$`5P;$hvv!L4+_X-jBQ$;Bx&%{Y5yn~LL2{0C9*I{GZ?HDha|~} zf3wUK&5A>q^kFbSGDLaG#Z`VTsh z$nC$Ce>+iCZE^4dZefkVKMDl6`na|%wvTP8Y$dT;5V8WT8#=^Zu^K%%*4{k@U}-!`;H0A$r4jvK#mcMU3QA_W+qbJ zH1v1Dt%T>FeR>JAKPaB{K%m|CNigi)r}bR9krOQ+yt|$_He`uX6I#6@9;5v;^YPP? zKcyofHi#yOfStR}3D-6O`fE=AJ?&f|mz?Itcwg-2ti#acKx3LRzq3Wm!|sVhuIsYv zek;li{ZtYM$~)qYAr5!Sx1G}M=10Qi+yuwsyxMStAp#9QBIxd_V7Ev+sWwCe0aSMc z9y)L>##%XMLJ=*b$D!SI6`Z*O@{t-8HHE^U@De++hn~3DYa^mM;u@VJjTF^@olVCx zqEohRHYGw|M%xZ_Pd?{QjF2gik+9aAHI8w^k*p0Mn(wfswUKN{4cZ- zu^e7w8D__v+hG$01uo4cfv(7<&LtB=gn4rO-SeLY)TY^lH#!w@}E)zeuw6RnNM5r-G1~l!`m+fu!=cY&anKTf~_7`v_)eF-fLDh}EE@|Km(t+ZHet(_;{+}!ZhNkm#UC}f1 z@012T6~ALziVTb5u%RP-72$`*Bl^E9_0z%=ptQpk&So)0y30ZK_Lf zBTe;EkL2oVP|Yrf2Pmr9v-J?IXpN+3x>14jVeKOeB5H4F^4#I6%Vc)a zzKuI~G|BtHWrs3-lX#;yJaXSv2!5R=g~rZpJ5DHeI=$jauqPwuXk5ge=dmN0 zD;`%WgE{C><_lFzDij?vf_rbl3`D;S(Gwe#Jj3Y(BBS_uerNRB%W>g9;EG>nWpQ@n z-_GQ4RuW=5Kz@oL05E?`y>plIa!%N@l!N61SOAu=R0;f2VK|YLe|l;ql8H4rjPEq1 zjCQO#rfF*9kB_2wu|eW$bB~evTdlH3$djyw(g8UO+0Y_u`Z&>svy&H)wKf zQM}zZNkVSSU-#}h2>P<#l-}BZZLKn%G^0BC1bLvHxY65JL=oyH)^U$bwLq!;^_n88lpy>G7U< zOz=GVv3x{o$c*Vmsp8Y4qRKk;4p82$SIaEqpOeG}thE~yQSgO%+&}bRq8e9mt!eM| z1Aq%bmr$Dcei9OJ9`d~d->;LitroS-GeMd2=3KUEX#E68rn3!l%)=Kx%Cpb!Q2! zII5ofLZjJSYH@rzNKqKIy!okKm(a#uB#N_vNujEmDtLo*HJ6%2>y?545d8`{YS;v+ z`H_}EOxa8t{KC1R`XrGe_&E_<^g*)(tu$sH&X-S=|Jw&R2(yC8z)gk;_jlc+?&RIN z<%U>292t9?9nJ*|H@-e<-S$+nJJUA>F8DifQJ_OoGlmk};v5=EFO`Yo$0Ii_aQK+^ zlQ!d7GkWG=+|Mt$A8fL@+@BstdAjS%yi3DIUIa9GjamP4dRD1NGydC7Z*wAWxRmb% zE}{40reO-a)vfv#UG;@Chwj>&-&aUC?UzLhX|OC{QB%=@(V)SXVWfpDI6R_7OWH7{ z%n4-zVoTyDfnkU(tS6*Lfrs@{FWqfQrh7Atl^Ly;b$4NNANY4+W2K7`x!`HjKDdmJX^2vhgFf*U)N$BMw z_06g^*E@X2?Nd$O)q|=b#XBFUn%Kgz7qo;?D3x6e{L0|^m8C_X4vcmoWcq=1rV8Z? zFOCKH1=x?vvoLEd?U+9<`GDqN@FZ!CYHP-hQq?>BDvb$Ln_)(@I5=1Qno|c38q#p2 z%<3sfX&4Vr+ifZQ6MId{Eo_u^20%dSb1$!WB-gT5R zC1J2^(#(#uuIzf)q_-m8F;sJOB6AIbR-}sRfV#P~?ZxHgi5lnhw-B}Vhnc#@@+hZ8 zZ+XkjOw5%Hc-|xieTFZMpK-{&v9})g1L~U}ASL|eE?<7(vYFsIzd*rz#y-5si81>5 zB2cs%s#&4f^*yW-*6|t~C#O)(6Z`$`9p5NY9I_cS>(0+GWb<8cYduV^sjZ*VYqAU7 ztWYk3a-Gb3EJgng&y?P9Z&78#cq_W^@~5cb>d^RNed;4FXumLqE6-*dHv=c5S1N)c zE5GC|EAFO4L7EXK`3!L*?E&>uNB@SW-2h3GqZ2< z_>MT;NM^PF$)<&7LU7BYo1~k?A&_yTuo$Y_&~JS|WtS>BS@!Cb7k##J#$c!*f3Z8YFrXBU!me1`v&C-1AqOKvUvC zG$}}dlQ_z+Q1~O^;=tQj|8J-7mDcG*j$HD5{kn^z+NNyxY9vz<$y=$Dz3Ytp7wl<> z_%zs+XAT)5jg@*( zbx)I_=IgfM>0hY+P9!}#kyt%y5~pKh)5_1ZOX~h@sn}HI;jWA6AP)!ipHIDd4(^N< znKH-kkMN##C;DVY~3i4mSIz?m7NS{qGlYM##y zk|FY&yM~via}B7IV6u1&{n|&@1FEx2Z&*p!Z?F18Rwti#Z61GQ)uq#6g@HzEL+HJn2cx2;aE>72A^9Lut}zh7UNm|02aXHN%nSu`xqE)xhzF-9pb zB8RU3=nV2me{NnoyHc-0xeB+td#F8Y4=p2%_wiP(d^TqDJzXBTf8=3P1Z6V0i`80FgtsLmv z=EUh&OYJ3)I0@Dw1&@3p7K}rw-Lg&z>{YyxOKheaOGo?;qI-C@;yexA-PQre6i77i z{M2l8)@>u*B@<#fiE22jsP$%QPCp@nTgU|oI^SK&+R|ZFB}NTwOoD$_lPRFwbyMoy*ZnYtv76$D zSl~diz#?sE^6V!VA=Vq?f-xAqm>LX>xDjqE*B8So#_s1zc>oHml^9o>GtUowqr%tA&LU607+w)8Wxr{EH~Um|kmj$@SDc+!i14XH T+S`9#C^+gWI*>}RP2_(7c#Cu% delta 4118 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 T+S`9#C^+gWI*>}RP2_(7c#Cu% delta 4118 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 T+S`9#C^+gWI*>}RP2_(7c#Cu% delta 4118 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 T+S`9#C^+gWI*>}RP2_(7c#Cu% delta 4118 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