android studio 打包webview 5.0文件上传问题

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



 
  
	// 5.0 +文件上传
	@Override
	public 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 go
			File photoFile = null;
			try {
				photoFile = createImageFile();
				takePictureIntent.putExtra("PhotoPath", mCameraPhotoPath);
			} catch (IOException ex) {
				// Error occurred while creating the File
				Log.e("WebViewSetting", "Unable to create Image File", ex);
			}

			// Continue only if the File was successfully created
			if (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),部分机型也是无法上传文件,尚未解决,解决后更新,如有了解的朋友望不吝赐教。


你可能感兴趣的:(android)