Android take screen shot programmatically Android take screen shot programmatically android android

Android take screen shot programmatically


Here you go...I used this:

View v = view.getRootView();v.setDrawingCacheEnabled(true);Bitmap b = v.getDrawingCache();String extr = Environment.getExternalStorageDirectory().toString();File myPath = new File(extr, getString(R.string.free_tiket)+".jpg");FileOutputStream fos = null;try {    fos = new FileOutputStream(myPath);    b.compress(Bitmap.CompressFormat.JPEG, 100, fos);    fos.flush();    fos.close();    MediaStore.Images.Media.insertImage( getContentResolver(), b,                                          "Screen", "screen");} catch (FileNotFoundException e) {    // TODO Auto-generated catch block    e.printStackTrace();} catch (Exception e) {    // TODO Auto-generated catch block    e.printStackTrace();}

v iz root layout...just to point ;)))


For the next reader of this question-

The very simple way to do this by drawing your view to canvas-

pass your main layout reference to this method-

 Bitmap file = save(layout); Bitmap save(View v)   {    Bitmap b = Bitmap.createBitmap(v.getWidth(), v.getHeight(), Bitmap.Config.ARGB_8888);    Canvas c = new Canvas(b);    v.draw(c);    return b;   }


I think you have to wait until the layout is drawn completely..Use ViewTreeObserver to get a call back when layout is drawn completely..

On your onCreate add this code..Only call getScreen from inside onGlobalLayout()..

ViewTreeObserver vto = content.getViewTreeObserver();vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {  @Override  public void onGlobalLayout() {    content.getViewTreeObserver().removeGlobalOnLayoutListener(this);    getScreen();  }});

I asked a somewhat similiar question once..Please see my question which explains the way to take screenshot in android..Hope this helps