From 37a6d5c9eaf7460724eb39d128c15d040fd56d60 Mon Sep 17 00:00:00 2001 From: gzlinz2 <107169210+gzlinz2@users.noreply.github.com> Date: Tue, 11 Oct 2022 06:09:19 +0800 Subject: [PATCH] Add files via upload --- .../java/com/github/catvod/spider/Init.java | 75 +++++++++++++++++++ 1 file changed, 75 insertions(+) create mode 100644 app/src/main/java/com/github/catvod/spider/Init.java diff --git a/app/src/main/java/com/github/catvod/spider/Init.java b/app/src/main/java/com/github/catvod/spider/Init.java new file mode 100644 index 0000000..f9f79ca --- /dev/null +++ b/app/src/main/java/com/github/catvod/spider/Init.java @@ -0,0 +1,75 @@ +package com.github.catvod.spider; + +import android.app.Activity; +import android.app.Application; +import android.content.Context; +import android.os.Handler; +import android.os.Looper; +import android.widget.Toast; + +import com.github.catvod.crawler.SpiderDebug; +import com.github.catvod.utils.Trans; + +import java.lang.reflect.Field; +import java.util.Map; + +public class Init { + + private final Handler handler; + private Application app; + + private static class Loader { + static volatile Init INSTANCE = new Init(); + } + + public static Init get() { + return Loader.INSTANCE; + } + + public Init() { + this.handler = new Handler(Looper.getMainLooper()); + } + + public static Application context() { + return get().app; + } + + public static void init(Context context) { + SpiderDebug.log("自定義爬蟲代碼載入成功!"); + get().app = ((Application) context); + Trans.init(); + } + + public static void run(Runnable runnable) { + get().handler.post(runnable); + } + + public static void show(String msg) { + get().handler.post(() -> Toast.makeText(context(), msg, Toast.LENGTH_SHORT).show()); + } + + public static Activity getActivity() { + try { + 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 activityRecord : activities.values()) { + Class activityRecordClass = activityRecord.getClass(); + Field pausedField = activityRecordClass.getDeclaredField("paused"); + pausedField.setAccessible(true); + if (!pausedField.getBoolean(activityRecord)) { + Field activityField = activityRecordClass.getDeclaredField("activity"); + activityField.setAccessible(true); + Activity activity = (Activity) activityField.get(activityRecord); + SpiderDebug.log(activity.getComponentName().getClassName()); + return activity; + } + } + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } +}