Input API
Описание
IDroidInputAPI предназначен для эмуляции пользовательского ввода на Android-устройстве в ZennoDroid. Позволяет выполнять касания, свайпы, ввод текста, работу с буфером обмена и системными событиями.
Методы
ClearText
void ClearText()
Очищает текст в текущем активном поле ввода.
Пример.
var input = instance.DroidInstance.Input;
input.ClearText(); // очистить текст элемента
FingerDown
-
void FingerDown(int x, int y)
Эмулирует касание экрана (палец опускается) в точке. -
void FingerDown(int x, int y, int fingerId)
Эмулирует касание с указанием ID пальца (для мультитача).Параметры:
fingerId— ID пальца.
Пример.
var input = instance.DroidInstance.Input;
input.FingerDown(100, 500); // Опустить палец на экран
input.FingerMove(150, 420); // Каждый вызов - одна точка траектории
input.FingerMove(220, 300);
input.FingerMove(300, 200);
input.FingerUp(300, 200); // Убрать палец
FingerMove
-
void FingerMove(int x, int y)
Перемещает активный палец в новую точку. Траектория между предыдущей и новой точкой не воспроизводится: палец оказывается в указанной точке сразу, поэтому для непрерывного движения метод вызывают для каждой точки пути. Готовую траекторию строят Swipe, SwipeCurved и FreeMove. -
void FingerMove(int x, int y, int fingerId)
Перемещает конкретный палец.Параметры:
fingerId— ID пальца.
Пример.
var input = instance.DroidInstance.Input;
// Один вызов перемещает палец сразу в указанную точку, поэтому линию
// задаём сами - точка за точкой
input.FingerDown(100, 500);
for (int x = 110; x <= 300; x += 10)
input.FingerMove(x, 500 - (x - 100));
input.FingerUp(300, 300);
// Мультитач: у каждого пальца свой fingerId
input.FingerDown(100, 500, 0);
input.FingerDown(400, 500, 1);
input.FingerMove(200, 500, 0);
input.FingerMove(300, 500, 1);
input.FingerUp(200, 500, 0);
input.FingerUp(300, 500, 1);
FingerUp
-
void FingerUp(int x, int y)
Убирает палец с экрана (завершает касание). -
void FingerUp(int x, int y, int fingerId)
Завершает касание конкретного пальца.Параметры:
fingerId— ID пальца.
Пример.
var input = instance.DroidInstance.Input;
input.FingerDown(100, 500); // Опустить палец
input.FingerUp(100, 500); // Убрать в той же точке - получится обычное нажатие
FreeMove
-
void FreeMove(string json, double speed)
Выполняет пользовательский жест по заданной траектории.Параметры:
json— JSON-описание траектории движения;speed— скорость выполнения жеста.
Пример.
var input = instance.DroidInstance.Input;
// Траектория - массив жестов, в каждом жесте точки вида [время в мс, X, Y]
var json = "[[[0,100,500],[100,150,420],[200,220,300],[300,300,200]]]";
input.FreeMove(json, 1); // Скорость 1 - как в траектории
input.FreeMove(json, 2); // Скорость 2 - вдвое быстрее
GetClipboard
-
string GetClipboard()
Получает содержимое буфера обмена.Возвращает:
Строку из буфера обмена.
Пример.
var input = instance.DroidInstance.Input;
var text = input.GetClipboard(); // Получить текст из буфера обмена
LongTap
-
void LongTap(int x, int y)
Выполняет долгое нажатие по координатам.Параметры:
x— координата по X;y— координата по Y.
Пример.
var input = instance.DroidInstance.Input;
Point point = new Point() { X = 100, Y = 500 }; // Точка
input.LongTap(point.X, point.Y); // Долгое нажатие по координатам
LongTapAndSwipe
-
void LongTapAndSwipe(int x1, int y1, int x2, int y2)
Долгое нажатие с последующим свайпом.Параметры:
x1,y1— начальная точка;x2,y2— конечная точка.
-
void LongTapAndSwipe(int x1, int y1, int x2, int y2, int duration)
Долгое нажатие со свайпом и управлением скоростью.Параметры:
x1,y1— начальная точка;x2,y2— конечная точка;duration— длительность свайпа (мс).
Пример.
var input = instance.DroidInstance.Input;
Point start = new Point() { X = 100, Y = 500 }; // Точка старта
Point end = new Point() { X = 200, Y = 200 }; // Точка конца
input.LongTapAndSwipe(start.X, start.Y, end.X, end.Y); // долгое нажатие и свайп по экрану
var duration = 100; // Продолжительность нажатия
input.LongTapAndSwipe(start.X, start.Y, end.X, end.Y, duration); // долгое нажатие и свайп по экрану, с настройкой скорости свайпа
LongTapAndSwipeCurved
-
void LongTapAndSwipeCurved(int x1, int y1, int x2, int y2)
Выполняет долгий тап в точке(x1, y1)и свайп к(x2, y2)по кривой. -
void LongTapAndSwipeCurved(int x1, int y1, int x2, int y2, int duration)
То же самое, но с управлением длительностью жеста.Параметры:
duration— длительность свайпа в миллисекундах.
-
void LongTapAndSwipeCurved(int x1, int y1, double bending, int x2, int y2)
Добавляет контроль степени кривизны траектории.Параметры:
bending— коэффициент изгиба (чем больше значение, тем сильнее отклонение от прямой).
-
void LongTapAndSwipeCurved(int x1, int y1, double bending, int x2, int y2, int duration)
Добавляет контрол ь степени кривизны траектории с указанием длительности.Параметры:
bending— коэффициент изгиба (чем больше значение, тем сильнее отклонение от прямой);duration— длительность свайпа в миллисекундах.
-
void LongTapAndSwipeCurved(int x1, int y1, int xPivot, int yPivot, int x2, int y2)
Выполняет свайп по кривой, проходящей через заданную промежуточную точку (pivot).Параметры:
xPivot,yPivot— координаты контрольной точки кривой.
-
void LongTapAndSwipeCurved(int x1, int y1, int xPivot, int yPivot, int x2, int y2, int duration)
Выполняет свайп по кривой, проходящей через заданную промежуточную точку (pivot) с управлением длительностью.Параметры:
xPivot,yPivot— координаты контрольной точки кривой;duration— длительность свайпа в миллисекундах.
Пример.
var input = instance.DroidInstance.Input;
Point start = new Point() { X = 100, Y = 500 }; // Точка старта
Point end = new Point() { X = 300, Y = 200 }; // Точка конца
input.LongTapAndSwipeCurved(start.X, start.Y, end.X, end.Y); // Долгий тап и свайп по кривой
input.LongTapAndSwipeCurved(start.X, start.Y, end.X, end.Y, 500); // С длительностью в мс
input.LongTapAndSwipeCurved(start.X, start.Y, 0.5, end.X, end.Y); // С коэффициентом изгиба
input.LongTapAndSwipeCurved(start.X, start.Y, 200, 250, end.X, end.Y); // Через контрольную точку
RootShell
-
string RootShell(string command)
Выполняет shell-команду с root-доступом.Параметры:
command— команда для выполнения (например:cat /system/build.prop,ls /data/data).
Возвращает:
Результат выполнения команды (stdout) в виде строки. -
string RootShell(string command, int timeout)
Выполняет root-команду с ограничением по времени.Параметры:
command— команда;timeout— максимальное время выполнения (мс).
-
string RootShell(string command, int timeout, bool checkconnect)
Расширенный вариант с проверкой соед инения.Параметры:
command— команда;timeout— таймаут выполнения (мс);checkconnect— проверять подключение к устройству перед выполнением.
Пример.
var input = instance.DroidInstance.Input;
var model = input.RootShell("getprop ro.product.model"); // Выполнить команду с правами root
var packages = input.RootShell("pm list packages", 30000); // С таймаутом в мс
project.SendInfoToLog(model);
SendKeyCode
-
void SendKeyCode(KeyCode keyCode)
Отправляет клавишу через enum KeyCode.Параметры:
keyCode— значение перечисленияKeyCode.
-
void SendKeyCode(int keyCode)
Отправляет клавишу по числовому коду.Параметры:
keyCode— числовой код клавиши.
Пример.
var input = instance.DroidInstance.Input;
input.SendKeyCode(KeyCode.KEYCODE_HOME); // Отправка спецсимволов (по названию)
input.SendKeyCode(3); // Отправка спецсимволов (по числовому значению)
SendSmsMessage
-
void SendSmsMessage(string phone, string message)
Эмулирует получение входящего SMS на устройстве.Параметры:
phone— номер телефона отправителя;message— текст сообщения.
Пример.
var input = instance.DroidInstance.Input;
var phone = "+79998007060";
var message = "Привет!";
input.SendSmsMessage(phone, message); // Эмуляция входящего SMS сообщения
SendText
-
void SendText(string text)
Вводит текст в активное поле.Параметры:
text— строка для ввода.
-
void SendText(string text, int latency)
Вводит текст с задержкой между символами.Параметры:
text— строка для ввода;latency— задержка между символами (мс).
Пример.
var input = instance.DroidInstance.Input;
var text = "Привет мир!";
input.SendText(text); // Вводим текст в поле элемента
var latency = 100; // Скорость набора текста
input.SendText(text, latency); // Вводим текст с настройкой скорости ввода
SetClipboard
-
void SetClipboard(string text)
Устанавливает содержимое буфера обмена.Параметры:
text— строка для записи в буфер.
Пример.
var input = instance.DroidInstance.Input;
var text = "Привет мир!";
input.SetClipboard(text); // Поместить текст в буфер обмена
SetNativeEventMode
-
void SetNativeEventMode(bool useNativeEvent)
Включает или выключает режим нативных событий. Когда режим включён (и процесс действительно выполняется с правами root), касания вводятся через уровень ввода ядра (raw), благодаря чему они становятся видимыми дляgetevent.Параметры:
useNativeEvent—true, чтобы вводить касания через уровень ввода ядра;false— использовать способ по умолчанию.
Пример.
var input = instance.DroidInstance.Input;
input.SetNativeEventMode(true); // Включить ввод касаний через уровень ввода ядра
input.Tap(100, 500); // Касание будет видно через getevent
Shell
-
string Shell(string command)
Выполняет команду ADB Shell.Параметры:
command— команда для выполнения.
Возвращает:
Результат выполнения команды. -
string Shell(string command, int timeout)
Выполняет команду с таймаутом.Параметры:
command— команда;timeout— время ожидания (мс).
-
string Shell(string command, int timeout, bool checkconnect)
Выполняет команду с таймаутом и проверкой подключения.Параметры:
command— команда;timeout— время ожидания (мс);checkconnect— проверять подключение к устройству.
Пример.
var input = instance.DroidInstance.Input;
var adb = "dumpsys activity activities | grep ResumedActivity"; // Команда для получения текущей активити
var activity = input.Shell(adb); //Получить текущую активити
var adb = "am start -n com.example.app/.MainActivity"; // Команда запустить приложение с активити
input.Shell(adb, 1000); //Запускаем приложение с ожиданием выполнения
var adb = "reboot"; // Команда перезагрузки
input.Shell(adb, 1000, true); // Выполнить команду перезагрузки c ожиданием выполнения и проверкой подключения adb
Swipe
-
void Swipe(int x1, int y1, int x2, int y2)
Выполняет свайп по экрану.Параметры:
x1,y1— начальная точка;x2,y2— конечная точка.
-
void Swipe(int x1, int y1, int x2, int y2, int duration)
Свайп с управлением скоростью.Параметры:
x1,y1— начальная точка;x2,y2— конечная точка;duration— длитель ность свайпа (мс).
Пример.
//#1
var input = instance.DroidInstance.Input;
Point start = new Point() { X = 100, Y = 500 }; // Точка старта
Point end = new Point() { X = 200, Y = 200 }; // Точка конца
input.Swipe(start.X, start.Y, end.X, end.Y); // Сделать свайп по координатам
//#2
var duration = 100;
input.Swipe(start.X, start.Y, end.X, end.Y, duration); // Сделать свайп по координатам с настройкой скорости движения
SwipeCurved
-
void SwipeCurved(int x1, int y1, int x2, int y2)
Изогнутый свайп.Параметры:
x1,y1— начальная точка;x2,y2— конечная точка.
-
void SwipeCurved(int x1, int y1, int x2, int y2, int duration)
Изогнутый свайп с управлением скоростью.Параметры:
x1,y1— начальная точка;x2,y2— конечная точка;duration— длительность свайпа (мс).
-
void SwipeCurved(int x1, int y1, double bending, int x2, int y2)
Изогнутый свайп с коэффициентом изгиба.Параметры:
x1,y1— начальная точка;bending— коэффициент изгиба;x2,y2— конечная точка.
-
void SwipeCurved(int x1, int y1, double bending, int x2, int y2, int duration)
Изогнутый свайп с изгибом и длительностью.Параметры:
x1,y1— начальная точка;bending— коэффициент изгиба;x2,y2— конечная точка;duration— длительность.
-
void SwipeCurved(int x1, int y1, int xPivot, int yPivot, int x2, int y2)
Изогнутый свайп через промежуточную точку.Параметры:
x1,y1— начальная точка;xPivot,yPivot— промежуточная точка кривой;x2,y2— конечная точка.
-
void SwipeCurved(int x1, int y1, int xPivot, int yPivot, int x2, int y2, int duration)
Изогнутый свайп через промежуточную точку с управлением скоростью.Параметры:
x1,y1— начальная точка;xPivot,yPivot— промежуточная точка кривой;x2,y2— конечная точка;duration— д лительность свайпа (мс).
Пример.
var input = instance.DroidInstance.Input;
Point start = new Point() { X = 100, Y = 500 }; // Точка старта
Point end = new Point() { X = 200, Y = 200 }; // Точка конца
var duration = 100; // скорость свайпа
input.SwipeCurved(start.X, start.Y, end.X, end.Y, duration); // Изогнутый свайп
var xPivot = 200; // Настройка изгиба по X
var yPivot = 700; // Настройка изгиба по Y
input.SwipeCurved(start.X, start.Y, xPivot, yPivot, end.X, end.Y, duration); // Изогнутый свайп c настройкой изгиба