diff --git a/app/src/main/java/com/github/catvod/spider/Init.java b/app/src/main/java/com/github/catvod/spider/Init.java index d61d128..fc8c1ad 100644 --- a/app/src/main/java/com/github/catvod/spider/Init.java +++ b/app/src/main/java/com/github/catvod/spider/Init.java @@ -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; + }); } } diff --git a/app/src/main/java/com/github/catvod/spider/Market.java b/app/src/main/java/com/github/catvod/spider/Market.java index e3d7b94..60d25d0 100644 --- a/app/src/main/java/com/github/catvod/spider/Market.java +++ b/app/src/main/java/com/github/catvod/spider/Market.java @@ -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(); diff --git a/jar/custom_spider.jar b/jar/custom_spider.jar index 65da7ef..21e5b75 100644 Binary files a/jar/custom_spider.jar and b/jar/custom_spider.jar differ diff --git a/jar/custom_spider.jar.md5 b/jar/custom_spider.jar.md5 index 9e1466f..bd4f81c 100644 --- a/jar/custom_spider.jar.md5 +++ b/jar/custom_spider.jar.md5 @@ -1 +1 @@ -62ec6f78832485cdccc43870fed1b860 +68e7568f6083fda151a310919aab9acf