Сделайте снимок экрана Android и сохраните его на SD-карту.

Здесь на SO есть несколько вопросов о захвате скриншотов приложения для Android. Однако я не нашел надежного решения о том, как программно сделать снимок экрана с помощью Android SDK или любого другого метода.

Поэтому я подумал, что задам этот вопрос еще раз в надежде, что смогу найти хорошее решение, надеюсь, такое, которое позволит захватывать изображения в полный рост, которые я могу сохранить на SD-карту или что-то подобное.

Я ценю любую помощь


person Kay    schedule 08.05.2011    source источник
comment
У нас был похожий вопрос, но я нашел ответ. Вот решение: stackoverflow.com/questions/5939987/< /а>   -  person Peanut    schedule 13.05.2011


Ответы (4)


Это невозможно непосредственно на устройстве/эмуляторе, если оно не рутировано.

честно говоря, все, что мне нужно, это эмулятор, так как это для тестирования приложения на ПК

Похоже, это работа для monkeyrunner.

person CommonsWare    schedule 08.05.2011
comment
Из любопытства, знаете ли вы, есть ли причина, по которой Android не может этого сделать? Это политическое решение разработчиков Android или это ограничение где-то в самом Android? - person Squonk; 09.05.2011
comment
@MisterSquonk: это политическое решение не иметь для него API, насколько я знаю. Почему у них нет своего встроенного в ОС приложения для скриншотов, я не могу сказать. - person CommonsWare; 09.05.2011
comment
Спасибо. Не то чтобы лично мне это пригодилось — мне просто любопытно, что это не стандартная функция. - person Squonk; 09.05.2011
comment
Как объясняется в документе MonkeyRunner, легко предположить, что MonkeyRunner — это просто средство запуска для инструмента Monkey, и в этом случае кто-то (также известный как я) может вообще пропустить документ MonkeyRunner. Я предлагаю добавить НЕ относящийся к Обезьяне в запись в оглавлении инструментов. - person cdhabecker; 09.08.2011

Инструмент monkeyrunner может сделать эту работу за вас с помощью небольшой команды adb, [скрипт python]

from com.android.monkeyrunner import MonkeyRunner, MonkeyDevice
//waits for connection
device = MonkeyRunner.waitForConnection()
//take the current snapshot
device.takeSnapshot()
//stores the current snapshot in current dir in pc
device.writeToFile('current.png')\
//copy it to the sd card of device
os.subprocess.call('adb push current.png /sdcard/android/com.test.myapp/current.png')

Примечание: назовите этот файл сценария jython
monkeyrunner.bat ‹имя файла›

person Vinayak Kolagi    schedule 02.08.2011

Скорее всего, вам не понравится этот ответ, но единственные, которые я видел, связаны с использованием собственного кода или выполнением собственных команд.

Редактировать: я не видел этого раньше. Вы пробовали?: http://code.google.com/p/android-screenshot-library/

Edit2: проверил эту библиотеку, и это тоже плохое решение. Требуется запуск службы с ПК. Так что мой первоначальный ответ остается в силе :)

Edit3: вы должны иметь возможность сохранить представление как изображение, выполнив что-то подобное. Возможно, вам придется немного изменить его, чтобы получить ширину/высоту представления. (Я раздуваю макеты и указываю ширину/высоту при макете кода)

View content = getView();
Bitmap bitmap = Bitmap.createBitmap(width, height, Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);
File file = new File(pathAndFilename);              
file.createNewFile();
FileOutputStream ostream = new FileOutputStream(file);
bitmap.compress(CompressFormat.PNG, 100, ostream);
ostream.close();
person Kaj    schedule 08.05.2011
comment
Честно говоря, все, что мне нужно, это эмулятор, так как это приложение для тестирования на ПК. Я просматривал эту библиотеку раньше и не мог найти способ превратить ее из фоновой службы в класс. Если я использую его как службу, мне нужно запускать его каждый раз после перезагрузки, что для меня не идеально. - person Kay; 08.05.2011
comment
Вы говорите, что у вас есть представление, которое вы создали, и вы хотите сделать снимок экрана этого представления? Это не так сложно. - person Kaj; 08.05.2011
comment
это именно то, что я говорю. Было бы здорово, если бы я мог также получить полную длину представления (его можно прокручивать), но это может быть невозможно. - person Kay; 08.05.2011
comment
Смотрите мой отредактированный ответ. Я разместил некоторый код, который вы должны иметь возможность использовать. - person Kaj; 09.05.2011
comment
если только из эмулятора, почему бы просто не использовать кнопку скриншота в eclipse (перспектива устройств) - person jkhouw1; 09.05.2011

Вы можете посмотреть на http://codaset.com/jens-riboe/droidatscreen/wiki (с записью на http://blog.ribomation.com/2010/01/droidscreen/): это библиотека Java, которая использует adb для захвата снимков экрана. Я смог (с большим трудом) изменить исходный код, чтобы позволить мне автоматически делать серию снимков экрана с синхронизацией по времени (которые я использую для демонстрационных видеороликов).

Вы можете увидеть структуру класса по адресу http://pastebin.com/hX5rQsSR.

РЕДАКТИРОВАТЬ: вы бы вызвали его (после объединения всех требований) следующим образом:

java -cp DroidScreen.jar --adb "" --device "" --prefix "" --interval

person Femi    schedule 09.05.2011