Update activity function

pull/99/head
jhengazuki 3 months ago
parent 46ac911410
commit 37b069208f
  1. 79
      app/src/main/java/com/github/catvod/spider/Init.java
  2. 6
      app/src/main/java/com/github/catvod/spider/Market.java
  3. BIN
      jar/custom_spider.jar
  4. 2
      jar/custom_spider.jar.md5

@ -1,19 +1,17 @@
package com.github.catvod.spider;
import android.Manifest;
import android.app.Activity;
import android.app.Application;
import android.content.Context;
import android.content.pm.PackageManager;
import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import com.github.catvod.crawler.SpiderDebug;
import com.github.catvod.utils.Notify;
import java.lang.reflect.Field;
import java.util.Map;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
@ -21,6 +19,7 @@ public class Init {
private final ExecutorService executor;
private final Handler handler;
private Activity activity;
private Application app;
private static class Loader {
@ -40,9 +39,18 @@ public class Init {
return get().app;
}
public static Activity activity() {
return get().activity;
}
private void setActivity(Activity activity) {
this.activity = activity;
}
public static void init(Context context) {
get().app = ((Application) context);
SpiderDebug.log("自定義爬蟲代碼載入成功!");
registerActivityLifecycleCallbacks();
Proxy.init();
}
@ -58,32 +66,41 @@ public class Init {
get().handler.postDelayed(runnable, delay);
}
public static void checkPermission() {
try {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) return;
if (context().checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) return;
Notify.show("請允許儲存權限");
} catch (Exception e) {
e.printStackTrace();
}
}
private static void registerActivityLifecycleCallbacks() {
get().app.registerActivityLifecycleCallbacks(new Application.ActivityLifecycleCallbacks() {
@Override
public void onActivityCreated(@NonNull Activity activity, @Nullable Bundle savedInstanceState) {
if (activity != activity()) get().setActivity(activity);
}
@Override
public void onActivityStarted(@NonNull Activity activity) {
if (activity != activity()) get().setActivity(activity);
}
@Override
public void onActivityResumed(@NonNull Activity activity) {
if (activity != activity()) get().setActivity(activity);
}
@Override
public void onActivityPaused(@NonNull Activity activity) {
if (activity == activity()) get().setActivity(null);
}
@Override
public void onActivityStopped(@NonNull Activity activity) {
if (activity == activity()) get().setActivity(null);
}
@Override
public void onActivityDestroyed(@NonNull Activity activity) {
if (activity == activity()) get().setActivity(null);
}
public static Activity getActivity() throws Exception {
Class<?> activityThreadClass = Class.forName("android.app.ActivityThread");
Object activityThread = activityThreadClass.getMethod("currentActivityThread").invoke(null);
Field activitiesField = activityThreadClass.getDeclaredField("mActivities");
activitiesField.setAccessible(true);
Map<?, ?> activities = (Map<?, ?>) activitiesField.get(activityThread);
for (Object o : activities.values()) {
Class<?> clz = o.getClass();
Field pausedField = clz.getDeclaredField("paused");
pausedField.setAccessible(true);
if (!pausedField.getBoolean(o)) {
Field activityField = clz.getDeclaredField("activity");
activityField.setAccessible(true);
return (Activity) activityField.get(o);
@Override
public void onActivitySaveInstanceState(@NonNull Activity activity, @NonNull Bundle outState) {
}
}
return null;
});
}
}

@ -42,7 +42,6 @@ public class Market extends Spider {
public void init(Context context, String extend) throws Exception {
if (extend.startsWith("http")) extend = OkHttp.string(extend);
datas = Data.arrayFrom(extend);
Init.checkPermission();
}
@Override
@ -81,8 +80,7 @@ public class Market extends Spider {
}
private void download(File file, InputStream is, double length) throws Exception {
FileOutputStream os = new FileOutputStream(file);
try (BufferedInputStream input = new BufferedInputStream(is)) {
try (BufferedInputStream input = new BufferedInputStream(is); FileOutputStream os = new FileOutputStream(file)) {
byte[] buffer = new byte[4096];
int readBytes;
long totalBytes = 0;
@ -107,7 +105,7 @@ public class Market extends Spider {
private void setDialog() {
Init.run(() -> {
try {
dialog = new ProgressDialog(Init.getActivity());
dialog = new ProgressDialog(Init.activity());
dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
dialog.setCancelable(false);
if (isBusy()) dialog.show();

Binary file not shown.

@ -1 +1 @@
62ec6f78832485cdccc43870fed1b860
68e7568f6083fda151a310919aab9acf

Loading…
Cancel
Save