android - MediaStore.Images.Media.insertImage is returning null when trying to save the image -
i using custom view , in using canvas in user can draw , after want save image in sd card bt not able that. don't know going on.
else if(view.getid()==r.id.save_btn){ //save drawing alertdialog.builder savedialog = new alertdialog.builder(this); savedialog.settitle("save drawing"); savedialog.setmessage("save drawing device gallery?"); savedialog.setpositivebutton("yes", new dialoginterface.onclicklistener(){ private fileoutputstream fout; public void onclick(dialoginterface dialog, int which){ //save drawing drawview.setdrawingcacheenabled(true); //attempt save string imgsaved = mediastore.images.media.insertimage( getcontentresolver(), drawview.getdrawingcache(), uuid.randomuuid().tostring()+".png", "drawing"); //feedback if(imgsaved!=null){ toast savedtoast = toast.maketext(getapplicationcontext(), "drawing saved gallery!", toast.length_short); savedtoast.show(); } else{ toast unsavedtoast = toast.maketext(getapplicationcontext(), "oops! image not saved.", toast.length_short); unsavedtoast.show(); } drawview.destroydrawingcache(); } }); savedialog.setnegativebutton("cancel", new dialoginterface.onclicklistener(){ public void onclick(dialoginterface dialog, int which){ dialog.cancel(); } }); savedialog.show(); }
here error details
04-14 11:24:28.700: e/mediastore(6866): failed insert image 04-14 11:24:28.700: e/mediastore(6866): java.io.filenotfoundexception: no such file or directory 04-14 11:24:28.700: e/mediastore(6866): @ android.database.databaseutils.readexceptionwithfilenotfoundexceptionfromparcel(databaseutils.java:146) 04-14 11:24:28.700: e/mediastore(6866): @ android.content.contentproviderproxy.openassetfile(contentprovidernative.java:577) 04-14 11:24:28.700: e/mediastore(6866): @ android.content.contentresolver.openassetfiledescriptor(contentresolver.java:673) 04-14 11:24:28.700: e/mediastore(6866): @ android.content.contentresolver.openoutputstream(contentresolver.java:537) 04-14 11:24:28.700: e/mediastore(6866): @ android.content.contentresolver.openoutputstream(contentresolver.java:513) 04-14 11:24:28.700: e/mediastore(6866): @ android.provider.mediastore$images$media.insertimage(mediastore.java:891) 04-14 11:24:28.700: e/mediastore(6866): @ com.example.clent.mainactivity$9.onclick(mainactivity.java:238) 04-14 11:24:28.700: e/mediastore(6866): @ com.android.internal.app.alertcontroller$buttonhandler.handlemessage(alertcontroller.java:166) 04-14 11:24:28.700: e/mediastore(6866): @ android.os.handler.dispatchmessage(handler.java:99) 04-14 11:24:28.700: e/mediastore(6866): @ android.os.looper.loop(looper.java:137) 04-14 11:24:28.700: e/mediastore(6866): @ android.app.activitythread.main(activitythread.java:5103) 04-14 11:24:28.700: e/mediastore(6866): @ java.lang.reflect.method.invokenative(native method) 04-14 11:24:28.700: e/mediastore(6866): @ java.lang.reflect.method.invoke(method.java:525) 04-14 11:24:28.700: e/mediastore(6866): @ com.android.internal.os.zygoteinit$methodandargscaller.run(zygoteinit.java:737) 04-14 11:24:28.700: e/mediastore(6866): @ com.android.internal.os.zygoteinit.main(zygoteinit.java:553) 04-14 11:24:28.700: e/mediastore(6866): @ dalvik.system.nativestart.main(native method)
i getting message while trying save image...."oops! image not saved.".....
i had issue in emulator (android 4.4) , turns out it's due android bug, happens when user hasn't taken photo on device before (i.e. gallery empty , hasn't been initialized.). workaround initialize photo directory manually:
void fixmediadir() { file sdcard = environment.getexternalstoragedirectory(); if (sdcard != null) { file mediadir = new file(sdcard, "dcim/camera"); if (!mediadir.exists()) { mediadir.mkdirs(); } } }
not sure if fixed in later versions of android.
Comments
Post a Comment