Мой сервис не может инициировать касание экрана. sendGesture из AccessibilityService всегда возвращает false. Как решить эту проблему?
SDK API 31
Мой сервис:
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
SendGesture всегда возвращает false ⇐ Android
Форум для тех, кто программирует под Android
1710846211
Anonymous
Мой сервис не может инициировать касание экрана. sendGesture из AccessibilityService всегда возвращает false. Как решить эту проблему?
SDK API 31
Мой сервис:
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:
Подробнее здесь: [url]https://stackoverflow.com/questions/78185443/dispatchgesture-always-returns-false[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия