在安卓下,webview上传图片点击是没用的,需要自己写一下.

网上关于这个的很多,基本都是抄来抄去,没什么用的.

这个日期比较新,而且能用

http://blog.csdn.net/djcken/article/details/46379929#comments

就是自定义实现WebChromeClient


然后重写 openFileChooser 方法,获取ValueCallback<Uri> valueCallback


当然,要注意不同版本的区别.,但5.0+的项目,就不能用了.回复里有答案.

就是重写onShowFileChooser 但这次是ValueCallback<Uri[]> valueCallback

虽然麻烦点,但能实现

使用腾讯X5内核http://x5.tencent.com/不用去考虑那些版本兼容,只要重写openFileChooser 获取ValueCallback<Uri> valueCallback

在这些方法 可以直接跳转相册或相机,也可以弹出对话框来选择;

只需在onActivityResult 方法获取android.net.Uri 对象就行
跳转相册:

Intentintent=Intent(Intent.,);intent.setDataAndType(MediaStore.Images.Media.,);startActivityForResult(15);

相册结果: Uri uri = data.getData();
跳转相机 :

privateUriphotoUri;

Intentintent=newIntent(MediaStore.ACTION_IMAGE_CAPTURE);ContentValuesvalues=newContentValues();photoUri=context.getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,values);intent.putExtra(MediaStore.EXTRA_OUTPUT,photoUri);startActivityForResult(16);相机结果:直接photoUri就行把图片给网页,用刚才获取的valueCallbackvalueCallback.onReceiveValue(uri);如果用户取消就valueCallback.onReceiveValue(null);然后每次都要uriValueCallback=null;这些和网上的基本一样,但今天被一个问题坑了很久...错误日志是这样的java.lang.RuntimeException:FailuredeliveringresultResultInfo{who=null,request=18,result=0,data=null}toactivity{com.tugouzhong.micromall/com.tugouzhong.user.WebActivity}:java.lang.IllegalStateException:showFileChooserresultwasalreadycalledatandroid.app.ActivityThread.deliverResults(ActivityThread.java:3609)atandroid.app.ActivityThread.handleSendResult(ActivityThread.java:3652)atandroid.app.ActivityThread.access$1300(ActivityThread.java:159)atandroid.app.ActivityThread$H.handleMessage(ActivityThread.java:1368)atandroid.os.Handler.dispatchMessage(Handler.java:102)atandroid.os.Looper.loop(Looper.java:135)atandroid.app.ActivityThread.main(ActivityThread.java:5313)atjava.lang.reflect.Method.invoke(NativeMethod)atjava.lang.reflect.Method.invoke(Method.java:372)atcom.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1116)atcom.android.internal.os.ZygoteInit.main(ZygoteInit.java:809)Causedby:java.lang.IllegalStateException:showFileChooserresultwasalreadycalledatcom.tencent.smtt.webkit.x$14.a(UnknownSource)atcom.tencent.smtt.webkit.x$14.onReceiveValue(UnknownSource)atcom.tencent.smtt.sdk.o.a(UnknownSource)atcom.tencent.smtt.sdk.o.onReceiveValue(UnknownSource)atcom.test.user.WebActivity.onActivityResult(WebActivity.java:214)atandroid.app.Activity.dispatchActivityResult(Activity.java:6240)atandroid.app.ActivityThread.deliverResults(ActivityThread.java:3605)atandroid.app.ActivityThread.handleSendResult(ActivityThread.java:3652)atandroid.app.ActivityThread.access$1300(ActivityThread.java:159)atandroid.app.ActivityThread$H.handleMessage(ActivityThread.java:1368)atandroid.os.Handler.dispatchMessage(Handler.java:102)atandroid.os.Looper.loop(Looper.java:135)atandroid.app.ActivityThread.main(ActivityThread.java:5313)atjava.lang.reflect.Method.invoke(NativeMethod)atjava.lang.reflect.Method.invoke(Method.java:372)atcom.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1116)atcom.android.internal.os.ZygoteInit.main(ZygoteInit.java:809)这个是用的x5内核的日志,用系统的也是java.lang.IllegalStateException这个问题.网上找竟然没发现同样问题的人....自己看了下,原来是在openFileChooser方法里调用了super.openFileChooser(valueCallback,acceptType,captureType);把这句删掉就行;