之前在eclipse上打包的项目在5.0的手机上正常,这俩天项目转到android studio 上,5.0之上的系统文件上传反而无反应,之后根据网络资料整理解决,代码如下



   
// 5.0 +文件上传@Overridepublic boolean onShowFileChooser(WebView webView, ValueCallback filePathCallback, WebChromeClient.FileChooserParams fileChooserParams) {if (mUploadMessages != null) {//mUploadMessages.onReceiveValue(null);//这行代码会导致文件只能上传一次,需注意mUploadMessages = null;}mUploadMessages = filePathCallback;Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);if (takePictureIntent.resolveActivity(mMainActivity.getPackageManager()) != null) {// Create the File where the photo should goFile photoFile = null;try {photoFile = createImageFile();takePictureIntent.putExtra("PhotoPath", mCameraPhotoPath);} catch (IOException ex) {// Error occurred while creating the FileLog.e("WebViewSetting", "Unable to create Image File", ex);}// Continue only if the File was successfully createdif (photoFile != null) {mCameraPhotoPath = "file:" + photoFile.getAbsolutePath();takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT,Uri.fromFile(photoFile));} else {takePictureIntent = null;}}Intent contentSelectionIntent = new Intent(Intent.ACTION_GET_CONTENT);contentSelectionIntent.addCategory(Intent.CATEGORY_OPENABLE);contentSelectionIntent.setType("image/*");Intent[] intentArray;if (takePictureIntent != null) {intentArray = new Intent[]{takePictureIntent};} else {intentArray = new Intent[0];}Intent chooserIntent = new Intent(Intent.ACTION_CHOOSER);chooserIntent.putExtra(Intent.EXTRA_INTENT, contentSelectionIntent);chooserIntent.putExtra(Intent.EXTRA_TITLE, "Image Chooser");chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, intentArray);mMainActivity.startActivityForResult(chooserIntent, mMainActivity.INPUT_FILE_REQUEST_CODE);return true;}


然后是返回接收
/**     * 返回文件选择     */    @TargetApi(Build.VERSION_CODES.JELLY_BEAN)    @Override    protected void onActivityResult(int requestCode, int resultCode,                                    Intent intent) {        super.onActivityResult(requestCode, resultCode, intent);        if (requestCode == FILECHOOSER_RESULTCODE) {            mUploadMessage = chromeClient.getmUploadMessage();            if (null == mUploadMessage) return;            Uri result = intent == null || resultCode != RESULT_OK ? null                    : intent.getData();            mUploadMessage.onReceiveValue(result);            mUploadMessage = null;        }else  if(requestCode == INPUT_FILE_REQUEST_CODE){            mUploadMessages = chromeClient.getmUploadMessage2();            String mCameraPhotoPath = chromeClient.getCameraPhotoPath();            if (null == mUploadMessages) return;            // 5.0的回调            Uri[] results = null;            // Check that the response is a good one            if (resultCode == Activity.RESULT_OK) {                if (intent == null) {                    // If there is not data, then we may have taken a photo                    if (mCameraPhotoPath != null) {                        results = new Uri[]{Uri.parse(mCameraPhotoPath)};                    }                } else {                    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)};                    }                }            }            mUploadMessages.onReceiveValue(results);            mUploadMessages = null;        } else {            super.onActivityResult(requestCode, resultCode, intent);            return;        }    }


其他例如4.1+的系统版本(包含4.4),部分机型也是无法上传文件,尚未解决,解决后更新,如有了解的朋友望不吝赐教。


更多相关文章

  1. GreenDao数据库升级解决方案
  2. Android使用include标签无法设置具体位置的解决
  3. Android(安卓)OpenGL探索之纯色背景绘制
  4. Android获取验证码倒计时实现代码
  5. Android向node.js编写的服务器发送数据并接收请求
  6. ANDROID 设置状态栏与标题背景颜色一致
  7. Android(安卓)4.2充电画面关键代码分析
  8. Eclipse+CDT+GDB调试Android(安卓)NDK程序
  9. android在代码中修改view的布局

随机推荐

  1. 用C++实现最短路径之Dijkstra算法
  2. c#如何在程序中定义和使用自定义事件
  3. C中的time()函数怎么用?
  4. C语言中%d,%s,%x,%f,%.100的意义
  5. c语言是什么意思
  6. C#中常用的运算符有哪些
  7. c语言如何输出玫瑰花数?(代码示例)
  8. 指针常量与常量指针举例说明
  9. C#是什么,能做些什么?
  10. C#与.net有什么关系