Android studio как сделать скриншот

Как программно сделать снимок экрана в Android?

Как снять снимок экрана с выбранной области экрана телефона не с помощью какой-либо программы, а из кода?

Вот код, который позволил сохранить мой скриншот на SD-карте и использоваться позже для любых ваших нужд:

Во-первых, вам нужно добавить правильное разрешение на сохранение файла:

И это код (работает в Activity):

Вот как вы можете открыть недавно созданное изображение:

Если вы хотите использовать это в виде фрагмента, используйте:

On функция takeScreenshot ()

Вызовите этот метод, передав во внешнюю большую часть ViewGroup, что вы хотите сделать снимок экрана:

Примечание: работает только для корневого телефона

Программно вы можете запустить adb shell /system/bin/screencap -p /sdcard/img.png как adb shell /system/bin/screencap -p /sdcard/img.png ниже

Затем прочитайте img.png как Bitmap и используйте по своему усмотрению.

EDIT: помилуй с downvotes. Это было в 2010 году, когда я ответил на вопрос.

Все программы, которые позволяют скриншоты работать только на корневых телефонах.

Ответ Mualig очень хороший, но у меня была та же проблема, что и Ewoks, я не получаю фона. Поэтому иногда бывает достаточно, и иногда я получаю черный текст на черном фоне (в зависимости от темы).

Это решение в значительной степени основано на коде Mualig и коде, который я нашел в Robotium. Я отбрасываю использование кэша рисования, вызывая непосредственно метод draw. До этого я попытаюсь извлечь фоновый рисунок из текущей активности, чтобы сделать его первым.

Для этого метода не требуется никакого разрешения root или большого кодирования .

В командной строке adb с помощью команды внизу вы можете сделать снимок экрана.

Эта команда не требует каких-либо прав на root, так же, как и для Java-кода приложения для Android.

Здесь мы использовали. KEYCODE_SYSRQ его значение равно 120 и используется для экрана запроса системы / печати.

Как сказал CJBS, выходное изображение будет сохранено в / sdcard / Pictures / Screenshots

В качестве ссылки один из способов захвата экрана (а не только активности вашего приложения) заключается в том, чтобы захватить фреймбуфер (устройство / dev / graphics / fb0). Для этого у вас должны быть либо права root, либо ваше приложение должно быть приложением с разрешениями подписи («Разрешение, предоставляемое системой только в том случае, если запрашивающее приложение подписано с тем же сертификатом, что и приложение, объявившее разрешение»), которое Очень маловероятно, если вы не составили свой собственный ПЗУ.

Каждый захват фреймбуфера из нескольких устройств, которые я тестировал, содержал ровно один снимок экрана. Люди сообщили, что он содержит больше, я думаю, это зависит от размера кадра / дисплея.

Я пытался читать фреймбуфер непрерывно, но, похоже, он возвращается для фиксированного количества прочитанных байтов. В моем случае это (3 410 432) байт, что достаточно для хранения кадра отображения 854 * 480 RGBA (3 279 360 байт). Да, фрейм в двоичном формате, выводимый из fb0, является RGBA на моем устройстве. Это, скорее всего, будет зависеть от устройства к устройству. Это будет важно для вас, чтобы расшифровать его =)

В моих разрешениях device / dev / graphics / fb0 так, что только root и пользователи из групповой графики могут читать fb0.

Графика – ограниченная группа, поэтому вы, вероятно, будете иметь доступ только к fb0 с помощью корневого телефона с помощью команды su.

Читайте также:  Драйвера для андроида для wifi

Приложения для Android имеют идентификатор пользователя (uid) = приложение _ ## и идентификатор группы (guid) = приложение _ ## .

В оболочке adb есть uid = shell и guid = shell , которая имеет гораздо больше разрешений, чем приложение. Фактически вы можете проверить эти разрешения на /system/permissions/platform.xml

Это означает, что вы сможете читать fb0 в оболочке adb без root, но вы не будете читать его в приложении без root.

Кроме того, предоставление разрешений READ_FRAME_BUFFER и / или ACCESS_SURFACE_FLINGER для AndroidManifest.xml ничего не сделает для обычного приложения, потому что они будут работать только для приложений подписи .

Также проверьте эту закрытую резьбу для более подробной информации.

Вы можете попробовать следующую библиотеку: http://code.google.com/p/android-screenshot-library/ Android Screenshot Library (ASL) позволяет программно снимать скриншоты с Android-устройств без необходимости иметь права доступа root. Вместо этого ASL использует собственный сервис, работающий в фоновом режиме, который запускается через Android Debug Bridge (ADB) один раз за загрузку устройства.

Изображения сохраняются во внешней папке хранилища.

Вы можете попытаться сделать что-то подобное,

