From 3f400f763d019a2fcac4515b3d3d2764d15c7af3 Mon Sep 17 00:00:00 2001 From: Administrator <981964879@qq.com> Date: Tue, 7 Jul 2020 11:05:47 +0800 Subject: [PATCH] =?UTF-8?q?version:3.0.7=5Fbeta=20update:2020.07.07=20fix:?= =?UTF-8?q?=E4=BC=9A=E5=8D=B8=E8=BD=BD=E8=87=AA=E5=B8=A6=E7=9A=84=E5=8F=AF?= =?UTF-8?q?=E4=BB=A5=E5=8D=B8=E8=BD=BD=E7=9A=84=E5=BA=94=E7=94=A8=EF=BC=8C?= =?UTF-8?q?=E6=98=BE=E7=A4=BA=E7=B3=BB=E7=BB=9F=E9=9A=90=E8=97=8F=E7=9A=84?= =?UTF-8?q?=E5=BA=94=E7=94=A8=EF=BC=8C=20add:=E6=89=8B=E5=8A=A8=E6=A3=80?= =?UTF-8?q?=E6=9F=A5=E6=9B=B4=E6=96=B0=E6=8C=89=E9=92=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/build.gradle | 8 +- app/src/main/AndroidManifest.xml | 1 + .../com/mjsheng/myappstore/MyApplication.java | 8 +- .../myappstore/activity/MainActivity.java | 272 +++++------ .../myappstore/network/HTTPInterface.java | 14 + .../myappstore/receiver/BootReceiver.java | 2 + .../myappstore/receiver/NewAppReceiver.java | 6 +- .../myappstore/server/InitJpushServer.java | 21 +- .../mjsheng/myappstore/utils/ApkUtils.java | 118 ++--- .../myappstore/utils/AppsManagerUtils.java | 3 +- .../res/drawable/bt_checkupdate_normnl.xml | 13 + .../res/drawable/bt_checkupdate_pressed.xml | 13 + .../res/drawable/bt_checkupdate_selector.xml | 13 + .../main/res/layout-land/activity_main.xml | 448 +++++++++--------- .../main/res/layout-port/activity_main.xml | 259 +++++----- app/src/main/res/values/colors.xml | 2 + 16 files changed, 630 insertions(+), 571 deletions(-) create mode 100644 app/src/main/res/drawable/bt_checkupdate_normnl.xml create mode 100644 app/src/main/res/drawable/bt_checkupdate_pressed.xml create mode 100644 app/src/main/res/drawable/bt_checkupdate_selector.xml diff --git a/app/build.gradle b/app/build.gradle index 7c83740..86cb100 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -15,10 +15,10 @@ android { minSdkVersion 20 targetSdkVersion 29 - versionCode 140 - versionName "3.0.1"//测试jiaoguanyi.cn -// versionCode 1002 -// versionName "2.0.1.2"// 正式jiaoguanyi.com 双数正式 单数测试 + versionCode 102 + versionName "3.0.7"//测试jiaoguanyi.cn +// versionCode 1004 +// versionName "2.0.1.4"// 正式jiaoguanyi.com 双数正式 单数测试 multiDexEnabled true testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index e567d07..97a6b54 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -105,6 +105,7 @@ + diff --git a/app/src/main/java/com/mjsheng/myappstore/MyApplication.java b/app/src/main/java/com/mjsheng/myappstore/MyApplication.java index 124b4e5..4bda96e 100644 --- a/app/src/main/java/com/mjsheng/myappstore/MyApplication.java +++ b/app/src/main/java/com/mjsheng/myappstore/MyApplication.java @@ -329,8 +329,8 @@ public class MyApplication extends MultiDexApplication { } public static void setJpushTags() { - Log.e("jiguangInterface", "30s后重新设置tags"); - Observable.timer(30000, TimeUnit.MILLISECONDS) + Log.e("jiguangInterface", "10s后重新设置tags"); + Observable.timer(10000, TimeUnit.MILLISECONDS) .observeOn(rx.android.schedulers.AndroidSchedulers.mainThread()) .subscribe(new Action1() { @Override @@ -394,8 +394,8 @@ public class MyApplication extends MultiDexApplication { } public static void setJpushAlias() { - Log.e("jiguangInterface", "30s后重新设置alias"); - Observable.timer(30000, TimeUnit.MILLISECONDS) + Log.e("jiguangInterface", "10s后重新设置alias"); + Observable.timer(10000, TimeUnit.MILLISECONDS) .observeOn(rx.android.schedulers.AndroidSchedulers.mainThread()) .subscribe(new Action1() { @Override 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 d2673b6..b1f33ad 100644 --- a/app/src/main/java/com/mjsheng/myappstore/activity/MainActivity.java +++ b/app/src/main/java/com/mjsheng/myappstore/activity/MainActivity.java @@ -1,18 +1,16 @@ package com.mjsheng.myappstore.activity; -import android.app.Activity; +import android.app.AlertDialog; import android.content.BroadcastReceiver; import android.content.Context; import android.content.ContextWrapper; +import android.content.DialogInterface; import android.content.Intent; import android.content.IntentFilter; -import android.content.pm.ActivityInfo; import android.content.pm.ApplicationInfo; 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; @@ -25,13 +23,14 @@ 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.Button; import android.widget.ImageView; import android.widget.RelativeLayout; import android.widget.TextView; +import android.widget.Toast; import com.alibaba.fastjson.JSON; import com.arialyy.aria.core.Aria; @@ -45,19 +44,16 @@ import com.hjq.permissions.OnPermission; import com.hjq.permissions.Permission; import com.hjq.permissions.XXPermissions; import com.lzy.okgo.OkGo; -import com.lzy.okgo.cache.CacheMode; import com.lzy.okgo.callback.StringCallback; import com.lzy.okserver.download.DownloadManager; import com.lzy.okserver.download.DownloadService; import com.mjsheng.myappstore.BuildConfig; import com.mjsheng.myappstore.MyApplication; import com.mjsheng.myappstore.R; -import com.mjsheng.myappstore.bean.AppDateInfo; import com.mjsheng.myappstore.bean.CommonPicBean; import com.mjsheng.myappstore.bean.CommonPicData; import com.mjsheng.myappstore.bean.ForceDownloadBean; import com.mjsheng.myappstore.bean.ForceDownloadData; -import com.mjsheng.myappstore.bean.JsonCallback; import com.mjsheng.myappstore.bean.LzyResponse; import com.mjsheng.myappstore.bean.NetAndLaunchBean; import com.mjsheng.myappstore.bean.NetAndLaunchData; @@ -76,7 +72,6 @@ import com.mjsheng.myappstore.network.api.ForceDownloadApi; import com.mjsheng.myappstore.network.api.NetAndLaunchApi; import com.mjsheng.myappstore.network.api.SystemSettingApi; import com.mjsheng.myappstore.network.api.UploadAppInfoApi; -import com.mjsheng.myappstore.server.InitJpushServer; import com.mjsheng.myappstore.server.MyDownloadService; import com.mjsheng.myappstore.utils.ApkUtils; import com.mjsheng.myappstore.utils.Configure; @@ -90,7 +85,6 @@ import com.mjsheng.myappstore.utils.update.AllDialogShowStrategy; 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 org.json.JSONObject; import org.lzh.framework.updatepluginlib.UpdateBuilder; @@ -98,17 +92,11 @@ import org.lzh.framework.updatepluginlib.UpdateBuilder; import java.io.File; import java.io.IOException; import java.util.ArrayList; -import java.util.HashSet; import java.util.List; import java.util.Random; -import java.util.Set; import java.util.concurrent.TimeUnit; -import cn.jpush.android.api.CustomMessage; import cn.jpush.android.api.JPushInterface; -import cn.jpush.android.api.JPushMessage; -import cn.jpush.android.api.TagAliasCallback; -import cn.jpush.android.service.JPushMessageReceiver; import io.reactivex.Observer; import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.disposables.Disposable; @@ -119,11 +107,6 @@ import okhttp3.ResponseBody; import rx.Observable; import rx.functions.Action1; -import static com.mjsheng.myappstore.jpush.TagAliasOperatorHelper.ACTION_ADD; -import static com.mjsheng.myappstore.jpush.TagAliasOperatorHelper.ACTION_CHECK; -import static com.mjsheng.myappstore.jpush.TagAliasOperatorHelper.ACTION_CLEAN; -import static com.mjsheng.myappstore.jpush.TagAliasOperatorHelper.ACTION_DELETE; -import static com.mjsheng.myappstore.jpush.TagAliasOperatorHelper.ACTION_GET; 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; @@ -138,7 +121,8 @@ public class MainActivity extends AppCompatActivity { private DownloadManager downloadManager; private ImageView imageView; private TextView tv_devsn, tv_devmac, tv_version; - private TextView tv_class, tv_number, tv_name; + private TextView tv_batch, tv_class, tv_number, tv_name; + private Button bt_checkupdate; private int DeviceInfo; private RelativeLayout checkupdate; private ImageView back; @@ -181,89 +165,13 @@ public class MainActivity extends AppCompatActivity { } - public void onTagAliasAction(int i) { - Set tags = null; - String alias = null; - int action = -1; - boolean isAliasAction = false; - switch (i) { - //设置手机号码: - case 0: -// handleSetMobileNumber(); - return; - //增加tag - case 1: -// tags = getInPutTags(); - if (tags == null) { - return; - } - action = ACTION_ADD; - break; - //设置tag - case 2: -// tags = getInPutTags(); - if (tags == null) { - return; - } - action = ACTION_SET; - break; - //删除tag - case 3: -// tags = getInPutTags(); - if (tags == null) { - return; - } - action = ACTION_DELETE; - break; - //获取所有tag - case 4: - action = ACTION_GET; - break; - //清除所有tag - case 5: - action = ACTION_CLEAN; - break; - case 6: -// tags = getInPutTags(); - if (tags == null) { - return; - } - action = ACTION_CHECK; - break; - //设置alias - case 7: -// alias = getInPutAlias(); - alias = Utils.getSerial(); - if (TextUtils.isEmpty(alias)) { - return; - } - isAliasAction = true; - action = ACTION_SET; - break; - //获取alias - case 8: - isAliasAction = true; - action = ACTION_GET; - break; - //删除alias - case 9: - isAliasAction = true; - action = ACTION_DELETE; - break; - default: - return; - } + public void setAlias() { TagAliasBean tagAliasBean = new TagAliasBean(); - tagAliasBean.action = action; + tagAliasBean.action = ACTION_SET; sequence++; - if (isAliasAction) { - tagAliasBean.alias = alias; - } else { - tagAliasBean.tags = tags; - } - tagAliasBean.isAliasAction = isAliasAction; + tagAliasBean.alias = Utils.getSerial(); + tagAliasBean.isAliasAction = true; TagAliasOperatorHelper.getInstance().handleAction(getApplicationContext(), sequence, tagAliasBean); - } @Override @@ -346,8 +254,12 @@ public class MainActivity extends AppCompatActivity { .execute(new StringCallback() { @Override public void onSuccess(String s, Call call, Response response) { - com.alibaba.fastjson.JSONObject msgObject = JSON.parseObject(s); - Log.e("fht", "sendMACaddress onSuccess" + s); + try { + com.alibaba.fastjson.JSONObject msgObject = JSON.parseObject(s); + Log.e("fht", "sendMACaddress onSuccess" + s); + } catch (Exception e) { + Log.e("fht", "sendMACaddress Exception" + e); + } } @Override @@ -367,16 +279,22 @@ public class MainActivity extends AppCompatActivity { checkupdate.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - continuousClick(COUNTS, DURATION); +// continuousClick(COUNTS, DURATION); } }); imageView = findViewById(R.id.imageView); tv_devsn = findViewById(R.id.tv_devsn); tv_devsn.setText(Utils.getSerial()); tv_devmac = findViewById(R.id.tv_devmac); - tv_devmac.setText(com.blankj.utilcode.util.DeviceUtils.getMacAddress()); + String macaddr = com.blankj.utilcode.util.DeviceUtils.getMacAddress(); + if (macaddr.equals("")) { + tv_devmac.setText("获取失败"); + } else { + tv_devmac.setText(macaddr); + } tv_version = findViewById(R.id.version); tv_version.setText(BuildConfig.VERSION_NAME); + tv_batch = findViewById(R.id.tv_batch); tv_class = findViewById(R.id.tv_class); tv_number = findViewById(R.id.tv_number); tv_name = findViewById(R.id.tv_name); @@ -391,6 +309,15 @@ public class MainActivity extends AppCompatActivity { layout_class = findViewById(R.id.layout_class); layout_number = findViewById(R.id.layout_number); layout_name = findViewById(R.id.layout_name); + + bt_checkupdate = findViewById(R.id.chkupd); + bt_checkupdate.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + ToastUtil.show("正在检查更新"); + HTTPInterface.checkUpdate(mHandler, BuildConfig.APPLICATION_ID); + } + }); } final static int COUNTS = 5;// 点击次数 @@ -440,29 +367,29 @@ public class MainActivity extends AppCompatActivity { } - Handler handler = new Handler() { - @Override - public void handleMessage(Message msg) { - super.handleMessage(msg); - switch (msg.what) { - case 0: - SPUtils.put(MainActivity.this, "isLogined", 0); - setImageAndText(imageView, "设备未绑定"); - break; - case 1: - UserInfo userInfo = (UserInfo) msg.obj; - SPUtils.put(MainActivity.this, "isLogined", 1); - SPUtils.put(MainActivity.this, "member_id", userInfo.getMember_id()); - SPUtils.put(MainActivity.this, "sn_id", userInfo.getId()); - setImageAndText(imageView, "设备已绑定"); - break; - case 2: - SPUtils.put(MainActivity.this, "isLogined", 2); - setImageAndText(imageView, "未经验证的设备,请联系客服"); - break; - } - } - }; +// Handler handler = new Handler() { +//// @Override +//// public void handleMessage(Message msg) { +//// super.handleMessage(msg); +//// switch (msg.what) { +//// case 0: +//// SPUtils.put(MainActivity.this, "isLogined", 0); +//// setImageAndText(imageView, "设备未绑定"); +//// break; +//// case 1: +//// UserInfo userInfo = (UserInfo) msg.obj; +//// SPUtils.put(MainActivity.this, "isLogined", 1); +//// SPUtils.put(MainActivity.this, "member_id", userInfo.getMember_id()); +//// SPUtils.put(MainActivity.this, "sn_id", userInfo.getId()); +//// setImageAndText(imageView, "设备已绑定"); +//// break; +//// case 2: +//// SPUtils.put(MainActivity.this, "isLogined", 2); +//// setImageAndText(imageView, "未经验证的设备,请联系客服"); +//// break; +//// } +//// } +//// }; private String[] permission = new String[]{ // Permission.SYSTEM_ALERT_WINDOW, @@ -630,6 +557,7 @@ public class MainActivity extends AppCompatActivity { private void checkUpdate() { HTTPInterface.checkUpdate(mHandler, "com.jiaoguanyi.store"); + HTTPInterface.checkUpdate(mHandler, "com.jiaoguanyi.appstore"); } private Handler mHandler = new Handler() { @@ -637,6 +565,9 @@ public class MainActivity extends AppCompatActivity { public void handleMessage(Message msg) { super.handleMessage(msg); switch (msg.what) { + case 100: +// ToastUtil.show("已是最新版本"); + break; case 200: com.alibaba.fastjson.JSONObject jsonObject = (com.alibaba.fastjson.JSONObject) msg.obj; installAPK(jsonObject); @@ -648,33 +579,46 @@ public class MainActivity extends AppCompatActivity { StudentsInfo info = com.alibaba.fastjson.JSONObject.parseObject(String.valueOf(msg.obj), StudentsInfo.class); if (null != info) { if (info.getBatch().equals("")) { - tv_class.setText("暂无信息"); - layout_class.setVisibility(View.GONE); + tv_batch.setVisibility(View.GONE); + tv_batch.setText("暂无信息"); } else { - tv_class.setText(info.getBatch()); - layout_class.setVisibility(View.VISIBLE); - + tv_batch.setVisibility(View.VISIBLE); + tv_batch.setText(info.getBatch()); } - if (info.getSno().equals("")) { - tv_number.setText("暂无信息"); - layout_number.setVisibility(View.GONE); +// try { + if (info.getClasses().equals("")) { + layout_class.setVisibility(View.GONE); + tv_class.setText("暂无信息"); + } else { + layout_class.setVisibility(View.VISIBLE); + tv_class.setText(info.getClasses()); + } +// } catch (Exception e) { +// Log.e("fht", e.getMessage()); +// } + if (info.getSno().equals("")) { + layout_number.setVisibility(View.GONE); + tv_number.setText("暂无信息"); } else { - tv_number.setText(info.getSno()); layout_number.setVisibility(View.VISIBLE); + tv_number.setText(info.getSno()); } if (info.getRealname().equals("")) { - tv_name.setText("暂无信息"); layout_name.setVisibility(View.GONE); + tv_name.setText("暂无信息"); } else { - tv_name.setText(info.getRealname()); layout_name.setVisibility(View.VISIBLE); + tv_name.setText(info.getRealname()); } } + break; case -2: + tv_batch.setText("暂无信息"); tv_class.setText("暂无信息"); tv_number.setText("暂无信息"); tv_name.setText("暂无信息"); + tv_batch.setVisibility(View.GONE); layout_class.setVisibility(View.GONE); layout_number.setVisibility(View.GONE); layout_name.setVisibility(View.GONE); @@ -686,11 +630,11 @@ public class MainActivity extends AppCompatActivity { }; private void installAPK(com.alibaba.fastjson.JSONObject jsonObject) { - String url = jsonObject.getString("url"); + final String url = jsonObject.getString("url"); int versionCode = jsonObject.getInteger("version_code"); - String packageName = jsonObject.getString("package"); + final String packageName = jsonObject.getString("package"); String app_name = jsonObject.getString("app_name"); - com.alibaba.fastjson.JSONObject object = new com.alibaba.fastjson.JSONObject(); + final com.alibaba.fastjson.JSONObject object = new com.alibaba.fastjson.JSONObject(); object.put("app_name", app_name); object.put("app_package", packageName); PackageManager pm = getPackageManager(); @@ -701,13 +645,34 @@ public class MainActivity extends AppCompatActivity { e.printStackTrace(); } if (packageInfo == null || packageInfo.versionCode < versionCode) { - Aria.download(this) - .load(url) //读取下载地址 - .setFilePath(PathUtils.getExternalDownloadsPath() + "/ygj/" + EncryptUtils.encryptMD5ToString(packageName) + ".apk", true) - .setExtendField(object.toJSONString()) - .create(); //启动下载} + + AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this); + builder.setTitle("更新:"); + builder.setMessage("检测到有新版本,是否更新?"); + builder.setIcon(R.mipmap.ic_launcher); + builder.setCancelable(true); + //设置正面按钮 + builder.setPositiveButton("更新", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + Aria.download(this) + .load(url) //读取下载地址 + .setFilePath(PathUtils.getExternalDownloadsPath() + "/ygj/" + EncryptUtils.encryptMD5ToString(packageName) + ".apk", true) + .setExtendField(object.toJSONString()) + .create(); //启动下载} + dialog.dismiss(); + } + }); + //设置反面按钮 + builder.setNegativeButton("取消", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + } + }); + builder.show(); } else { -// ToastUtil.show("已是最新版本"); + ToastUtil.show("已是最新版本"); Log.e("fht", "已是最新版本"); } @@ -886,11 +851,10 @@ public class MainActivity extends AppCompatActivity { uploadAppInfo.setInstall_time(firstInstallTime); // Log.e("mjsheng", "------------------" + uploadAppInfo); - if ((packageInfo.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) == 0) { + if ((packageInfo.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) == 1) { + } else { //非系统应用 appList.add(uploadAppInfo); - } else { - } @@ -936,7 +900,7 @@ public class MainActivity extends AppCompatActivity { private void initJpush() { JPushInterface.init(this); - onTagAliasAction(7); + setAlias(); String rid = JPushInterface.getRegistrationID(getApplicationContext()); if (!rid.isEmpty()) { // ToastUtil.debugShow("RegId:" + rid); @@ -1014,7 +978,7 @@ public class MainActivity extends AppCompatActivity { } } - private void getAppLimitApi() { + private void getAppLimitApi() { AppLimitApi appLimitApi = Network.getAppLimitApi(); appLimitApi.getAppLimitApi(Configure.HTTP_KEY, Utils.getSerial()) .subscribeOn(Schedulers.io()) 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 c260ab2..b89d087 100644 --- a/app/src/main/java/com/mjsheng/myappstore/network/HTTPInterface.java +++ b/app/src/main/java/com/mjsheng/myappstore/network/HTTPInterface.java @@ -571,8 +571,22 @@ public class HTTPInterface { PackageManager pm = context.getPackageManager(); for (String pack : newList) { pm.setApplicationEnabledSetting(pack, PackageManager.COMPONENT_ENABLED_STATE_DISABLED, 0); + Log.e("setHideDesktopIcon", pack); } } + } else { + //测试 +// List newList=new ArrayList<>(); +// PackageManager pm = context.getPackageManager(); +// newList.add("com.android.quicksearchbox"); +// newList.add("com.android.calendar"); +// newList.add("com.android.dreams.basic"); +// newList.add("com.android.musicfx"); +// newList.add("com.android.email"); +// for (String pack : newList) { +// pm.setApplicationEnabledSetting(pack, PackageManager.COMPONENT_ENABLED_STATE_DEFAULT, 0); +// Log.e("setHideDesktopIcon", pack); +// } } } catch (Exception e) { Log.e("fht", "setHideDesktopIcon" + e.getMessage()); 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 e45ef4c..140dd02 100644 --- a/app/src/main/java/com/mjsheng/myappstore/receiver/BootReceiver.java +++ b/app/src/main/java/com/mjsheng/myappstore/receiver/BootReceiver.java @@ -25,10 +25,12 @@ public class BootReceiver extends BroadcastReceiver { || intent.getAction().equals("android.intent.action.BATTERY_OKAY") || intent.getAction().equals("android.intent.action.ACTION_POWER_CONNECTED") || intent.getAction().equals("android.intent.action.DATE_CHANGED") + || intent.getAction().equals("android.intent.action.LOCALE_CHANGED") || intent.getAction().equals("android.intent.action.TIME_TICK") || intent.getAction().equals("android.intent.action.USER_PRESENT") || intent.getAction().equals("android.intent.action.SCREEN_ON") || intent.getAction().equals("android.intent.action.SCREEN_OFF") + ) { //除了USER_PRESENT应该都收不到 Log.e("fht", "BootReceiver MSG:" + intent.getAction()); diff --git a/app/src/main/java/com/mjsheng/myappstore/receiver/NewAppReceiver.java b/app/src/main/java/com/mjsheng/myappstore/receiver/NewAppReceiver.java index 3efd014..ece5e6a 100644 --- a/app/src/main/java/com/mjsheng/myappstore/receiver/NewAppReceiver.java +++ b/app/src/main/java/com/mjsheng/myappstore/receiver/NewAppReceiver.java @@ -140,11 +140,9 @@ public class NewAppReceiver extends BroadcastReceiver { uploadAppInfo.setInstall_time(firstInstallTime); - if ((packageInfo.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) == 0) { - //非系统应用 - appList.add(uploadAppInfo); + if ((packageInfo.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) == 1) { } else { - + appList.add(uploadAppInfo); } 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 0457370..e6a05f5 100644 --- a/app/src/main/java/com/mjsheng/myappstore/server/InitJpushServer.java +++ b/app/src/main/java/com/mjsheng/myappstore/server/InitJpushServer.java @@ -1,11 +1,7 @@ package com.mjsheng.myappstore.server; import android.app.Service; -import android.content.BroadcastReceiver; -import android.content.Context; import android.content.Intent; -import android.content.IntentFilter; -import android.content.pm.ApplicationInfo; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.os.Build; @@ -18,7 +14,6 @@ import android.util.Log; import com.alibaba.fastjson.JSON; import com.arialyy.aria.core.Aria; -import com.blankj.utilcode.util.AppUtils; import com.blankj.utilcode.util.EncryptUtils; import com.blankj.utilcode.util.LogUtils; import com.blankj.utilcode.util.PathUtils; @@ -27,7 +22,6 @@ import com.lzy.okgo.OkGo; import com.lzy.okgo.callback.StringCallback; import com.mjsheng.myappstore.BuildConfig; import com.mjsheng.myappstore.MyApplication; -import com.mjsheng.myappstore.activity.MainActivity; import com.mjsheng.myappstore.bean.ForceDownloadBean; import com.mjsheng.myappstore.bean.ForceDownloadData; import com.mjsheng.myappstore.bean.NetAndLaunchBean; @@ -52,11 +46,9 @@ import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; -import java.lang.reflect.Array; import java.util.ArrayList; import java.util.Arrays; import java.util.List; -import java.util.Objects; import java.util.concurrent.TimeUnit; import cn.jpush.android.api.JPushInterface; @@ -82,6 +74,7 @@ import static com.mjsheng.myappstore.jpush.TagAliasOperatorHelper.sequence; */ public class InitJpushServer extends Service { + @Nullable @Override public IBinder onBind(Intent intent) { @@ -92,12 +85,12 @@ public class InitJpushServer extends Service { public void onCreate() { Log.e("InitJpushServer", "onCreate"); super.onCreate(); +// android.os.Debug.waitForDebugger(); } @Override public int onStartCommand(Intent intent, int flags, int startId) { - getAppLimitApi();//获取可以写入的app包名 HTTPInterface.getNetAndLaunchSetting(this); timerImitate(); @@ -315,14 +308,24 @@ public class InitJpushServer extends Service { deleteOtherApp(result); } + + private void deleteOtherApp(String packageList) { Log.e("deleteOtherApp", "packageList:" + packageList); String[] result = packageList.split(","); List resultList = new ArrayList<>(Arrays.asList(result)); List packageLists = ApkUtils.queryFilterAppInfo(InitJpushServer.this); + Log.e("deleteOtherApp", "packageLists:" + packageLists.toString()); if (resultList.size() > 0) { for (final String packageName : packageLists) { + if (Utils.isSystemApp(InitJpushServer.this, packageName)) { + Log.e("deleteOtherApp", "is systemApp:" + packageName); + continue; + } + if (ApkUtils.canremove_systemapp.contains(packageName)) { + continue; + } if (!resultList.contains(packageName)) { new Thread(new Runnable() { @Override diff --git a/app/src/main/java/com/mjsheng/myappstore/utils/ApkUtils.java b/app/src/main/java/com/mjsheng/myappstore/utils/ApkUtils.java index 291d3d3..5893694 100644 --- a/app/src/main/java/com/mjsheng/myappstore/utils/ApkUtils.java +++ b/app/src/main/java/com/mjsheng/myappstore/utils/ApkUtils.java @@ -7,7 +7,6 @@ import android.content.pm.ApplicationInfo; import android.content.pm.PackageInfo; import android.content.pm.PackageInstaller; import android.content.pm.PackageManager; -import android.content.pm.ResolveInfo; import android.net.Uri; import android.os.Binder; import android.os.Build; @@ -19,33 +18,22 @@ import android.widget.Toast; import com.mjsheng.myappstore.BuildConfig; import com.mjsheng.myappstore.R; -import com.mjsheng.myappstore.utils.update.ToastTool; import java.io.BufferedReader; -import java.io.ByteArrayInputStream; -import java.io.ByteArrayOutputStream; import java.io.DataOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStream; -import java.lang.annotation.ElementType; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; -import java.nio.ByteBuffer; import java.util.ArrayList; -import java.util.Arrays; import java.util.Enumeration; -import java.util.HashSet; import java.util.List; -import java.util.Set; import java.util.zip.ZipEntry; import java.util.zip.ZipFile; -import javax.crypto.interfaces.PBEKey; - -import cn.jpush.android.api.PushNotificationBuilder; import rx.Observable; import rx.Observer; import rx.Subscriber; @@ -584,64 +572,57 @@ public class ApkUtils { // 查询所有已经安装的应用程序 List appInfos = pm.getInstalledApplications(PackageManager.GET_UNINSTALLED_PACKAGES);// GET_UNINSTALLED_PACKAGES代表已删除,但还有安装目录的 List applicationInfos = new ArrayList<>(); - - // 创建一个类别为CATEGORY_LAUNCHER的该包名的Intent - Intent resolveIntent = new Intent(Intent.ACTION_MAIN, null); - resolveIntent.addCategory(Intent.CATEGORY_LAUNCHER); - - // 通过getPackageManager()的queryIntentActivities方法遍历,得到所有能打开的app的packageName - List resolveinfoList = pm.queryIntentActivities(resolveIntent, 0); - Set allowPackages = new HashSet(); - for (ResolveInfo resolveInfo : resolveinfoList) { - allowPackages.add(resolveInfo.activityInfo.packageName); - } - for (ApplicationInfo app : appInfos) { - if ((app.flags & ApplicationInfo.FLAG_SYSTEM) <= 0)//通过flag排除系统应用,会将电话、短信也排除掉 - { +// Log.e("queryFilterAppInfo", String.valueOf(app.flags)); +// Log.e("queryFilterAppInfo", String.valueOf((app.flags & mask))); + if ((app.flags & ApplicationInfo.FLAG_SYSTEM) == 1) { + //通过flag排除系统应用,会将电话、短信也排除掉 + } else { applicationInfos.add(app.packageName); + Log.e("queryFilterAppInfo", app.packageName); } -// if(app.uid > 10000){//通过uid排除系统应用,在一些手机上效果不好 -// applicationInfos.add(app); -// } } return applicationInfos; } - public static List showAllAPP(Context context) { + public static List canremove_systemapp = new ArrayList() {{ + //预置的可以卸载的系统应用,判断出来为第三方 + this.add("com.android.quicksearchbox"); + this.add("com.android.calendar"); + this.add("com.android.dreams.basic"); + this.add("com.android.musicfx"); + this.add("com.android.email"); + }}; + public static List systemapp = new ArrayList() {{ + //需要管控的系统应用 + this.add("com.android.gallery3d"); + this.add("com.android.deskclock"); + this.add("com.android.music"); + this.add("com.mediatek.camera"); + this.add("com.android.documentsui"); + this.add("com.android.soundrecorder"); + this.add("com.android.browser"); + }}; + + + public static void showAllAPP(Context context) { PackageManager pm = context.getPackageManager(); // 查询所有已经安装的应用程序 - List appInfos = pm.getInstalledApplications(PackageManager.GET_UNINSTALLED_PACKAGES);// GET_UNINSTALLED_PACKAGES代表已删除,但还有安装目录的 - - List packageList = new ArrayList<>(); - - // 创建一个类别为CATEGORY_LAUNCHER的该包名的Intent - Intent resolveIntent = new Intent(Intent.ACTION_MAIN, null); - resolveIntent.addCategory(Intent.CATEGORY_LAUNCHER); - - // 通过getPackageManager()的queryIntentActivities方法遍历,得到所有能打开的app的packageName - List resolveinfoList = pm.queryIntentActivities(resolveIntent, 0); - Set allowPackages = new HashSet(); - for (ResolveInfo resolveInfo : resolveinfoList) { - allowPackages.add(resolveInfo.activityInfo.packageName); + List packages = pm.getInstalledPackages(0); + for (PackageInfo packageInfo : packages) { + if (ApkUtils.canremove_systemapp.contains(packageInfo.packageName)) { + continue; + } + if ((packageInfo.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) == 1 + && !systemapp.contains(packageInfo.packageName) + ) { + } else { + Log.e("showAllAPP", "packageName:" + packageInfo.applicationInfo.packageName); + pm.setApplicationEnabledSetting(packageInfo.applicationInfo.packageName, PackageManager.COMPONENT_ENABLED_STATE_DEFAULT, 0); + } } - for (ApplicationInfo app : appInfos) { -// if((app.flags & ApplicationInfo.FLAG_SYSTEM) <= 0)//通过flag排除系统应用,会将电话、短信也排除掉 -// { -// applicationInfos.add(app); -// } -// if(app.uid > 10000){//通过uid排除系统应用,在一些手机上效果不好 -// applicationInfos.add(app); -// } -// if (allowPackages.contains(app.packageName) && !Arrays.asList(excludePackageName).contains(app.packageName)) { -// if (allowPackages.contains(app.packageName)) { -// packageList.add(app.packageName); -// } - pm.setApplicationEnabledSetting(app.packageName, PackageManager.COMPONENT_ENABLED_STATE_DEFAULT, 0); - } - return packageList; } @@ -661,4 +642,25 @@ public class ApkUtils { } } } + + + public static boolean isSystemApp(Context context, String pkg) { + try { + PackageInfo packageInfo = context.getPackageManager().getPackageInfo(pkg, 0); + if ((packageInfo.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) == 1) { + if (pkg.equals(context.getPackageName())) { + return true; + } else { + //第三方应用 + return false; + } + } else { + //系统应用 + return true; + } + } catch (PackageManager.NameNotFoundException e) { + e.printStackTrace(); + return true; + } + } } diff --git a/app/src/main/java/com/mjsheng/myappstore/utils/AppsManagerUtils.java b/app/src/main/java/com/mjsheng/myappstore/utils/AppsManagerUtils.java index 6f1143b..0656ae0 100644 --- a/app/src/main/java/com/mjsheng/myappstore/utils/AppsManagerUtils.java +++ b/app/src/main/java/com/mjsheng/myappstore/utils/AppsManagerUtils.java @@ -128,7 +128,8 @@ public class AppsManagerUtils { public static boolean isSystemApp(Context context, String pkg) { try { PackageInfo packageInfo = context.getPackageManager().getPackageInfo(pkg, 0); - if ((packageInfo.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) <= 0) { + int mask = ApplicationInfo.FLAG_SYSTEM | ApplicationInfo.FLAG_UPDATED_SYSTEM_APP; + if ((packageInfo.applicationInfo.flags & mask) == 0) { if (pkg.equals(context.getPackageName())) { return true; } else { diff --git a/app/src/main/res/drawable/bt_checkupdate_normnl.xml b/app/src/main/res/drawable/bt_checkupdate_normnl.xml new file mode 100644 index 0000000..a0f5a65 --- /dev/null +++ b/app/src/main/res/drawable/bt_checkupdate_normnl.xml @@ -0,0 +1,13 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/bt_checkupdate_pressed.xml b/app/src/main/res/drawable/bt_checkupdate_pressed.xml new file mode 100644 index 0000000..3a8bd0d --- /dev/null +++ b/app/src/main/res/drawable/bt_checkupdate_pressed.xml @@ -0,0 +1,13 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/bt_checkupdate_selector.xml b/app/src/main/res/drawable/bt_checkupdate_selector.xml new file mode 100644 index 0000000..7139d84 --- /dev/null +++ b/app/src/main/res/drawable/bt_checkupdate_selector.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout-land/activity_main.xml b/app/src/main/res/layout-land/activity_main.xml index 2842f1d..12d6239 100644 --- a/app/src/main/res/layout-land/activity_main.xml +++ b/app/src/main/res/layout-land/activity_main.xml @@ -23,7 +23,7 @@ android:gravity="center_horizontal" android:text="我的设备" android:textColor="#000000" - android:textSize="@dimen/sp_16" + android:textSize="@dimen/sp_14" android:textStyle="bold" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" @@ -54,241 +54,261 @@ app:layout_constraintHorizontal_bias="0.5" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/bannerLayout" - app:layout_constraintVertical_bias="0.05"> + app:layout_constraintVertical_bias="0.05"> - - - - + android:layout_height="wrap_content" + android:layout_marginLeft="@dimen/dp_150" + android:layout_marginTop="12dp" + android:layout_marginRight="@dimen/dp_150" + android:orientation="vertical" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toBottomOf="@+id/tv_batch"> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + android:textSize="@dimen/sp_12" + android:visibility="gone" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toBottomOf="@+id/imageView" /> + - + - + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +