i'm trying use webview on android activity, web works fine location , things, problem have it's not triggering open file chooser intent upload button.
here code. mainactivity.java
public class mainactivity extends appcompatactivity { private static final string tag = "mainactivity"; private static final int filechooser_resultcode = 2888; private webview webview; private valuecallback<uri> muploadmessage; private uri mcapturedimageuri = null; @override public void oncreate(bundle savedinstancestate) { getwindow().requestfeature(window.feature_progress); super.oncreate(savedinstancestate); setactionbar(); webview = (webview) findviewbyid(r.id.webviewnewbusiness); webview.getsettings().setjavascriptenabled(true); webview.addjavascriptinterface(new webappinterface(this), "android"); webview.setscrollbarstyle(view.scrollbars_inside_overlay); webview.getsettings().setloadwithoverviewmode(true); webview.setscrollbarstyle(webview.scrollbars_outside_overlay); webview.setscrollbarfadingenabled(false); webview.getsettings().setbuiltinzoomcontrols(true); webview.getsettings().setpluginstate(websettings.pluginstate.on); webview.getsettings().setallowfileaccess(true); webview.getsettings().setsupportzoom(true); string serviceid = getintent().getextras().getstring(constant.service_id); string userhash = phonedata.getuserhash(this); string url = thisurl; log.d(tag, url); final activity activity = this; webview.setwebchromeclient(new webchromeclient() { public void onprogresschanged(webview view, int progress) { // activities , webviews measure progress different scales. // progress meter automatically disappear when reach 100% activity.setprogress(progress * 1000); } public void ongeolocationpermissionsshowprompt(string origin, geolocationpermissions.callback callback) { callback.invoke(origin, true, false); } // openfilechooser android 3.0+ public void openfilechooser(valuecallback<uri> uploadmsg, string accepttype) { // update message muploadmessage = uploadmsg; try { // create androidexamplefolder @ sdcard file imagestoragedir = new file( environment.getexternalstoragepublicdirectory(environment.directory_pictures), "pictures"); if (!imagestoragedir.exists()) { // create androidexamplefolder @ sdcard imagestoragedir.mkdirs(); } // create camera captured image file path , name file file = new file(imagestoragedir + file.separator + "img_" + string.valueof(system.currenttimemillis()) + ".jpg"); mcapturedimageuri = uri.fromfile(file); // camera capture image intent final intent captureintent = new intent(android.provider.mediastore.action_image_capture); captureintent.putextra(mediastore.extra_output, mcapturedimageuri); intent = new intent(intent.action_get_content); i.addcategory(intent.category_openable); i.settype("image/*"); // create file chooser intent intent chooserintent = intent.createchooser(i, "image chooser"); // set camera intent file chooser chooserintent.putextra(intent.extra_initial_intents , new parcelable[]{captureintent}); // on select image call onactivityresult method of activity startactivityforresult(chooserintent, filechooser_resultcode); } catch (exception e) { toast.maketext(getbasecontext(), "exception:" + e, toast.length_long).show(); } } // openfilechooser android < 3.0 public void openfilechooser(valuecallback<uri> uploadmsg) { openfilechooser(uploadmsg, ""); } //openfilechooser other android versions public void openfilechooser(valuecallback<uri> uploadmsg, string accepttype, string capture) { openfilechooser(uploadmsg, accepttype); } // webpage has 2 filechoosers , send // console message informing action perform, // taking photo or updating file public boolean onconsolemessage(consolemessage cm) { onconsolemessage(cm.message(), cm.linenumber(), cm.sourceid()); return true; } public void onconsolemessage(string message, int linenumber, string sourceid) { //log.d("androidruntime", "show console messages, used debugging: " + message); } }); webview.setwebviewclient(new webviewclient() { public void onreceivederror(webview view, int errorcode, string description, string failingurl) { log.d(activity, getstring(r.string.generic_error)); } }); webview.loadurl(url); } private void setactionbar() { toolbar toolbar = (toolbar) findviewbyid(r.id.app_bar); setsupportactionbar(toolbar); final actionbar ab = getsupportactionbar(); if (ab != null) { ab.sethomeasupindicator(r.drawable.ab_back); ab.setdisplayhomeasupenabled(true); } } @override public void onbackpressed() { if (webview.cangoback()) { webview.goback(); } else { super.onbackpressed(); } } @override protected void onactivityresult(int requestcode, int resultcode, intent intent) { if (requestcode == filechooser_resultcode) { if (null == this.muploadmessage) { return; } uri result = null; try { if (resultcode != result_ok) { result = null; } else { // retrieve private variable if intent null result = intent == null ? mcapturedimageuri : intent.getdata(); } } catch (exception e) { toast.maketext(getapplicationcontext(), "activity :" + e, toast.length_long).show(); } muploadmessage.onreceivevalue(result); muploadmessage = null; } } }
Comments
Post a Comment