Получение кеша растрового изображения из макета или представления, сделав что-то наподобие Сначала вы должны setDrawingCacheEnabled в макет (линейное расписание или релятивирование или представление)

Затем вы делаете все, что хотите, с растровым изображением. Либо превратить его в файл изображения, либо отправить urim растрового изображения в другое место.

ДОБАВИТЬ РАЗРЕШЕНИЕ

Для тех, кто хочет захватить GLSurfaceView, метод getDrawingCache или рисования в холст не будет работать.

Вы должны прочитать содержимое фреймбуфера OpenGL после рендеринга фрейма. Здесь есть хороший ответ

Основываясь на ответе @JustinMorris выше и @NiravDangi здесь https://stackoverflow.com/a/8504958/2232148, мы должны взять фон и передний план представления и собрать их следующим образом:

Параметр качества принимает константу Bitmap.Config, обычно либо Bitmap.Config.RGB_565 либо Bitmap.Config.ARGB_8888 .

Я создал простую библиотеку, которая берет скриншот из представления и либо дает вам объект Bitmap, либо сохраняет его прямо по любому пути

Если вы хотите сделать снимок экрана из fragment а затем выполните следующие действия:

Логика для снятия снимков экрана:

Для деятельности вы можете просто использовать View v1 = getWindow().getDecorView().getRootView(); Вместо mView

Наряду с захватом скриншота, если мы хотим воспроизвести тон также. Мы можем использовать следующий код

Просто расширяя ответ таралоки. Вы должны добавить следующие строки, чтобы заставить его работать. Я сделал статичное имя изображения. Убедитесь, что вы используете переменную timestamp taraloca, если вам нужно динамическое имя изображения.

И в файле AndroidManifest.xml следующие записи должны:

Если вы хотите захватить представление или макет, например RelativeLayout или LinearLayout и т. Д., Просто используйте код:

Теперь вы можете сохранить это растровое изображение на устройстве:

Источник

How to Take Screenshot of Android Application in Android Emulator and Real Device from Android Studio

We make applications and we need their screenshot to upload in stores and share to our friends and clients. When we are seeing application in real device, we can take screenshot from our mobile and tablet and still in some device may not available default screenshot feature. In this post I will show you how to take Android App Screenshot from Android Studio. And in android virtual device or emulator, screenshot can’t be taken directly. So, to take screenshot of the android app in android emulator and real device, android studio is here for us.

From android studio, screenshot of app in both real device and android emulator can be taken. Here I am going to explain idea of taking screenshot step by step.

Читайте также:  Обои для андроид корабли

How to Take Screenshot From Android Studio

Taking screenshot from android studio is very easy and screen can be taken in any android emulator or any real device, just follow these simple steps:

Step 1: Open android studio and run your application just by clicking run button.

Step 2: After running your application, click Android tab on the left bottom of android studio. That will bring up the DDMS window and it looks like screenshot given below.

Step 3: Now click Screen Capture icon on the left side of Android DDMS tool window and it looks like screenshot given below.

Step 4: After clicking Screen Capture icon there appears new window with screenshot image of your application it looks like screenshot given below.

Источник

Как программно сделать скриншот на Android?

Как сделать скриншот выбранной области экрана телефона не какой-либо программой, а кодом?

Вот код, который позволил сохранить мой скриншот на SD-карте и использовать позже для любых ваших потребностей:

Во-первых, вам нужно добавить правильное разрешение для сохранения файла:

И это код (работает в Activity):

И вот как вы можете открыть недавно сгенерированное изображение:

Если вы хотите использовать это при просмотре фрагмента, используйте:

на takeScreenshot () функция

Примечание :

Это решение не работает, если ваш диалог содержит вид поверхности. Для получения подробной информации, пожалуйста, проверьте ответ на следующий вопрос:

Вызовите этот метод, передав внешнюю группу ViewGroup, для которой требуется снимок экрана:

Примечание: работает только для рутованного телефона

Программно, вы можете запустить, adb shell /system/bin/screencap -p /sdcard/img.png как показано ниже

тогда читайте img.png как Bitmap и используйте как хотите.

РЕДАКТИРОВАТЬ: помиловать с downvotes. Это было верно в 2010 году, когда я ответил на вопрос.

Все программы, позволяющие делать скриншоты, работают только на рутованных телефонах.

Для этого метода не требуется разрешение root или большое кодирование .

В оболочке adb с помощью приведенной ниже команды вы можете сделать снимок экрана.

Эта команда не требует каких-либо прав root, так что вы также можете выполнить из Java-кода приложения Android.

Здесь мы использовали. KEYCODE_SYSRQ его значение равно 120 и используется для системного запроса / ключа экрана печати.

Как сказал CJBS, выходное изображение будет сохранено в / sdcard / Pictures / Screenshots

