Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to capture the android device screen content? [duplicate]

Possible Duplicate:
How to programatically take a screenshot on Android?

How to capture the android device screen content and make an image file using the snapshot data? Which API should I use or where could I find related resources?

BTW: not camera snapshot, but device screen

like image 891
Jagie Avatar asked Jun 18 '10 06:06

Jagie


People also ask

How do I copy a screen clip?

Pressing PRINT SCREEN captures an image of your entire screen and copies it to the Clipboard in your computer's memory. You can then paste (CTRL+V) the image into a document, email message, or other file.

How do I view Screenshots on Android?

Find Your Screenshot on Android 10 or Earlier Go to the Photos app from your app tray, tap the three parallel lines in the top left side, and go to Device folders. Now, you will see the Screenshots album. Open it and you will find the screenshot.


1 Answers

Use the following code:

Bitmap bitmap; View v1 = MyView.getRootView(); v1.setDrawingCacheEnabled(true); bitmap = Bitmap.createBitmap(v1.getDrawingCache()); v1.setDrawingCacheEnabled(false); 

Here MyView is the View through which we need include in the screen. You can also get DrawingCache from of any View this way (without getRootView()).


There is also another way..
If we having ScrollView as root view then its better to use following code,

LayoutInflater inflater = (LayoutInflater) this.getSystemService(LAYOUT_INFLATER_SERVICE); FrameLayout root = (FrameLayout) inflater.inflate(R.layout.activity_main, null); // activity_main is UI(xml) file we used in our Activity class. FrameLayout is root view of my UI(xml) file. root.setDrawingCacheEnabled(true); Bitmap bitmap = getBitmapFromView(this.getWindow().findViewById(R.id.frameLayout)); // here give id of our root layout (here its my FrameLayout's id) root.setDrawingCacheEnabled(false); 

Here is the getBitmapFromView() method

public static Bitmap getBitmapFromView(View view) {         //Define a bitmap with the same size as the view         Bitmap returnedBitmap = Bitmap.createBitmap(view.getWidth(), view.getHeight(),Bitmap.Config.ARGB_8888);         //Bind a canvas to it         Canvas canvas = new Canvas(returnedBitmap);         //Get the view's background         Drawable bgDrawable =view.getBackground();         if (bgDrawable!=null)              //has background drawable, then draw it on the canvas             bgDrawable.draw(canvas);         else              //does not have background drawable, then draw white background on the canvas             canvas.drawColor(Color.WHITE);         // draw the view on the canvas         view.draw(canvas);         //return the bitmap         return returnedBitmap;     } 

It will display entire screen including content hidden in your ScrollView


UPDATED AS ON 20-04-2016

There is another better way to take screenshot.
Here I have taken screenshot of WebView.

WebView w = new WebView(this);     w.setWebViewClient(new WebViewClient()     {         public void onPageFinished(final WebView webView, String url) {              new Handler().postDelayed(new Runnable(){                 @Override                 public void run() {                     webView.measure(View.MeasureSpec.makeMeasureSpec(                                     View.MeasureSpec.UNSPECIFIED, View.MeasureSpec.UNSPECIFIED),                             View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED));                     webView.layout(0, 0, webView.getMeasuredWidth(),                             webView.getMeasuredHeight());                     webView.setDrawingCacheEnabled(true);                     webView.buildDrawingCache();                     Bitmap bitmap = Bitmap.createBitmap(webView.getMeasuredWidth(),                             webView.getMeasuredHeight(), Bitmap.Config.ARGB_8888);                      Canvas canvas = new Canvas(bitmap);                     Paint paint = new Paint();                     int height = bitmap.getHeight();                     canvas.drawBitmap(bitmap, 0, height, paint);                     webView.draw(canvas);                      if (bitmap != null) {                         try {                             String filePath = Environment.getExternalStorageDirectory()                                     .toString();                             OutputStream out = null;                             File file = new File(filePath, "/webviewScreenShot.png");                             out = new FileOutputStream(file);                              bitmap.compress(Bitmap.CompressFormat.PNG, 50, out);                             out.flush();                             out.close();                             bitmap.recycle();                         } catch (Exception e) {                             e.printStackTrace();                         }                     }                 }             }, 1000);         }     }); 

Hope this helps..!

like image 73
Nirav Dangi Avatar answered Sep 24 '22 06:09

Nirav Dangi