view - Android - I need a generic method to automatically take a screenshot and save to the SD card -


update added following code:

        v1.setdrawingcacheenabled(true);     v1.measure(measurespec.makemeasurespec(0, measurespec.unspecified),              measurespec.makemeasurespec(0, measurespec.unspecified));     v1.layout(0, 0, v1.getmeasuredwidth(), v1.getmeasuredheight());      v1.builddrawingcache(true); 

now i'm getting screenshots, they're not need. instance, 1 screen need capture consists of linearlayout containing imageview , listview. when activity loads during app execution, list shows 10 items. capture i'm getting shows top imageview , 1.5 of listitems. there can capture screen shows? (i post shots i'm getting, due ip issues i'd have redact everything, , posting filled black rectangle not super useful)

/update

i'm targeting android 2.2 , trying develop class called activity capture current screen , store image on sd card (preferably png). i've found similar questions there important difference here: can't create new view, , can't build code every activity (i can away adding 1 function call in each activity).
need 1) obtain current activity's view (which i'm doing ((viewgroup)findviewbyid(android.r.id.content)).getchildat(0)) , 2) passing view function in class (defined below). i've tried combining this , this bitmap null after .getdrawingcache() call .compress bombs.

here's code:

public static void capturescreen(view v1){                 view v1= v;         v1.setdrawingcacheenabled(true);         bitmap bm = v1.getdrawingcache();         bytearrayoutputstream bytes = new bytearrayoutputstream();         try {             bm.compress(bitmap.compressformat.png, 100, bytes);         } catch (exception e1) {             log.e("bm.compress", e1.getmessage());         }          //create new file name "test.jpg" in sdcard folder.         file f = new file(environment.getexternalstoragedirectory()                                 + file.separator + context.getpackagename().replace(".", file.separator)                                  + file.separator + "screenshots" + file.separator +  "test.jpg");         //log.d("cf", context.getpackagename());         try {             f.createnewfile();         } catch (ioexception e) {             e.printstacktrace();         }         //write bytes in file         try {             fileoutputstream fo = new fileoutputstream(f);             fo.write(bytes.tobytearray());         } catch (filenotfoundexception e) {             e.printstacktrace();         } catch (ioexception e) {             e.printstacktrace();         } } 

logcat:

06-06 16:37:14.613: d/androidruntime(284): shutting down vm 06-06 16:37:14.613: w/dalvikvm(284): threadid=1: thread exiting uncaught exception (group=0x4001d800) 06-06 16:37:14.768: e/androidruntime(284): fatal exception: main 06-06 16:37:14.768: e/androidruntime(284): java.lang.runtimeexception: unable start activity componentinfo{pkgname.pkgnameexpo/pkgname.pkgnameexpo.splashactivity}: java.lang.nullpointerexception: println needs message 06-06 16:37:14.768: e/androidruntime(284):  @ android.app.activitythread.performlaunchactivity(activitythread.java:2663) 06-06 16:37:14.768: e/androidruntime(284):  @ android.app.activitythread.handlelaunchactivity(activitythread.java:2679) 06-06 16:37:14.768: e/androidruntime(284):  @ android.app.activitythread.access$2300(activitythread.java:125) 06-06 16:37:14.768: e/androidruntime(284):  @ android.app.activitythread$h.handlemessage(activitythread.java:2033) 06-06 16:37:14.768: e/androidruntime(284):  @ android.os.handler.dispatchmessage(handler.java:99) 06-06 16:37:14.768: e/androidruntime(284):  @ android.os.looper.loop(looper.java:123) 06-06 16:37:14.768: e/androidruntime(284):  @ android.app.activitythread.main(activitythread.java:4627) 06-06 16:37:14.768: e/androidruntime(284):  @ java.lang.reflect.method.invokenative(native method) 06-06 16:37:14.768: e/androidruntime(284):  @ java.lang.reflect.method.invoke(method.java:521) 06-06 16:37:14.768: e/androidruntime(284):  @ com.android.internal.os.zygoteinit$methodandargscaller.run(zygoteinit.java:868) 06-06 16:37:14.768: e/androidruntime(284):  @ com.android.internal.os.zygoteinit.main(zygoteinit.java:626) 06-06 16:37:14.768: e/androidruntime(284):  @ dalvik.system.nativestart.main(native method) 06-06 16:37:14.768: e/androidruntime(284): caused by: java.lang.nullpointerexception: println needs message 06-06 16:37:14.768: e/androidruntime(284):  @ android.util.log.println_native(native method) 06-06 16:37:14.768: e/androidruntime(284):  @ android.util.log.e(log.java:215) 06-06 16:37:14.768: e/androidruntime(284):  @ pkgname.pkgnameexpo.classes.cfunctions.capturescreen(cfunctions.java:432) 06-06 16:37:14.768: e/androidruntime(284):  @ pkgname.pkgnameexpo.splashactivity.oncreate(splashactivity.java:38) 06-06 16:37:14.768: e/androidruntime(284):  @ android.app.instrumentation.callactivityoncreate(instrumentation.java:1047) 06-06 16:37:14.768: e/androidruntime(284):  @ android.app.activitythread.performlaunchactivity(activitythread.java:2627) 06-06 16:37:14.768: e/androidruntime(284):  ... 11 more 

all can tell debug that, before bm.compress called, bm null while v1 not. ideas?

update here's new logcat, think telling me can't create file?

06-06 22:13:55.975: i/system.out(12244): debugger has settled (1400) 06-06 22:13:58.351: e/bm.compress(12244): nullfixnull 06-06 22:13:58.411: w/system.err(12244): java.io.ioexception: no such file or directory 06-06 22:13:58.421: w/system.err(12244):    @ java.io.file.createnewfileimpl(native method) 06-06 22:13:58.432: w/system.err(12244):    @ java.io.file.createnewfile(file.java:1160) 06-06 22:13:58.432: w/system.err(12244):    @ pkgname.pkgnameexpo.classes.cfunctions.capturescreen(cfunctions.java:441) 06-06 22:13:58.441: w/system.err(12244):    @ pkgname.pkgnameexpo.splashactivity.oncreate(splashactivity.java:38) 06-06 22:13:58.451: w/system.err(12244):    @ android.app.instrumentation.callactivityoncreate(instrumentation.java:1047) 06-06 22:13:58.451: w/system.err(12244):    @ android.app.activitythread.performlaunchactivity(activitythread.java:2627) 06-06 22:13:58.461: w/system.err(12244):    @ android.app.activitythread.handlelaunchactivity(activitythread.java:2679) 06-06 22:13:58.461: w/system.err(12244):    @ android.app.activitythread.access$2300(activitythread.java:125) 06-06 22:13:58.471: w/system.err(12244):    @ android.app.activitythread$h.handlemessage(activitythread.java:2033) 06-06 22:13:58.471: w/system.err(12244):    @ android.os.handler.dispatchmessage(handler.java:99) 06-06 22:13:58.491: w/system.err(12244):    @ android.os.looper.loop(looper.java:123) 06-06 22:13:58.491: w/system.err(12244):    @ android.app.activitythread.main(activitythread.java:4627) 06-06 22:13:58.501: w/system.err(12244):    @ java.lang.reflect.method.invokenative(native method) 06-06 22:13:58.511: w/system.err(12244):    @ java.lang.reflect.method.invoke(method.java:521) 06-06 22:13:58.511: w/system.err(12244):    @ com.android.internal.os.zygoteinit$methodandargscaller.run(zygoteinit.java:868) 06-06 22:13:58.522: w/system.err(12244):    @ com.android.internal.os.zygoteinit.main(zygoteinit.java:626) 06-06 22:13:58.522: w/system.err(12244):    @ dalvik.system.nativestart.main(native method) 06-06 22:13:58.531: w/system.err(12244): java.io.filenotfoundexception: /mnt/sdcard/pkgname/pkgnameexpo/screenshots/test.jpg (no such file or directory) 06-06 22:13:58.541: w/system.err(12244):    @ org.apache.harmony.luni.platform.osfilesystem.openimpl(native method) 06-06 22:13:58.551: w/system.err(12244):    @ org.apache.harmony.luni.platform.osfilesystem.open(osfilesystem.java:152) 06-06 22:13:58.551: w/system.err(12244):    @ java.io.fileoutputstream.<init>(fileoutputstream.java:97) 06-06 22:13:58.561: w/system.err(12244):    @ java.io.fileoutputstream.<init>(fileoutputstream.java:69) 06-06 22:13:58.561: w/system.err(12244):    @ pkgname.pkgnameexpo.classes.cfunctions.capturescreen(cfunctions.java:447) 06-06 22:13:58.571: w/system.err(12244):    @ pkgname.pkgnameexpo.splashactivity.oncreate(splashactivity.java:38) 06-06 22:13:58.571: w/system.err(12244):    @ android.app.instrumentation.callactivityoncreate(instrumentation.java:1047) 06-06 22:13:58.581: w/system.err(12244):    @ android.app.activitythread.performlaunchactivity(activitythread.java:2627) 06-06 22:13:58.581: w/system.err(12244):    @ android.app.activitythread.handlelaunchactivity(activitythread.java:2679) 06-06 22:13:58.591: w/system.err(12244):    @ android.app.activitythread.access$2300(activitythread.java:125) 06-06 22:13:58.591: w/system.err(12244):    @ android.app.activitythread$h.handlemessage(activitythread.java:2033) 06-06 22:13:58.601: w/system.err(12244):    @ android.os.handler.dispatchmessage(handler.java:99) 06-06 22:13:58.601: w/system.err(12244):    @ android.os.looper.loop(looper.java:123) 06-06 22:13:58.612: w/system.err(12244):    @ android.app.activitythread.main(activitythread.java:4627) 06-06 22:13:58.612: w/system.err(12244):    @ java.lang.reflect.method.invokenative(native method) 06-06 22:13:58.621: w/system.err(12244):    @ java.lang.reflect.method.invoke(method.java:521) 06-06 22:13:58.631: w/system.err(12244):    @ com.android.internal.os.zygoteinit$methodandargscaller.run(zygoteinit.java:868) 06-06 22:13:58.631: w/system.err(12244):    @ com.android.internal.os.zygoteinit.main(zygoteinit.java:626) 06-06 22:13:58.641: w/system.err(12244):    @ dalvik.system.nativestart.main(native method) 

you seem constructing rather deep pathname file. if of directories no not exist, need call mkdirs() on file object representing directory want write file.


Comments

Popular posts from this blog

django - How can I change user group without delete record -

java - Need to add SOAP security token -

java - EclipseLink JPA Object is not a known entity type -