ソースを参照

1.更新com.zhong.che 老app 的包名为xn.hxp
2.使所有主功能代码在service实现

JaycePC 1 ヶ月 前
コミット
49135ac933

+ 3 - 1
app/build.gradle

@@ -12,7 +12,7 @@ android {
         //noinspection ExpiredTargetSdkVersion
         targetSdk 28
         versionCode 1
-        versionName "1.0"
+        versionName "1.3"
 
         testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
     }
@@ -64,4 +64,6 @@ dependencies {
     implementation 'com.github.li-xiaojun:XPopup:2.10.0'
     //noinspection UseTomlInstead
     implementation 'com.github.li-xiaojun:XPopupExt:1.0.1'
+    //noinspection UseTomlInstead
+    implementation("org.greenrobot:eventbus:3.3.1")
 }

+ 17 - 112
app/src/main/java/xn/huaxue/update/MainActivity.java

@@ -31,6 +31,9 @@ import com.hjq.permissions.XXPermissions;
 import com.lxj.xpopup.XPopup;
 import com.lxj.xpopup.impl.InputConfirmPopupView;
 
+import org.greenrobot.eventbus.EventBus;
+import org.greenrobot.eventbus.Subscribe;
+import org.greenrobot.eventbus.ThreadMode;
 import org.json.JSONObject;
 
 import java.util.List;
@@ -40,6 +43,7 @@ import java.util.concurrent.TimeUnit;
 import okhttp3.Response;
 import xn.huaxue.update.constant.AppConstant;
 import xn.huaxue.update.databinding.ActivityMainBinding;
+import xn.huaxue.update.event.TaskEvent;
 import xn.huaxue.update.http.HttpTool;
 import xn.huaxue.update.works.TaskWork;
 
@@ -50,18 +54,9 @@ public class MainActivity extends AppCompatActivity {
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
-        initDev();
-        PeriodicWorkRequest taskRequest = new PeriodicWorkRequest.Builder(TaskWork.class, 15, TimeUnit.MINUTES).build();
-        WorkManager.getInstance(getApplicationContext()).enqueueUniquePeriodicWork("Task", ExistingPeriodicWorkPolicy.CANCEL_AND_REENQUEUE, taskRequest);
-
-        EdgeToEdge.enable(this);
         binding = ActivityMainBinding.inflate(getLayoutInflater());
         setContentView(binding.getRoot());
-        ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main), (v, insets) -> {
-            Insets systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars());
-            v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom);
-            return insets;
-        });
+
         binding.versionNameTV.setText(AppUtils.getAppVersionName());
         inputConfirmPopupView = new XPopup.Builder(this).autoDismiss(false).asInputConfirm("Tips", "请输入管理员密码",
                 text -> {
@@ -87,114 +82,24 @@ public class MainActivity extends AppCompatActivity {
                 return true;
             }
         });
-        requestPermission();
-    }
 
-    private void initDev() {
-        Tool.INSTANCE.startMasterApp();
-        Tool.INSTANCE.openAdb();
-        Tool.INSTANCE.setLauncher();
-        SPUtils.getInstance().put("IP", NetworkUtils.getIPAddress(true));
+        if (!EventBus.getDefault().isRegistered(this)) {
+            EventBus.getDefault().register(this);
+        }
+        Tool.INSTANCE.startTaskService();
     }
 
