Android原生的WebView并不支持上传文件,需要我们自己实现相应的方法。于是我把工作中的相关代码记录下来。下次直接拿来用就行了。一点一滴都是经验。
1。需要定义三个变量

   private ValueCallback uploadMessageAboveL;    private final static int FILE_CHOOSER_RESULT_CODE = 10000;    private ValueCallback uploadMessage;

2.重写Activity相关方法

    private void openImageChooserActivity() {        Intent i = new Intent(Intent.ACTION_GET_CONTENT);        i.addCategory(Intent.CATEGORY_OPENABLE);        i.setType("image/*");        startActivityForResult(Intent.createChooser(i, "Image Chooser"), FILE_CHOOSER_RESULT_CODE);    }    @Override    protected void onActivityResult(int requestCode, int resultCode, Intent data) {        super.onActivityResult(requestCode, resultCode, data);        if (requestCode == FILE_CHOOSER_RESULT_CODE) {            if (null == uploadMessage && null == uploadMessageAboveL) return;            Uri result = data == null || resultCode != RESULT_OK ? null : data.getData();            if (uploadMessageAboveL != null) {                onActivityResultAboveL(requestCode, resultCode, data);            } else if (uploadMessage != null) {                uploadMessage.onReceiveValue(result);                uploadMessage = null;            }        }    }    @TargetApi(Build.VERSION_CODES.LOLLIPOP)    private void onActivityResultAboveL(int requestCode, int resultCode, Intent intent) {        if (requestCode != FILE_CHOOSER_RESULT_CODE || uploadMessageAboveL == null)            return;        Uri[] results = null;        if (resultCode == Activity.RESULT_OK) {            if (intent != null) {                String dataString = intent.getDataString();                ClipData clipData = intent.getClipData();                if (clipData != null) {                    results = new Uri[clipData.getItemCount()];                    for (int i = 0; i < clipData.getItemCount(); i++) {                        ClipData.Item item = clipData.getItemAt(i);                        results[i] = item.getUri();                    }                }                if (dataString != null)                    results = new Uri[]{Uri.parse(dataString)};            }        }        uploadMessageAboveL.onReceiveValue(results);        uploadMessageAboveL = null;    }

3.重写WebChromeClient中的相关方法

    // For Android < 3.0        public void openFileChooser(ValueCallback valueCallback) {            uploadMessage = valueCallback;            openImageChooserActivity();        }        // For Android  >= 3.0        public void openFileChooser(ValueCallback valueCallback, String acceptType) {            uploadMessage = valueCallback;            openImageChooserActivity();        }        //For Android  >= 4.1        public void openFileChooser(ValueCallback valueCallback, String acceptType, String capture) {            uploadMessage = valueCallback;            openImageChooserActivity();        }        // For Android >= 5.0        @Override        public boolean onShowFileChooser(WebView webView, ValueCallback filePathCallback, WebChromeClient.FileChooserParams fileChooserParams) {            uploadMessageAboveL = filePathCallback;            openImageChooserActivity();            return true;        }

大功告成,噢耶 <( ̄︶ ̄)>

更多相关文章

  1. RecyclerView高度随Item自适应 GridLayoutManager和LinearLayout
  2. Android(安卓)RxJava 学习笔记
  3. Android(安卓)JNI使用和原理分析
  4. Android(安卓)ListView异步加载图片时图片顺序混乱解决办法
  5. Android(安卓)listView scroll 恢复滚动位置
  6. Android的Hello World
  7. Android(安卓)json通信(解析)方法
  8. Binder使用示例
  9. Android(安卓)rom开发:webview崩溃问题Binary XML file line #103

随机推荐

  1. Android(安卓)学习笔记--android基本
  2. 关于android不能使用HttpClient以及相关
  3. Activity 的启动流程源码分析(Android 9.0
  4. Android字体简述
  5. Android设置软件开机自启动
  6. Android NFC简介
  7. android中将数据写入手机内存和sdcard中
  8. android与JS交互
  9. Ubuntu 下编译Android(安卓)源代码
  10. android SQLiteDatabase中版本控制作用详