Take / Save screenshot in background android -


my app running fine in foreground want implement take screenshot in background .. m stuck how implement ...

i think service can helpful ....

public class mainactivity extends activity implements onclicklistener {     listview listview;     list<parseobject> ob;     progressdialog mprogressdialog;     arrayadapter<string> adapter;     edittext et;     button bt, bt2;     string[] values;     list<string> list11 = new arraylist<string>();     private sensormanager msensormanager;     private float maccel; // acceleration apart gravity     private float maccelcurrent; // current acceleration including gravity     private float maccellast; // last acceleration including gravity      @override     protected void oncreate(bundle savedinstancestate) {         super.oncreate(savedinstancestate);         setcontentview(r.layout.activity_main);          msensormanager = (sensormanager) getsystemservice(context.sensor_service);         msensormanager.registerlistener(msensorlistener,                 msensormanager.getdefaultsensor(sensor.type_accelerometer),                 sensormanager.sensor_delay_normal);         maccel = 0.00f;         maccelcurrent = sensormanager.gravity_earth;         maccellast = sensormanager.gravity_earth;      }      private final sensoreventlistener msensorlistener = new sensoreventlistener() {          public void onsensorchanged(sensorevent se) {             float x = se.values[0];             float y = se.values[1];             float z = se.values[2];             maccellast = maccelcurrent;             maccelcurrent = (float) math.sqrt((double) (x * x + y * y + z * z));             float delta = maccelcurrent - maccellast;             maccel = maccel * 0.9f + delta; // perform low-cut filter             if (maccel > 2) {                 toast toast = toast.maketext(getapplicationcontext(),                         "device has shaken.", toast.length_long);                 toast.show();                 save();              }         }          public void onaccuracychanged(sensor sensor, int accuracy) {         }     };      public void save() {         final string screenshots_locations = environment                 .getexternalstoragedirectory().tostring() + "/screenshots/";          // device dimmensions         display display = getwindowmanager().getdefaultdisplay();         point size = new point();         display.getsize(size);          // root view         view view = getwindow().getdecorview().getrootview();          // create bitmap use draw screenshot         final bitmap bitmap = bitmap.createbitmap(size.x, size.y,                 bitmap.config.argb_4444);         final canvas canvas = new canvas(bitmap);          // current theme know background use         final activity activity = mainactivity.this;         final theme theme = activity.gettheme();         final typedarray ta = theme                 .obtainstyledattributes(new int[] { android.r.attr.windowbackground });         final int res = ta.getresourceid(0, 0);         final drawable background = activity.getresources().getdrawable(res);          // draw background         background.draw(canvas);          // draw views         view.draw(canvas);          // save screenshot file system         fileoutputstream fos = null;         try {             final file sddir = new file(screenshots_locations);             if (!sddir.exists()) {                 sddir.mkdirs();             }             fos = new fileoutputstream(screenshots_locations                     + system.currenttimemillis() + ".jpg");             if (fos != null) {                 if (!bitmap.compress(bitmap.compressformat.jpeg, 90, fos)) {                 }                 fos.flush();                 fos.close();             }          } catch (filenotfoundexception e) {             // todo auto-generated catch block             e.printstacktrace();         } catch (ioexception e) {             // todo auto-generated catch block             e.printstacktrace();         }     }      @override     protected void onresume() {         super.onresume();         msensormanager.registerlistener(msensorlistener,                 msensormanager.getdefaultsensor(sensor.type_accelerometer),                 sensormanager.sensor_delay_normal);     }      @override     protected void onpause() {         msensormanager.unregisterlistener(msensorlistener);         super.onpause();     }      @override     public boolean oncreateoptionsmenu(menu menu) {         // inflate menu; adds items action bar if present.         getmenuinflater().inflate(r.menu.main, menu);         return true;     }      @override     public boolean onoptionsitemselected(menuitem item) {         // handle action bar item clicks here. action bar         // automatically handle clicks on home/up button, long         // specify parent activity in androidmanifest.xml.         int id = item.getitemid();         if (id == r.id.action_settings) {             return true;         }         return super.onoptionsitemselected(item);     }  } 

you can use code snippet taking screenshot,

    view screen = getwindow().getdecorview().getrootview();     screen.setdrawingcacheenabled(true);     bitmap bitmap = screen.getdrawingcache();      file mediastoragedir = new file(environment.getexternalstoragedirectory(), "yourpath");     if (!mediastoragedir.exists()) {         if (!mediastoragedir.mkdirs()) {             log.d("error", "path not created");         }     }     string filepath = environment.getexternalstoragedirectory() + file.separator + "yourpath" + "/" + "filename" + ".png";     try {          bitmap.compress(compressformat.png, 100, new fileoutputstream(newfile(filepath)));     } catch (filenotfoundexception e) {          e.printstacktrace();     } 

do not forget add permission ypur manifest.xml file

<uses-permission android:name="android.permission.write_external_storage"/> 

Comments