Update activity function
This commit is contained in:
parent
46ac911410
commit
37b069208f
|
|
@ -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 com.github.catvod.crawler.SpiderDebug;
|
||||
import com.github.catvod.utils.Notify;
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
import com.github.catvod.crawler.SpiderDebug;
|
||||
|
||||
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();
|
||||
}
|
||||
}
|
||||
|
||||
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);
|
||||
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);
|
||||
}
|
||||
}
|
||||
return null;
|
||||
|
||||
@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);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onActivitySaveInstanceState(@NonNull Activity activity, @NonNull Bundle outState) {
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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…
Reference in New Issue