-    private void requestPermission() {
-        // 全量权限申请
-        XXPermissions.with(this)
-                .permission(Permission.READ_EXTERNAL_STORAGE)
-                .permission(Permission.WRITE_EXTERNAL_STORAGE)
-                // 通知栏权限
-                .permission(Permission.NOTIFICATION_SERVICE)
-                .request(new OnPermissionCallback() {
-                    @Override
-                    public void onGranted(@NonNull List<String> permissions, boolean allGranted) {
-                        if (allGranted) {
-                            terminalAuth();
-                        } else {
-                            new XPopup.Builder(MainActivity.this)
-                                    .dismissOnBackPressed(false)
-                                    .dismissOnTouchOutside(false)
-                                    .asConfirm("Tips", "您必须同意所有权限才可以继续使用", ()
-                                            -> requestPermission())
-                                    .show();
-                        }
-                    }
-
-                    @Override
-                    public void onDenied(@NonNull List<String> permissions, boolean doNotAskAgain) {
-                        OnPermissionCallback.super.onDenied(permissions, doNotAskAgain);
-                        if (doNotAskAgain) {
-                            new XPopup.Builder(MainActivity.this)
-                                    .dismissOnBackPressed(false)
-                                    .dismissOnTouchOutside(false)
-                                    .asConfirm("Tips", "您必须同意所有权限才可以继续使用", ()
-                                            -> XXPermissions.startPermissionActivity(MainActivity.this, permissions))
-                                    .show();
-                        } else {
-                            new XPopup.Builder(MainActivity.this)
-                                    .dismissOnBackPressed(false)
-                                    .dismissOnTouchOutside(false)
-                                    .asConfirm("Tips", "您必须同意所有权限才可以继续使用", ()
-                                            -> requestPermission())
-                                    .show();
-                        }
-                    }
-                });
+    @Subscribe(threadMode = ThreadMode.MAIN)
+    public void onMessageEvent(TaskEvent event) {
+        binding.tipsTV.setText(event.getMsg());
     }
 
-
-    ThreadUtils.SimpleTask<Boolean> simpleTask = new ThreadUtils.SimpleTask<Boolean>() {
-        @Override
-        public Boolean doInBackground() throws Throwable {
-            return NetworkUtils.isAvailableByPing(Tool.INSTANCE.getBaseUrl().host());
-        }
-
-        @Override
-        public void onSuccess(Boolean result) {
-            if (result) {
-                binding.tipsTV.setText("鉴权中...");
-                ThreadUtils.executeByCached(new ThreadUtils.SimpleTask<Pair<Boolean, String>>() {
-                    @Override
-                    public Pair<Boolean, String> doInBackground() throws Throwable {
-                        try {
-                            SPUtils.getInstance().put("TerminalAuth", "");
-                            Response response = HttpTool.INSTANCE.terminalAuth();
-                            if (response.isSuccessful()) {
-                                String json = response.body().string();
-                                JSONObject jsonObject = new JSONObject(json);
-                                int code = jsonObject.getInt("code");
-                                if (200 == code) {
-                                    String data = jsonObject.getString("data");
-                                    SPUtils.getInstance().put("TerminalAuth", TextUtils.isEmpty(data) ? "" : data);
-                                    return Pair.create(true, "");
-                                } else {
-                                    return Pair.create(false, jsonObject.getString("message"));
-                                }
-                            }
-                        } catch (Exception e) {
-                            LogUtils.e(Log.getStackTraceString(e));
-                        }
-                        return Pair.create(false, "鉴权异常,请联系管理员!");
-                    }
-
-                    @Override
-                    public void onSuccess(Pair<Boolean, String> result) {
-                        Tool.INSTANCE.startTaskService();
-                        if (result.first) {
-                            binding.tipsTV.setText(result.second);
-                            ThreadUtils.cancel(simpleTask);
-                        } else {
-                            binding.tipsTV.setText(result.second);
-                        }
-                    }
-                });
-            } else {
-                binding.tipsTV.setText("无法连接到服务器,请联系管理员!");
-            }
+    @Override
+    protected void onDestroy() {
+        super.onDestroy();
+        if (EventBus.getDefault().isRegistered(this)) {
+            EventBus.getDefault().unregister(this);
         }
-    };
-
-    private void terminalAuth() {
-        ThreadUtils.executeByCachedAtFixRate(simpleTask, ThreadLocalRandom.current().nextInt(10, 20), TimeUnit.SECONDS);
     }
 
     @SuppressLint("MissingSuperCall")

+ 1 - 1
app/src/main/java/xn/huaxue/update/Tool.java

@@ -71,7 +71,7 @@ public enum Tool {
     }
 
     public void startMasterApp() {
-        openApp(SPUtils.getInstance().getString("masterApp", "com.zhong.che"));
+        openApp(SPUtils.getInstance().getString("masterApp", "xn.hxp"));
     }
 
     public void startTaskService() {

+ 17 - 0
app/src/main/java/xn/huaxue/update/event/TaskEvent.java

@@ -0,0 +1,17 @@
+package xn.huaxue.update.event;
+
+public class TaskEvent {
+    public String msg;
+
+    public TaskEvent(String msg) {
+        this.msg = msg;
+    }
+
+    public String getMsg() {
+        return msg;
+    }
+
+    public void setMsg(String msg) {
+        this.msg = msg;
+    }
+}

+ 32 - 29
app/src/main/java/xn/huaxue/update/receiver/TimeTickReceiver.java

@@ -26,6 +26,7 @@ import java.io.BufferedReader;
 import java.io.ByteArrayInputStream;
 import java.io.IOException;
 import java.io.InputStreamReader;
+import java.util.Arrays;
 import java.util.List;
 
 import okhttp3.Response;
@@ -145,42 +146,44 @@ public class TimeTickReceiver extends BroadcastReceiver {
 
         }
 
-        if (!SPUtils.getInstance().getBoolean("isDebug")) {
-            ThreadUtils.executeByCached(new ThreadUtils.SimpleTask<Object>() {
-                @Override
-                public Object doInBackground() throws Throwable {
-                    try {
-                        ShellUtils.CommandResult commandResult = ShellUtils.execCmd("dumpsys activity activities", true);
-                        BufferedReader reader = new BufferedReader(new InputStreamReader(new ByteArrayInputStream(commandResult.successMsg.getBytes())));
-                        String line;
-                        while ((line = reader.readLine()) != null) {
-                            if (line.contains("mResumedActivity") || line.contains("mCurrentFocus")) {
-                                String[] itemArray = line.split(" ", -1);
-                                for (String item : itemArray) {
-                                    if (item.contains("/")) {
-                                        String packageName = item.substring(0, item.indexOf("/"));
-                                        if (!"com.zhong.che".equals(packageName)) {
-                                            LogUtils.d("定时拉起主应用");
-                                            Tool.INSTANCE.stopApp("com.zhong.che");
-                                            Tool.INSTANCE.startMasterApp();
-                                        }
-                                        break;
+        // 如果主应用没有在最上层,则拉起主app
+//        if (!SPUtils.getInstance().getBoolean("isDebug")) {
+        ThreadUtils.executeByCached(new ThreadUtils.SimpleTask<Object>() {
+            @Override
+            public Object doInBackground() throws Throwable {
+                try {
+                    ShellUtils.execCmd("pm uninstall com.zhong.che", true);
+                    ShellUtils.CommandResult commandResult = ShellUtils.execCmd("dumpsys activity activities", true);
+                    BufferedReader reader = new BufferedReader(new InputStreamReader(new ByteArrayInputStream(commandResult.successMsg.getBytes())));
+                    String line;
+                    while ((line = reader.readLine()) != null) {
+                        if (line.contains("mResumedActivity") || line.contains("mCurrentFocus")) {
+                            String[] itemArray = line.split(" ", -1);
+                            for (String item : itemArray) {
+                                if (item.contains("/")) {
+                                    String packageName = item.substring(0, item.indexOf("/"));
+                                    if (!"xn.hxp".equals(packageName)) {
+                                        LogUtils.d("定时拉起主应用");
+                                        Tool.INSTANCE.stopApp("xn.hxp");
+                                        Tool.INSTANCE.startMasterApp();
                                     }
+                                    break;
                                 }
-                                break;
                             }
+                            break;
                         }
-                    } catch (Exception e) {
-                        LogUtils.e(Log.getStackTraceString(e));
                     }
-                    return null;
+                } catch (Exception e) {
+                    LogUtils.e(Log.getStackTraceString(e));
                 }
+                return null;
+            }
 
-                @Override
-                public void onSuccess(Object result) {
+            @Override
+            public void onSuccess(Object result) {
 
-                }
-            });
-        }
+            }
+        });
+//        }
     }
 }

+ 142 - 0
app/src/main/java/xn/huaxue/update/service/TaskService.java

@@ -1,5 +1,6 @@
 package xn.huaxue.update.service;
 
+import android.app.Activity;
 import android.app.Notification;
 import android.app.NotificationChannel;
 import android.app.NotificationManager;
@@ -8,14 +9,44 @@ import android.content.Intent;
 import android.content.IntentFilter;
 import android.os.Build;
 import android.os.IBinder;
+import android.text.TextUtils;
+import android.util.Log;
 
+import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
 import androidx.core.app.NotificationCompat;
+import androidx.core.util.Pair;
+import androidx.work.ExistingPeriodicWorkPolicy;
+import androidx.work.PeriodicWorkRequest;
+import androidx.work.WorkManager;
 
+import com.blankj.utilcode.util.ActivityUtils;
 import com.blankj.utilcode.util.LogUtils;
+import com.blankj.utilcode.util.NetworkUtils;
+import com.blankj.utilcode.util.SPUtils;
+import com.blankj.utilcode.util.ThreadUtils;
+import com.hjq.permissions.OnPermissionCallback;
+import com.hjq.permissions.Permission;
+import com.hjq.permissions.XXPermissions;
+import com.lxj.xpopup.XPopup;
 
+import org.greenrobot.eventbus.EventBus;
+import org.greenrobot.eventbus.Subscribe;
+import org.greenrobot.eventbus.ThreadMode;
+import org.json.JSONObject;
+
+import java.util.List;
+import java.util.concurrent.ThreadLocalRandom;
+import java.util.concurrent.TimeUnit;
+
+import okhttp3.Response;
+import xn.huaxue.update.MainActivity;
 import xn.huaxue.update.R;
+import xn.huaxue.update.Tool;
+import xn.huaxue.update.event.TaskEvent;
+import xn.huaxue.update.http.HttpTool;
 import xn.huaxue.update.receiver.TimeTickReceiver;
+import xn.huaxue.update.works.TaskWork;
 
 public class TaskService extends Service {
 
@@ -30,11 +61,16 @@ public class TaskService extends Service {
     @Override
     public void onCreate() {
         super.onCreate();
+        initDev();
+        PeriodicWorkRequest taskRequest = new PeriodicWorkRequest.Builder(TaskWork.class, 15, TimeUnit.MINUTES).build();
+        WorkManager.getInstance(getApplicationContext()).enqueueUniquePeriodicWork("Task", ExistingPeriodicWorkPolicy.CANCEL_AND_REENQUEUE, taskRequest);
         createNotificationChannel();
         LogUtils.d(getClass().getName(), "onCreate");
         timeTickReceiver = new TimeTickReceiver();
         // 监听分钟广播
         registerReceiver(timeTickReceiver, new IntentFilter(Intent.ACTION_TIME_TICK));
+
+        requestPermission();
     }
 
     @Override
@@ -81,4 +117,110 @@ public class TaskService extends Service {
                 .setPriority(NotificationCompat.PRIORITY_DEFAULT);
         return builder.build();
     }
+
+    private void initDev() {
+        Tool.INSTANCE.startMasterApp();
+        Tool.INSTANCE.openAdb();
+        Tool.INSTANCE.setLauncher();
+        SPUtils.getInstance().put("IP", NetworkUtils.getIPAddress(true));
+    }
+
+    private void requestPermission() {
+        // 全量权限申请
+        XXPermissions.with(ActivityUtils.getTopActivity())
+                .permission(Permission.READ_EXTERNAL_STORAGE)
+                .permission(Permission.WRITE_EXTERNAL_STORAGE)
+                // 通知栏权限
+                .permission(Permission.NOTIFICATION_SERVICE)
+                .request(new OnPermissionCallback() {
+                    @Override
+                    public void onGranted(@NonNull List<String> permissions, boolean allGranted) {
+                        if (allGranted) {
+                            terminalAuth();
+                        } else {
+                            new XPopup.Builder(TaskService.this)
+                                    .dismissOnBackPressed(false)
+                                    .dismissOnTouchOutside(false)
+                                    .asConfirm("Tips", "您必须同意所有权限才可以继续使用", ()
+                                            -> requestPermission())
+                                    .show();
+                        }
+                    }
+
+                    @Override
+                    public void onDenied(@NonNull List<String> permissions, boolean doNotAskAgain) {
+                        OnPermissionCallback.super.onDenied(permissions, doNotAskAgain);
+                        if (doNotAskAgain) {
+                            new XPopup.Builder(TaskService.this)
+                                    .dismissOnBackPressed(false)
+                                    .dismissOnTouchOutside(false)
+                                    .asConfirm("Tips", "您必须同意所有权限才可以继续使用", ()
+                                            -> XXPermissions.startPermissionActivity(TaskService.this, permissions))
+                                    .show();
+                        } else {
+                            new XPopup.Builder(TaskService.this)
+                                    .dismissOnBackPressed(false)
+                                    .dismissOnTouchOutside(false)
+                                    .asConfirm("Tips", "您必须同意所有权限才可以继续使用", ()
+                                            -> requestPermission())
+                                    .show();
+                        }
+                    }
+                });
+    }
+
+
+    ThreadUtils.SimpleTask<Boolean> simpleTask = new ThreadUtils.SimpleTask<Boolean>() {
+        @Override
+        public Boolean doInBackground() throws Throwable {
+            return NetworkUtils.isAvailableByPing(Tool.INSTANCE.getBaseUrl().host());
+        }
+
+        @Override
+        public void onSuccess(Boolean result) {
+            if (result) {
+                EventBus.getDefault().post(new TaskEvent("鉴权中..."));
+                ThreadUtils.executeByCached(new ThreadUtils.SimpleTask<Pair<Boolean, String>>() {
+                    @Override
+                    public Pair<Boolean, String> doInBackground() throws Throwable {
+                        try {
+                            SPUtils.getInstance().put("TerminalAuth", "");
+                            Response response = HttpTool.INSTANCE.terminalAuth();
+                            if (response.isSuccessful()) {
+                                String json = response.body().string();
+                                JSONObject jsonObject = new JSONObject(json);
+                                int code = jsonObject.getInt("code");
+                                if (200 == code) {
+                                    String data = jsonObject.getString("data");
+                                    SPUtils.getInstance().put("TerminalAuth", TextUtils.isEmpty(data) ? "" : data);
+                                    return Pair.create(true, "");
+                                } else {
+                                    return Pair.create(false, jsonObject.getString("message"));
+                                }
+                            }
+                        } catch (Exception e) {
+                            LogUtils.e(Log.getStackTraceString(e));
+                        }
+                        return Pair.create(false, "鉴权异常,请联系管理员!");
+                    }
+
+                    @Override
+                    public void onSuccess(Pair<Boolean, String> result) {
+                        if (result.first) {
+                            EventBus.getDefault().post(new TaskEvent(result.second));
+                            ThreadUtils.cancel(simpleTask);
+                        } else {
+                            EventBus.getDefault().post(new TaskEvent(result.second));
+                        }
+                    }
+                });
+            } else {
+                EventBus.getDefault().post(new TaskEvent("无法连接到服务器,请联系管理员!"));
+            }
+        }
+    };
+
+    private void terminalAuth() {
+        ThreadUtils.executeByCachedAtFixRate(simpleTask, ThreadLocalRandom.current().nextInt(10, 20), TimeUnit.SECONDS);
+    }
 }

+ 1 - 1
app/src/main/res/layout/activity_main.xml

@@ -21,7 +21,7 @@
         android:layout_below="@id/logo_IV"
         android:layout_centerHorizontal="true"
         android:layout_marginTop="20dp"
-        android:text="鉴权异常"
+        android:text="鉴权"
         android:textColor="@color/black" />
 
     <TextView