Ответ Муалига очень хороший, но у меня была та же проблема, что описывает Эвокс, я не понимаю, как это происходит. Так что иногда это достаточно хорошо, а иногда я получаю черный текст на черном фоне (в зависимости от темы).

Это решение основано на коде Mualig и коде, который я нашел в Robotium. Я отказываюсь от использования кэша рисования, вызывая непосредственно метод рисования. Перед этим я попытаюсь получить фон для рисования из текущей деятельности, чтобы нарисовать его первым.

Добавьте разрешение в манифест

Для поддержки Marshmallow или более поздних версий, пожалуйста, добавьте приведенный ниже код в метод активности onCreate

Для справки: один из способов захвата экрана (а не только активности вашего приложения) — захват кадрового буфера (device / dev / graphics / fb0). Для этого у вас должны быть права суперпользователя или ваше приложение должно быть приложением с разрешениями на подпись («разрешение, которое система предоставляет, только если запрашивающее приложение подписано тем же сертификатом, что и приложение, которое объявило разрешение»), что очень маловероятно, если вы не скомпилировали свой собственный ROM.

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

Читайте также:  Google dialog flow android

Я пытался читать кадровый буфер непрерывно, но, похоже, он возвращает фиксированное количество прочитанных байтов. В моем случае это (3 410 432) байта, что достаточно для хранения кадра дисплея 854 * 480 RGBA (3 279 360 байтов). Да, кадр в двоичном формате, выведенный из fb0, является RGBA на моем устройстве. Скорее всего, это будет зависеть от устройства к устройству. Это будет важно для вас, чтобы расшифровать его =)

В моем устройстве права доступа / dev / graphics / fb0 такие, что только root и пользователи из групповой графики могут читать fb0.

Графика является ограниченной группой, поэтому вы, вероятно, получите доступ к fb0 только с рутированным телефоном с помощью команды su.

Приложения Android имеют идентификатор пользователя (uid) = app _ ## и идентификатор группы (guid) = app _ ## .

В оболочке adb есть uid = shell и guid = shell , которые имеют гораздо больше прав, чем приложение. Вы можете проверить эти разрешения в /system/permissions/platform.xml

Это означает, что вы сможете читать fb0 в оболочке adb без рута, но вы не будете читать его в приложении без рута.

Кроме того, предоставление разрешений READ_FRAME_BUFFER и / или ACCESS_SURFACE_FLINGER для AndroidManifest.xml ничего не даст для обычного приложения, поскольку они будут работать только для приложений с « подписью ».

Также проверьте эту закрытую тему для более подробной информации.

Источник

Как записывать экран и делать скриншоты, используя Android API?

Android получил новый API на Kitkat и Lollipop, чтобы захватить видео на экране. Вы можете сделать это либо с помощью инструмента ADB, либо с помощью кода (начиная с Lollipop).

С тех пор, как новый API вышел, многие приложения пришли, которые используют эту функцию, позволяя записывать экран, и Microsoft даже сделал свой собственный Google-Now-On-tap конкурент приложение.

используя ADB, вы можете использовать:

вы даже можете сделать это из Android Studio себя.

проблема

Я не могу найти учебник или объяснение о том, как это сделать с помощью API, то есть в коде.

что я нашел

единственное место, которое я нашел, это документация (здесь, в разделе» захват экрана и совместное использование»), говоря мне это:

Android 5.0 позволяет добавлять захват экрана и общий доступ к экрану возможности для вашего приложения с новым android.сми.проекция Апис. Эта функция полезна, например, если вы хотите включить совместное использование экрана в приложении для видеоконференций.

новая createVirtualDisplay() метод позволяет вашему приложению захватывать содержимое главного экрана (дисплей по умолчанию) в поверхность объект, который ваше приложение может затем отправить по сети. Только API позволяет захватывать незащищенное содержимое экрана, а не системный звук. К начните захват экрана, ваше приложение должно сначала запросить пользователя разрешение на запуск диалог захвата экрана с использованием намерения получено через createScreenCaptureIntent() метод.

пример использования новых API см. В разделе MediaProjectionDemo класс в образце проекта.

дело в том, что я не могу найти образец «MediaProjectionDemo». Вместо этого я нашел образец «Screen Capture», но я не понимаю, как он работает, так как, когда я его запустил, все, что я видел, это мигающий экран, и я не думаю, что он сохраняет видео в файл. Образец кажется очень детская коляска.

вопросы

Как выполнить эти действия с помощью нового API:

  1. начните запись, опционально включая аудио (микрофон/динамик/оба).
  2. остановить запись
  3. сделайте скриншот, а не видео.

кроме того, как настроить его (разрешение, запрошенный fps, цвета, время. ) ?

Источник

Оцените статью