#android #screenshot
#Android #снимок экрана
Вопрос:
Я разрабатываю программу, которая позволяет пользователю отображать на экране своего компьютера текущий экран своего телефона Android (подключенного к компьютеру через USB) с помощью библиотеки ddmlib. Мне нужно знать, находится ли телефон в альбомном или портретном режиме.
Есть ли способ проверить это значение из программы, запущенной на компьютере?
Ответ №1:
Вот моя функция для получения этого, но она довольно медленная. На данный момент я ищу более быстрое решение.
private int getLandscape() {
int result = 0;
try {
String[] commands = new String[] { "adb", "-s", actualSerial,
"shell", "dumpsys input | grep 'SurfaceOrientation'" };
Runtime rt = Runtime.getRuntime();
Process pr;
pr = rt.exec(commands);
BufferedReader input = new BufferedReader(new InputStreamReader(
pr.getInputStream()));
String line = "";
line = input.readLine();
if (line != null) {
String[] lines = line.split(":");
result = Integer.parseInt(lines[1].trim());
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return resu<
}
Самая медленная часть — чтение из BufferedReader.
Ответ №2:
class AReceiver implements IShellOutputReceiver {
int x;
int y;
@Override
public void addOutput(byte[] arg0, int arg1, int arg2) {
String xS = new String(arg0);
xS = xS.substring(26).trim();
String[] screenRes = xS.split("x");
x = Integer.parseInt(screenRes[0]);
y = Integer.parseInt(screenRes[1]);
}
@Override
public void flush() {
}
@Override
public boolean isCancelled() {
return false;
}
}
AReceiver receiver = new AReceiver();
try {
dev.executeShellCommand("dumpsys window | grep "mOverscanScreen"", receiver);
res[0] = receiver.x;
res[1] = receiver.y;
} catch (TimeoutException | AdbCommandRejectedException | ShellCommandUnresponsiveException | IOException e) {
e.printStackTrace();
}
Решение Ffast с использованием executeShellCommand
. На моем компьютере предыдущее решение занимает около 400ms
времени, чтобы получить ответ, и это решение становится ландшафтным примерно 50ms
🙂 Удачи с вашим приложением!