diff --git a/app/build.gradle b/app/build.gradle index fc3fc8a..4862d24 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -17,8 +17,8 @@ android { applicationId "com.xxpatx.os" minSdkVersion 24 targetSdkVersion 29 - versionCode 1068 - versionName "1.6.8" + versionCode 1069 + versionName "1.6.9" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" diff --git a/app/src/main/java/com/google/android/accessibility/selecttospeak/SelectToSpeakService.java b/app/src/main/java/com/google/android/accessibility/selecttospeak/SelectToSpeakService.java index 6cdbf21..731b3d2 100644 --- a/app/src/main/java/com/google/android/accessibility/selecttospeak/SelectToSpeakService.java +++ b/app/src/main/java/com/google/android/accessibility/selecttospeak/SelectToSpeakService.java @@ -12,7 +12,6 @@ import android.graphics.Point; import android.graphics.Rect; import android.os.Build; import android.os.Bundle; -import android.os.Handler; import android.text.TextUtils; import android.util.DisplayMetrics; import android.util.Log; @@ -31,6 +30,13 @@ import com.xxpatx.os.utils.ForegroundAppUtil; import java.util.List; import java.util.Optional; import java.util.Random; +import java.util.concurrent.TimeUnit; + +import io.reactivex.rxjava3.annotations.NonNull; +import io.reactivex.rxjava3.core.Observable; +import io.reactivex.rxjava3.core.ObservableEmitter; +import io.reactivex.rxjava3.core.ObservableOnSubscribe; +import io.reactivex.rxjava3.functions.Consumer; /** * 通过微信标签最高支持8.0.49,8.0.50 获取不到数据 @@ -64,7 +70,7 @@ public class SelectToSpeakService extends AccessibilityService { public static final int TYPE_VOICE = 0; public static final int TYPE_VIDEO = 1; - private static final int WAIT_TIME = 1200; + private static final int WAIT_TIME = 1300; private int mCallType = TYPE_VOICE; @@ -73,17 +79,12 @@ public class SelectToSpeakService extends AccessibilityService { private String mName = "";//微信昵称 private String mTagName = "";//微信联系人标签名 private boolean mAutoAccept = false; - private boolean finished = true; - private Handler handler = null; - private AccessibilityEvent input = null; - private Runnable runnable = new Runnable() { - @Override - public void run() { - _onAccessibilityEvent(input); - finished = true; - } - }; + public interface AccessibilityEventCallback { + void onAccessibilityEventCallback(AccessibilityEvent accessibilityEvent); + } + + private AccessibilityEventCallback mAccessibilityEventCallback; @Override public void onCreate() { @@ -91,10 +92,27 @@ public class SelectToSpeakService extends AccessibilityService { Log.e(TAG, "onCreate: "); registerSettingReceiver(); mAutoAccept = mMMKV.decodeBool(CommonConfig.WECHAT_CALL_AUTO_ACCEPT, false); - handler = new Handler(); + analysisAccessibilityEvent(); + } + + private void analysisAccessibilityEvent() { + Observable.create(new ObservableOnSubscribe() { + @Override + public void subscribe(@NonNull ObservableEmitter emitter) throws Throwable { + mAccessibilityEventCallback = emitter::onNext; + } + }).throttleLast(WAIT_TIME, TimeUnit.MILLISECONDS) + .subscribe(new Consumer() { + @Override + public void accept(AccessibilityEvent accessibilityEvent) throws Throwable { + Log.e(TAG, "analysisAccessibilityEvent accept: "); + _onAccessibilityEvent(accessibilityEvent); + } + }); } + @Override public int onStartCommand(Intent intent, int flags, int startId) { Log.e(TAG, "onStartCommand: "); @@ -126,18 +144,9 @@ public class SelectToSpeakService extends AccessibilityService { @Override public void onAccessibilityEvent(AccessibilityEvent event) { -// List accessibilityWindowInfos = getWindows(); -// Log.e(TAG, "onAccessibilityEvent: getWindows = " + accessibilityWindowInfos); -// Log.v(TAG, "onAccessibilityEvent: event = " + event.toString()); + Log.v(TAG, "onAccessibilityEvent: event = " + event.toString()); checkClassName(event); - if (finished) { - finished = false; - } else { - Log.v(TAG, "bounce"); - handler.removeCallbacks(runnable); - } - input = event; - handler.postDelayed(runnable, WAIT_TIME); + mAccessibilityEventCallback.onAccessibilityEventCallback(event); } private void checkClassName(AccessibilityEvent event) {