Мой сервис не может инициировать касание экрана. sendGesture из AccessibilityService всегда возвращает false. Как решить эту проблему?
Мой сервис:
public class FloatingButton extends AccessibilityService {
private WindowManager windowManager;
private ImageView shotButton;
private int[2] passMark = {100, 100};
private int[2] shotMark = {200, 200};
@Override
public void onInterrupt() {}
@Override
public void onAccessibilityEvent(AccessibilityEvent event) {}
@Override
public void onCreate() {
super.onCreate();
shotButton = new ImageView(this);
shotButton.setImageResource(R.drawable.activate);
windowManager = (WindowManager)getSystemService(WINDOW_SERVICE);
final LayoutParams shotButtonParams = getLayoutParams();
shotButtonParams.x = 0;
shotButtonParams.y = 100;
windowManager.addView(shotButton, shotButtonParams);
try {
OnTouchListener shotButtonOnTouchListener = getShotButtonOnTouchListener(shotButtonParams);
OnClickListener shotButtonOnClickListener = getShotButtonOnClickListener();
shotButton.setOnClickListener(shotButtonOnClickListener);
shotButton.setOnTouchListener(shotButtonOnTouchListener);
} catch (Exception exception) {
Log.e("SuperShot", exception.getMessage());
}
}
private LayoutParams getLayoutParams() {
final LayoutParams layoutParams = new WindowManager.LayoutParams(
LayoutParams.WRAP_CONTENT,
LayoutParams.WRAP_CONTENT,
LayoutParams.TYPE_APPLICATION_OVERLAY,
LayoutParams.FLAG_NOT_FOCUSABLE,
PixelFormat.TRANSLUCENT
);
layoutParams.gravity = Gravity.TOP | Gravity.LEFT;
return layoutParams;
}
private OnClickListener getShotButtonOnClickListener() {
return new OnClickListener() {
@Override
public void onClick(View view) {
Log.d("SuperShot", "Coordinate pass: " + String.valueOf(passMark[0]) + ", " + String.valueOf(passMark[1]));
Log.d("SuperShot", "Coordinate shot: " + String.valueOf(shotMark[0]) + ", " + String.valueOf(shotMark[1]));
click(passMark[0], passMark[1]);
}
};
}
private void click(int x, int y) {
Path path = new Path();
path.moveTo(x, y);
StrokeDescription clickStroke = new StrokeDescription(path, 0, 10);
Builder clickBuilder = new Builder();
clickBuilder.addStroke(clickStroke);
GestureDescription gesture = clickBuilder.build();
boolean result = this.dispatchGesture(gesture, null, null);
Log.d("SuperShot", String.valueOf(result));
}
}
В журналах метода click указано значение false, что означает, что sendGesture не смог завершить клик. Как можно решить эту проблему и с чем она может быть связана?
Manifest.xml:
config_accessibility_service.xml:
Подробнее здесь: https://stackoverflow.com/questions/781 ... urns-false