Android Assess Camera/Gallery on WebView? -


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