diff --git a/app/build.gradle b/app/build.gradle index e763215..78d5818 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -18,8 +18,8 @@ android { minSdkVersion 24 targetSdkVersion 29 - versionCode 220 - versionName "2.2.0" + versionCode 221 + versionName "2.2.1" 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 232a2e8..4dc9695 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,9 +30,17 @@ import com.vscool.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 获取不到数据 + * 8.0.54 可以获取 * 通过 {@link AccessibilityService#getWindows}和修改accessibility-service 配置能遍历屏幕元素 */ public class SelectToSpeakService extends AccessibilityService { @@ -63,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; @@ -72,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() { @@ -90,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: "); @@ -127,14 +146,7 @@ public class SelectToSpeakService extends AccessibilityService { public void onAccessibilityEvent(AccessibilityEvent event) { 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) { @@ -421,8 +433,7 @@ public class SelectToSpeakService extends AccessibilityService { clickNode(nodeInfo); mCurrentStep = nextStep; } else { - Toaster.show("没有找到控件"); - mCurrentStep = Step.WAITING; + Toaster.show("没有找到搜索按钮"); } } diff --git a/app/src/main/java/com/vscool/os/activity/setting/SettingActivity.java b/app/src/main/java/com/vscool/os/activity/setting/SettingActivity.java index 5c4e704..d889e69 100644 --- a/app/src/main/java/com/vscool/os/activity/setting/SettingActivity.java +++ b/app/src/main/java/com/vscool/os/activity/setting/SettingActivity.java @@ -85,7 +85,12 @@ public class SettingActivity extends BaseMvvmActivity