Как программно сделать скриншот на Android? - PullRequest
470 голосов
/ 18 апреля 2010

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

Ответы [ 24 ]

1 голос
/ 04 января 2018

Только для системных приложений!

Process process;
process = Runtime.getRuntime().exec("screencap -p " + outputPath);
process.waitFor();

Примечание: Системные приложения не должны запускать "su" для выполнения этой команды.

0 голосов
/ 20 февраля 2019

для скриншота полной страницы

Если вы хотите сделать полный снимок экрана (который содержит прокрутку или около того), проверьте эту библиотеку

https://github.com/peter1492/LongScreenshot

Все, что вам нужно сделать, это импортировать Gradel и создать объект BigScreenshot

BigScreenshot longScreenshot = new BigScreenshot(this, x, y);

Будет получен обратный вызов с растровым изображением снимков экрана, сделанным при автоматической прокрутке группы представлений экрана и собранной вместе в конце.

@Override public void getScreenshot(Bitmap bitmap) {}

Которые могут быть сохранены в галерее или что бы ни понадобилось использовать их после

0 голосов
/ 06 декабря 2018

Сделайте скриншот вида в андроид.

public static Bitmap getViewBitmap(View v) {
    v.clearFocus();
    v.setPressed(false);

    boolean willNotCache = v.willNotCacheDrawing();
    v.setWillNotCacheDrawing(false);

    int color = v.getDrawingCacheBackgroundColor();
    v.setDrawingCacheBackgroundColor(0);

    if (color != 0) {
        v.destroyDrawingCache();
    }
    v.buildDrawingCache();
    Bitmap cacheBitmap = v.getDrawingCache();
    if (cacheBitmap == null) {
        return null;
    }

    Bitmap bitmap = Bitmap.createBitmap(cacheBitmap);

    v.destroyDrawingCache();
    v.setWillNotCacheDrawing(willNotCache);
    v.setDrawingCacheBackgroundColor(color);

    return bitmap;
}
0 голосов
/ 27 февраля 2015

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

LinearLayout llMain = (LinearLayout) findViewById(R.id.linearlayoutMain);
Bitmap bm = loadBitmapFromView(llMain);

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

FileOutputStream outStream = null;
File f=new File(Environment.getExternalStorageDirectory()+"/Screen Shots/");
f.mkdir();
String extStorageDirectory = f.toString();
File file = new File(extStorageDirectory, "my new screen shot");
pathOfImage = file.getAbsolutePath();
try {
    outStream = new FileOutputStream(file);
    bm.compress(Bitmap.CompressFormat.PNG, 100, outStream);
    Toast.makeText(getApplicationContext(), "Saved at "+f.getAbsolutePath(), Toast.LENGTH_LONG).show();
    addImageGallery(file);
    //mail.setEnabled(true);
    flag=true;
} catch (FileNotFoundException e) {e.printStackTrace();}
try {
    outStream.flush();
    outStream.close();
} catch (IOException e) {e.printStackTrace();}
...