diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index f3809e14..b799ab44 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -122,6 +122,8 @@
+
+
onResult(resultCode, data));
+ }
}
abstract class AbstractScreenCaptureRequester implements ScreenCaptureRequester {
@@ -75,7 +85,5 @@ public interface ScreenCaptureRequester {
if (mCallback != null)
mCallback.onRequestResult(Activity.RESULT_CANCELED, null);
}
-
}
-
}
diff --git a/app/src/main/java/org/autojs/autojs/core/image/capture/ScreenCaptureRequesterImpl.java b/app/src/main/java/org/autojs/autojs/core/image/capture/ScreenCaptureRequesterImpl.java
index 26db762c..0e11c98e 100644
--- a/app/src/main/java/org/autojs/autojs/core/image/capture/ScreenCaptureRequesterImpl.java
+++ b/app/src/main/java/org/autojs/autojs/core/image/capture/ScreenCaptureRequesterImpl.java
@@ -4,7 +4,6 @@ import android.app.Activity;
import org.autojs.autojs.AbstractAutoJs;
import org.autojs.autojs.app.OnActivityResultDelegate;
-import org.autojs.autojs.util.ForegroundServiceUtils;
public class ScreenCaptureRequesterImpl extends ScreenCaptureRequester.AbstractScreenCaptureRequester {
@@ -25,8 +24,6 @@ public class ScreenCaptureRequesterImpl extends ScreenCaptureRequester.AbstractS
@Override
public void request() {
- ForegroundServiceUtils.requestIfNeeded(mAutoJs.getApplicationContext(), ScreenCapturerForegroundService.class);
-
Activity activity = mAutoJs.getAppUtils().getCurrentActivity();
if (activity instanceof OnActivityResultDelegate.DelegateHost) {
diff --git a/app/src/main/java/org/autojs/autojs/core/image/capture/ScreenCapturerForegroundService.java b/app/src/main/java/org/autojs/autojs/core/image/capture/ScreenCapturerForegroundService.java
index 3c93cfd5..c6a08f85 100644
--- a/app/src/main/java/org/autojs/autojs/core/image/capture/ScreenCapturerForegroundService.java
+++ b/app/src/main/java/org/autojs/autojs/core/image/capture/ScreenCapturerForegroundService.java
@@ -4,6 +4,7 @@ import android.app.Service;
import android.content.Context;
import android.content.Intent;
import android.content.pm.ServiceInfo;
+import android.os.Binder;
import android.os.Build;
import android.os.IBinder;
@@ -38,7 +39,7 @@ public class ScreenCapturerForegroundService extends Service {
@Nullable
@Override
public IBinder onBind(Intent intent) {
- return null;
+ return new Binder();
}
private void startForeground() {
diff --git a/app/src/main/java/org/autojs/autojs/external/foreground/MainActivityForegroundService.kt b/app/src/main/java/org/autojs/autojs/external/foreground/MainActivityForegroundService.kt
index 73df4723..c407446c 100644
--- a/app/src/main/java/org/autojs/autojs/external/foreground/MainActivityForegroundService.kt
+++ b/app/src/main/java/org/autojs/autojs/external/foreground/MainActivityForegroundService.kt
@@ -33,7 +33,7 @@ class MainActivityForegroundService : Service() {
.create()
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE) {
- ForegroundServiceUtils.startForeground(foregroundServiceCreator, ServiceInfo.FOREGROUND_SERVICE_TYPE_SYSTEM_EXEMPTED)
+ ForegroundServiceUtils.startForeground(foregroundServiceCreator, ServiceInfo.FOREGROUND_SERVICE_TYPE_SPECIAL_USE)
} else {
ForegroundServiceUtils.startForeground(foregroundServiceCreator)
}
diff --git a/app/src/main/java/org/autojs/autojs/util/ForegroundServiceUtils.java b/app/src/main/java/org/autojs/autojs/util/ForegroundServiceUtils.java
index 114fd20d..ab5e011d 100644
--- a/app/src/main/java/org/autojs/autojs/util/ForegroundServiceUtils.java
+++ b/app/src/main/java/org/autojs/autojs/util/ForegroundServiceUtils.java
@@ -6,10 +6,12 @@ import android.app.NotificationChannel;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.app.Service;
+import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
-import android.content.pm.ServiceInfo;
+import android.content.ServiceConnection;
import android.os.Build;
+import android.os.IBinder;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
@@ -36,6 +38,23 @@ public class ForegroundServiceUtils {
}
}
+ public static void requestReadyIfNeeded(Context context, Class> className, Runnable runnable) {
+ if (isRunning(context, className)) {
+ runnable.run();
+ } else {
+ context.bindService(getService(context, className), new ServiceConnection() {
+ @Override
+ public void onServiceConnected(ComponentName name, IBinder service) {
+ runnable.run();
+ }
+
+ @Override
+ public void onServiceDisconnected(ComponentName name) {
+ }
+ }, Context.BIND_AUTO_CREATE);
+ }
+ }
+
public static boolean startService(Context context, Class> className) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
return context.startForegroundService(getService(context, className)) != null;